Redis:redission 源代码剖析3 future模式

限时加码!20+主流AI编程工具免费用 购周边加赠Coding Plan Lite,Claude Code、Cursor等即刻畅享,学习进阶更高效! 阅读详情


Redission核心代码流程使用Promise模式。 这归功于netty优秀的架构,是Redission提供异步和同步编程的核心。

	      //创建redis客户端
	      Redisson redisson =(Redisson) Redisson.create();
              //创建RBucket对象
	      RBucket<String> bucket = redisson .getBucket("test1");
	      //设置对象
	      bucket.set("someValue");
	      //获取结果
	      String bucketObject = bucket.get();
	      System.out.println("bucketObject:"+bucketObject);

这篇博客主要详细介绍Redission提供的RBucket 类。

/**
 * Any object holder
 * @author Nikita Koksharov
 */
public interface RBucket<V> extends RExpirable, RBucketAsync<V>
{
    V get();
    void set(V value);
    void set(V value, long timeToLive, TimeUnit timeUnit);
    @Deprecated
    boolean exists();
}

RBucket提供set()和sget()方法用于保存和获取对象。RedissonBucket 是对RBucket对象的实现。RedissonBucket实现set()和get()同步方法和异步方法。

public class RedissonBucket<V> extends RedissonExpirable implements RBucket<V> {
    protected RedissonBucket(CommandAsyncExecutor connectionManager, String name) {
        super(connectionManager, name);
    }
    protected RedissonBucket(Codec codec, CommandAsyncExecutor connectionManager, String name) {
        super(codec, connectionManager, name);
    }
    @Override
    public V get() {
        return get(getAsync());
    }
    @Override
    public Future<V> getAsync() {
        return commandExecutor.readAsync(getName(), codec, RedisCommands.GET, getName());
    }
    @Override
    public void set(V value) {
        get(setAsync(value));
    }
    @Override
    public Future<Void> setAsync(V value) {
        return commandExecutor.writeAsync(getName(), codec, RedisCommands.SET, getName(), value);
    }
    @Override
    public void set(V value, long timeToLive, TimeUnit timeUnit) {
        get(setAsync(value, timeToLive, timeUnit));
    }
    @Override
    public Future&
Redisson——RFuture设计 Redisson中RFuture设计原理,结合CompletableFuture和Netty的Future\Promise机制,实现异步多线程和对Redis通讯封装 阅读详情

相关推荐

Redis:redission 源代码剖析1 连接建立

redission作为redis 官方推荐的java客户端。 redission使用netty4.x作为网络层。 redission使用异步io方式操作。这与jedis 同步io操作方式完全不同。 但是redission也提供了同步操作方式。

sunning9001的专栏 2793

Avira AntiVir Personal 8 - FREE Antivirus/免费的杀毒软件

主要更新内容: * 杀毒引擎扫描速度20%上升* 新的用户介面,更为人性化设计* 新增功能,阻止上网过程中恶意程序的自动下载* 新增anti-bot安全模块,保护PC免受劫持* 电脑救助系统可直接使用,不需要从根目录启动 下载地址:http://www.free-av.com/en/download/1/avira_antivir_personal__free_antivirus.html...

caobihole 192

泛微E9开发 明细表字段赋值到主表字段,将各类型合计赋值到主表类型合计中

①绑定明细表类型、预计金额字段的值改变事件,每当有值发生改变,就需要重新计算供应商1、供应商2、供应商3的合计,如果不绑定这两个字段的话,会出现计算不及时或计算错误的问题。②当有明细行被删除时,也需要重新计算供应商1、供应商2、供应商3的合计,比如删除了供应商1的明细行,如果不重新计算,那么供应商1的值还是被删之前的值,合计错误。将各类型合计赋值到主表类型合计中。

a_waste_only的博客 3785

Redis:redission 源代码剖析2 编码解码过程

在Netty和redission中都使用了java的public interface Future<V> 模式。 理解redission的核心流程关键在于Future模式,关键代码RedisClient 构造函数中。 在RedisClient中初始化Channel的时候,用到了ConnectionWatchdog CommandEncoder CommandsListEncoder CommandsQueue CommandDecoder ConnectionWa

sunning9001的专栏 4007

Redisson之RBucket

package bright.redisson; import org.redisson.Redisson; import org.redisson.api.RBucket; import org.redisson.api.RedissonClient; import org.redisson.config.Config; import org.redisson.config.SingleSe...

look4liming的专栏 1万+

RBucket接口

public interface RBucket<V> extends RExpirable, RBucketAsync<V> { void set(V var1); //设置桶存储的对象 void set(V var1, long var2, TimeUnit var4); //设置桶存储的对象,缓存超时时间 boolean trySet(V var1);...

AntKengElephant的博客 1590

redission 源代码剖析3 future模式

Redission核心代码流程使用Promise模式。 这归功于netty优秀的架构,是Redission提供异步和同步编程的核心。 Config config = new Config(); config.useSingleServer().setAddress("redis://192.168.2.41:6379") .setPassword("rabbit123@"); //创建客户端 RedissonClient rediss

zsj777的专栏 704

RedisTemplate常用集合之boundValueOps

一、boundValueOps 简单的Key-Value操作。 1、BoundValueOperations BoundValueOperations就是一个绑定key的对象,我们可以通过这个对象来进行与key相关的操作。 # 绑定一个key对象Fetter BoundValueOperations boundValueOps = redisTemplate.boundValueOps("Fetter"); 2、set(V value) 给绑定键重新设置值(如果没有值,则会添加这个值)。 b

wenchang-的博客 1804

如何用 Redis 实现一个分布式锁

场景模拟 一般电子商务网站都会遇到如团购、秒杀、特价之类的活动,而这样的活动有一个共同的特点就是访问量激增、上千甚至上万人抢购一个商品。然而,作为活动商品,库存肯定是很有限的,如何控制库存不让出现超买,以防止造成不必要的损失是众多电子商务网站程序员头疼的问题,这同时也是最基本的问题。 在秒杀系统设计中,超卖是一个经典、常见的问题,任何商品都会有数量上限,如何避免成功下订单买到商品的人数不超过商品数量的上限,这是每个抢购活动都要面临的难点。 针对大量的并发请求,我们可以通过 Redis 来抗,也就是说对于库存

m0_67402236的博客 2223

Redis

Redis

Future 591

Java反射应用:基于Redis实现一个通用的Dao类

前言 ​ Redis是开源的,内存数据结构存储的健值数据库。即Key: Value形式来存储每一个数据,以Redis String、Hash、List类型为例: String 相当于 Map<String, String> Hash 相当于 Map<String, Map<String, String>> List 相当于 Map<Strin...

daydream13580130043的博客 1392

通过 Lettuce 来操作 Redis

Java 操作 Redis 的库有两个,Jedis 和 Lettuce,目前 SpringBoot 2.x 中已经将 Jedis 换成了 Lettuce,让我们一起来看看这个东西。 Redis介绍 Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。相比Memcached它支持存储的类型相对更多(字符、哈...

江城宴的博客 2129

RedisTemplate - 常用集合之opsFor系列

一、opsForValue 简单的Key-Value操作 1、set(K key, V value) 该方法是向Redis新增一个key-value,由方法参数可知k-v可以是泛型,也就是说我们k-v不一定要是传统的String-String,还可以是Object-Object...

weixin_48358336的博客 3983

Redis命令详解:Keys

介绍完Redis连接相关命令后,再来介绍一下与Key相关的命令,Redis作为一个key-value数据库,对Key进行操作是无法避免的。 DEL 最早可用版本1.0.0 删除指定的键值对,如果指定的key不存在,则忽略。DEL命令的时间复杂度是O(N),对于除字符串外的其他数据类型,命令的时间复杂度为O(M),M是值的元素的个数。所以,在生产环境尽量避免一次性删除过多复杂数据类型的操作。 127...

weixin_34184158的博客 484

Lettuce快速入门

最近在开发一个使用Redis协议包装HBase的Proxy服务器,一路写的很顺,客户端使用redis-py提供的execute_command方法也轻松搞定。但是在编写J...

codehole_的博客 977

Redisson->让redis操作更优雅

Redisson系列->让redis操作更优雅

Y_hahaha的博客 4722

redis的java客户端lettuce的使用

从官方文档翻译并整理的,有地方可能表述不准确 文档地址:https://github.com/lettuce-io/lettuce-core/wiki/About-lettuce 1. lettuce的介绍 lettuce是一个线程安全的redis客户端。提供同步,异步和reactive(?)的APIs.。如果可以避开阻塞和事务型的操作比如BLPOP和MULTI/EXEC,多个线程可以分...

.zz的博客 2万+

Redis高级——批处理优化

第二种方案:串行slot,简单来说,就是执行前,客户端先计算一下对应的key的slot,一样slot的key就放到一个组里边,不同的,就放到不同的组里边,然后对每个组执行pipeline的批处理,他就能串行执行各个组的命令,这种做法比第一种方法耗时要少,但是缺点呢,相对来说复杂一点,所以这种方案还需要优化一下。第三种方案:并行slot,相较于第二种方案,在分组完成后串行执行,第三种方案,就变成了并行执行各个命令,所以他的耗时就非常短,但是实现呢,也更加复杂。这个时候,我们可以找到4种解决方案。

康小庄的博客 1975

总结问题分析方法(导出时出现连接被提前响应错误)

总结问题分析方法(导出时出现连接被提前响应错误) 2021-04-2711:01:23.286 ERROR 12572 --- [nio-8077-exec-5] o.s.b.w.servlet.support.ErrorPageFilter: Cannot forward to error page for request [/check/checkeveryday/checkEndEveryDay/export] as the response has already been connitted. A

qq_38167629的博客 456

java防重防频繁工具

开发过程中有些接口的跑动比较耗时耗资源,比如计算销售手底下所有门店的商品,点击过于频繁就会导致大量资源消耗,因此博主在项目中封装了一套防重放频繁的工具。 由于是分布式,所以需要依赖redis,单体服务其实可以使用本地缓存。...

m0_69270256的博客 8309
上一篇: Redis:redission 源代码剖析2 编码解码过程
下一篇: MessagePack: MessagePack入门
高效能人生
博客等级 码龄16年 32粉丝 130原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值