Redis Lettuce 及 Spring 客户端 使用方法

大佬文章链接(44条消息) Redis高级客户端Lettuce详解_huayang183的博客-CSDN博客_lettuce

目录

lettuce客户端命令集

两种获取方式

五种数据类型使用

排序

分布式锁

TTL

持久化

配置

快照

AOF

主从(复制)

非事务型流水线(pipline)

降低内存占用

配置

分片

哨兵

集群

SpringBoot使用redis

基本配置

获取指令集方式

1.使用封装的api

2.使用原生指令集(轻度封装,但指令和格式没发现变化)


lettuce客户端命令集

两种获取方式

1.直接获取

    public static RedisClient client;
    public static StatefulRedisConnection<String, String> connect;
    public static RedisAsyncCommands<String, String> commands;
    static{
        client= RedisClient.create("redis://localhost:6379");
         connect = client.connect();
        commands = connect.async();
//异步模式下是否自动刷新命令,相当于pipline
        commands.setAutoFlushCommands(true);
    }

2.使用redisuri

    RedisURI redisUri = RedisURI.builder()                    // <1> 建立单机链接的链接信息
            .withHost("localhost")
            .withPort(6379)
            .withTimeout(Duration.of(10, ChronoUnit.SECONDS))
            .build();
    RedisClient redisClient = RedisClient.create(redisUri);   // <2> 建立客户端
    StatefulRedisConnection<String, String> connection = redisClient.connect();     // <3> 建立线程安全的链接
    RedisCommands<String, String> redisCommands = connection.sync();                // <4> 建立同步命令
    //异步模式下是否自动刷新命令,相当于pipline
     commands.setAutoFlushCommands(true);

五种数据类型使用

和redis命令行使用的命令和格式基本相同,忘了看下命令集源码,略过。

排序

(44条消息) Redis研究(十七)—SORT排序_小地盘的博客-CSDN博客_sort排序

事务及乐观锁

   RedisAsyncCommands<String, String> commands = Connect.commands;
    @Test
   public void test(){
        commands.watch("516741");//加乐观锁
        commands.multi();//开启事务
        commands.set("516741","test8765657865746878687");
        commands.unwatch();//取消乐观锁
        commands.discard();//取消事务
        commands.exec();//执行事务
    }

分布式锁

基本命令,详细加锁过程见  redis实战 中完整加锁过程。

        commands.setnx("lock_key","value");
        commands.msetnx(new HashMap<>());
        commands.hsetnx("hash","key","value");

TTL

    RedisAsyncCommands<String, String> commands = Connect.commands;
    @Test
    public void test(){
        commands.ttl("key");//查看key距离过期还有几秒
        commands.expire("key",122);//key在指定秒后过期
        commands.persist("key");//移除键的过期时间
        commands.expireat("key",1222222);//将键的过期时间设置为给定的unix时间戳
        commands.pexpire("key",122);//让键在指定的毫秒数后过期
        commands.pexpireat("key",132);//将一个毫秒级精度的unix时间戳设置为键的过期时间
        commands.pttl("key");//查看key距离过期时间还有多少毫秒
    }

持久化

Redis 中的数据持久化策略(RDB) - Single_Yam - 博客园 (cnblogs.com)

Redis详解(七)------ AOF 持久化 - YSOcean - 博客园 (cnblogs.com)

配置

#快照持久化配置

#从最近一次创建快照后开始计算,如60秒内有1000次写入,则使用BGSAVE更新快照,配置多个save选项时,同时生效。
save 60 1000 

#是否在创建快照失败后停止写入
stop-writes-on-bgsave-error no

# rdbcompression 配置为 yes,那么即代表 redis 进行 RDB 文件生成中,如果遇到字符串对象并且其中的字符串值占用超过 20 个字节,那么就会对字符串进行 LZF 算法进行压缩。
rdbcompression yes

#文件名
dbfilename filename.rdb

#rdbchecksum 配置 redis 是否使用 CRC64 校验算法校验 RDB 文件是否发生损坏,默认开启状态,如果你需要提升性能,可以选择性关闭。

rdbchecksum yes
################################################################

#AOF配置

#是否使用AOF持久化

appendonly no

#同步频率,有三个选项,always,no,everysec,对应每次,操作系统决定,每秒
appendfsync everysec

#aof文件名,默认是"appendonly.aof

 appenddilename aof文件名

#为yes表示rewrite期间对新写操作不fsync,暂时存在内存中,等rewrite完成后再写入,默认为no,建议yes。
no-appendfsync-on-rewrite no

#aof自动重写配置,当目前aof文件大小超过上一次重写的aof文件大小的百分之多少进行重写
auto-aof-rewrite-percentage 100

#设置允许重写的最小aof文件大小,避免了达到约定百分比但尺寸仍然很小的情况还要重写。
auto-aof-rewrite-min-size 64mb

#如果选择的是yes,当截断的aof文件被导入的时候,会自动发布一个log给客户端然后load。如果是no,用户必须手动redis-check-aof修复AOF文件才可以。默认值为 yes。

aof-load-truncated yes

#aof和rdb文件目录

dir ./

快照

        commands.bgsave();//新fork一个子进程,创建快照
        commands.save();//阻塞当前redis进程,创建快照,完成前不响应其他命令。

AOF

     commands.configSet("appendonly","yes");//配置文件没有改变,但奇怪的是原本没有的aof文件出现了
     commands.bgrewriteaof();//异步重写AOF文件,在执行后aof修改时间更新了,应该有效。

主从(复制)

    commands.slaveof("127.0.0.1",6379);//设置master,并复制master
    commands.slaveofNoOne();//Promote server as master.恢复为master。

非事务型流水线(pipline)

Lettuce中没找到pipline,键开篇那位大佬文章提到,Lettuce async命令类似于Jedis 中 pipline

void flushCommands()
Flush pending commands. This commands forces a flush on the channel and can be used to buffer ("pipeline") commands to achieve batching. No-op if channel is not connected

       //异步模式下是否自动刷新命令,相当于pipline
        commands.setAutoFlushCommands(true);
       //执行缓存的命令,手动刷新
       //Flush pending commands. This commands forces a flush on the channel and can be used to buffer ("pipeline") commands to achieve batching. No-op if channel is not connected
        commands.flushCommands();

降低内存占用

短结构,配合数据分片使用来降低内存占用,可见 redis实战。

配置

#每个列表最大元素数量

list-max-ziplist-entries 512

#每个列表所有节点最大体积

list-max-ziplist-value 64

hash-max-ziplist-entires 512

hash-max-ziplist-value 64

zset-max-ziplist-entries 128

zset-max-ziplist-value 64

分片

见redis实战,仅供参考,思路就是利用hash函数计算应该将数据写入哪个key中,缺点是聚合计算困难。

哨兵

哨兵构建(Windios环境下)及 创建链接(见大佬文章的高可用和分片,没试过)

(44条消息) redis哨兵_qq_52390606的博客-CSDN博客

集群

集群搭建(window环境下)及 创建链接(可能没有,当时没找到)

(44条消息) Redis cluster_qq_52390606的博客-CSDN博客

SpringBoot使用redis

Spring Boot 2.X(六):Spring Boot 集成 Redis-阿里云开发者社区 (aliyun.com)

基本配置

Spring Boot 2 Redis配置项总结 - 简书 (jianshu.com)

server.port=80
server.servlet.context-path=/

#reids相关配置
#redis服务器地址
spring.redis.host=localhost
#雷迪森服务器端口
spring.redis.port=6379
#redis密码,默认为空
spring.redis.password=
#redis数据库索引(默认为0)
spring.redis.database=0
#连接池对打阻塞等待时间(负表示没有限制)
spring.redis.jedis.pool.max-wait=10000
#连接池最大连接数(负表示没有限制)
spring.redis.jedis.pool.max-active=100
#连接池中的最大空闲链接
spring.redis.jedis.pool.max-idle=20
#连接池中的最小空闲链接
spring.redis.jedis.pool.min-idle=0
#链接超时时间
spring.redis.timeout=3000

获取指令集方式

1.使用封装的api

redisTemplate.opsForValue();//使用被封装的各种指令集

2.使用原生指令集(轻度封装,但指令和格式没发现变化)

RedisConnectionFactory redisConnectionFactory=redisTemplate.getRequiredConnectionFactory();
RedisConnection redisConnection = redisConnectionFactory.getConnection();
//释放连接
RedisConnectionUtils.releaseConnection(redisConnection,redisConnectionFactory);  

使用原生指令集,其余操作可参考Lettuce操作(上边的),使用封装的api没试过。

要自己实现序列化(json格式)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值