2. redis扩展知识(redis的扩容机制)

  本篇文章为你整理了2. redis扩展知识(redis的扩容机制)的详细内容,包含有redis扩展数据类型 redis的扩容机制 redis 规范 redis深入讲解 2. redis扩展知识,希望能帮助你了解 2. redis扩展知识。

  管道(pipeline)

  比如说客户端连接到redis服务端以后,要进行很多命令的操作,每次执行命令都会经过网络io然后调用到redis服务端,管道的技术可以把多个命令进行压缩,这样一次调用就可以了。

  使用nc 命令和redis建立连接,然后手动输入命令
 

  
 

  新开窗口,获取k1 的值
 

  上面方式理解后,可以说说管道的事,可以把多个命令通过管道给到与redis的连接
 

  比如往ooxx 这个通道里推送了一条消息
 

  新开窗口,订阅ooxx 通道
 

  
 

  发现没有hello 这条消息,因为是先往ooxx 通道推送的消息,所以后来订阅的ooxx 通道,收不到hello

  如果再往ooxx 通道推送消息
 

  可以看到是可以监听到消息的
 

  
 

  所以是监听了通道后,只能看到监听了通道以后的实时性消息

  消息是分实时性的和历史性的,实时性的就比如上面的例子
 

  
 

  比如微信或者QQ,如果用户去查找之前的历史消息,有可能查找3天内的,甚至更早的,如果是更早的数据,那肯定是查数据库的全量数据。所以redis主要是拿来做缓存用的,目的就是快。
 

  如果是查找实时性的数据,通过发布订阅可以实现,如果是查找历史数据,根据历史时间的顺序,使用有序集合sorted_set来实现。
 

  如果用户发送消息的时候,要分别把消息发送到消息订阅的窗口,和标识有序的历史消息,还要通过中间件比如kafka,最终把数据存到数据库。

  
 

  因为redis服务是单线程的,所以如果客户端是多线程情况下使用的时候,主要看哪个线程的exec命令先执行,谁就先提交事务。
 

  watch命令相当于cas操作,

  测试一下:
 

  使用watch命令对k1 进行操作,然后开启事务,执行命令
 

  新开启窗口,开启事务,修改k1 的值,然后提交事务,这是可以发现k1 的值确实已经发生更改
 

  
 

  这时候,回到第一个窗口,提交事务,因为k1的值发生了更改,所以对k1的值进行操作不成功,因为k1执行事务时候,k1的值和开启事务时候的值不一样了,发生了变化
 

  布隆过滤器

  比如客户端拿着很多不存在的key去请求redis,发现redis没有对应的key,就要去数据库查找,如果是大批量的情况下,然后造成了缓存穿透,布隆过滤器就是解决这个问题的。
 

  主要是通过小的空间来解决大的请求查找数据是否存在,通过使用bitmap来实现的,使用的是二进制位里的值来表示对应的数据是否存在。
 

  
 

  比如元素1和元素2是已有的商品元素,存在数据库里的,这两个元素可能有重复的映射函数表示同样的意思,元素3是客户端要查询的商品元素,如果元素3能通过布隆过滤器映射到对应的bitmap二进制位,说明有对应商品,就允许后面的查询操作。
 

  如果在允许后面的查询操作时候,没有对应的商品数据,数据库添加对应的元素,然后元素对布隆过滤器的添加标识。

  缓存LRU

  redis作为缓存存放的数据是部分数据,全量数据是存在数据库里的,redis里的数据随着业务的变化而变化,redis要清理掉不常用的访问的数据,中间会考虑一些算法。
 

  
 

  在给redis存放数据时候,如果设置了时间,在有效时间内,如果对这个数据进行修改,有效时间就会作废,修改后的数据变成永久数据。所以在编写业务代码时候如果修改了这种数据,要再对这个数据加上有效时间。

  以上就是2. redis扩展知识(redis的扩容机制)的详细内容,想要了解更多 2. redis扩展知识的内容,请持续关注盛行IT软件开发工作室。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: