redis——Jedis、慢查询、发布订阅、bitmap

 

一  Java客户端Jedis

Jedis是Redis官方推荐的面向Java的操作Redis的客户端,而RedisTemplate是SpringDataRedis中对JedisApi的高度封装。
SpringDataRedis相对于Jedis来说可以方便地更换Redis的Java客户端,比Jedis多了自动管理连接池的特性,方便与其他Spring框架进行搭配使用如:SpringCache。关于RedisTemplate的使用我们可以看我以前的博文:十次方——Redis、SpringCache

具体的API我们不介绍了,我们来看看Jedis直连和Jedis连接池。

Jedis直连

Jedis连接池

两个方案的比较

二.  慢查询

客户端请求到一个redis的完整的生命周期

其中有两点说明:

  1. 慢查询发生在第三阶段
  2. 客户端超时不一定慢查询,但慢查询是客户端超时的一个可能因素

慢查询是一个先进先出的队列,假如一条命令它在第三步的时候被列为慢查询,它就会进入一个队列(其实就是redis的列表来实现的),且这个队列是固定长度的,且保存在内存中。

慢查询有两个配置:

  • slowlog-max-len:设置队列的长度的,当队列满了,就会掉到最开始的数据
  • slowlog-log-slower-than:设置慢查询的阈值(微秒),但此值为0时,记录所有命令

慢查询的配置方法:

慢查询命令:

运维经验:

三  pipeline

批量网络命令通信模型:

使用pipeline:

两者之间的对比:

其中有两点注意的是:

  1. Redis的命令时间是微秒级别
  2. pipeline每次条数要控制(网络)

M操作与pipe操作的区别如下图:

将pipeline命令进行拆分,是非原子操作,单返回还是按顺序的

三  发布订阅

我们的角色有:发布者(publisher),订阅者(subscriber),频道(channel),

模型图如下:

使用场景:如我们需要将这三个订阅者的本地缓存全部清除

还有一个消息队列模式,该模式中发布者发布的一个消息只有一个订阅者能拿到

使用场景:三个人抢一个红包

四  bitmap

我们先来看下字符串big的二进制

我们打开客户端做下测试:

我们取第一位为0,第二位为1,和上面的二进制是一样的

也就是说,我们可以对直接对字符串的位进行操作

我们下面来看下用bitmap来实现独立用户统计的功能

假设我们有这个网站有一亿个用户,每天的独立访问量是五千万,我们分别使用set和Bitmap来存储userid如下:

是不是Bitmap在什么情况下都比set好,还是要分情况的

发布了114 篇原创文章 · 获赞 199 · 访问量 20万+

猜你喜欢

转载自blog.csdn.net/qq_36582604/article/details/89382893