redis - Redisson getAtomicLong - 如果密钥不存在怎么办?
问题描述
我正在使用 Redisson 在 Java 中构建缓存实现。我想用它来缓存一个数值。所以我像这样使用 getAtomicLong() :
RAtomicLong userNumber = redissonClient.getAtomicLong("my-key");
long value = userNumber.get();
但是,文档对这里发生的事情的描述不是很清楚,所以我有几个问题:
- 假设缓存中尚不存在“my-key”。getAtomicLong() 返回什么?
- 如果“my-key”不存在,userNumber.get() 返回什么?
解决方案
我写了一个愚蠢的 Java 示例程序并做了一些实验,所以让我回答你实际提出的问题和我认为你试图提出的问题。
假设缓存中尚不存在“my-key”。getAtomicLong() 返回什么?
-的一个实例,RAtomicLong
因为您将来可能会对incrementAndGet
键/值做一些事情(比如或其他事情)。
如果“my-key”不存在,userNumber.get() 返回什么?
零。是的,不是null
,是的,不是例外,只是 0。这在我的测试程序中相当令人惊讶。
关于Reddison API真正有趣的部分是它非常依赖于原子的东西——如果你可以从多个线程更新一个值,那就太好了——但似乎没有记录最简单的用例:我想从 Redis 读取或写入它不是数字/不是原子/我的线程或数据的结构不会相互干扰。
这似乎是雷迪森的RBucket
东西。
如果对象不在 Redis 中,那将返回 a 。null
RBucket<String> back = client.getBucket("foo");
String value = back.get();
if (value == null) {
System.out.println("NOPE, NULL");
} else {
System.out.println(value);
}
我真的希望能够更好地记录这一点 - 回首往事,我将“桶”视为东西的容器,但有一段时间我认为它意味着一些高级 Redis 模式,而不是“通用类型值的持有者”。
(如果你真的想要花哨的东西,上面有一个很棒的 baeldung artigle)。
推荐阅读
- c++ - 将图像从 c++ 更新到 QML
- java - 蛇头与蛇体 Java 碰撞的问题(处理中)
- python - adding to nested dictionaries in python
- tensorflow - 在 Keras 的部分神经网络中实现随机前向传递?
- python - ValueError: multiclass-multioutput format is not supported using sklearn roc_auc_score function
- api - Keras 烧瓶 API 没有给我输出
- regex - “.*”和“.*”有什么区别?
- url-rewriting - 使用 Wildfly 独立处理程序重定向我的 url 时如何设置占位符?
- android - android模拟器挂在Mac上
- java - 字段列表中的 Spring Boot JPA 未知列