redis进阶1

1、redis管道

原因: redis是一种基于客户端-服务端模型,以及请求响应-协议的TCP服务。会遵循一下步骤:

客户端请求 >> 阻塞socket >> 服务端响应

   

问题: 如上图所示,有n次会话,其中每一次会话的时间都会依据当时网络状况而定(很快或者很慢),每次会话耗费的时间我们称之为 RTT = round trip time 往返时间。如果RTT=250ms,那么redis-server 1秒钟只能处理4个请求。

   

解决方案: 使用 pipelining(管道) ,一次将多个指定打包发送,服务器端收到指令后将按顺序执行。大大减少了 TTP。

   

重要说明: 使用管道发送命令时,服务器将被迫回复一个队列答复,占用很多内存。所以,如果你需要发送大量的命令,最好是把他们按照合理数量分批次的处理,例如10K的命令,读回复,然后再发送另一个10k的命令,等等。这样速度几乎是相同的,但是在回复这10k命令队列需要非常大量的内存用来组织返回数据内容。

   

来自 <http://www.redis.cn/topics/pipelining.html>

   

   

pipelining(管道的使用方法):

1、 nc(NetCat)在网络工具中有"瑞士军刀"的美誉,其有Windows和Linux的版本。因为它短小精悍(1.84版本也不过25k,旧版本或缩减版甚至更小)、功能实用,被设计为一个简单、可靠的网络工具,可通过TCP或UDP协议传输读写数据。同时,它还是一个网络应用Debug分析器,因为它可以根据需要创建各种不同类型的网络连接。

   

通过nc发送请求有2种

a、先打通管道,再发送命令(可能会出现键位错乱)。

   

b、将命令直接发送到管道。

命令格式为:

Echo -e "redis命令以\n分割" | nc ip port

   

   

   

2、发布订阅(可以作为直播评论区

   

   

   

a、安照下列执行顺序可得出一结论,什么时候开始监听,什么时候就可以获取监听之后的消息。

   

拓展:

在一个直播平台中,用户需要查看实时评论,有需要查看3天以内的历史评论,还需要查看更久之前的评论。redis是如何解决???如下细节图

   

流程图:

   

   

   

   

   

   

3、事务

   

***只有同时具备MULTI 和 EXEC 才会执行。如果有多个事务同时开启,哪个事务最先提交谁的命令就最先执行。

MULTI :开启事务

EXEC : 提交事务

DISCARD : 取消事务

WATCH:这是一个很好用的指令,它可以帮我们实现类似于"乐观锁"的效果,即CAS(check and set)。

WATCH本身的作用是"监视key是否被改动过",而且支持同时监视多个key,只要还没真正触发事务,WATCH都会尽职尽责的监视,一旦发现某个key被修改了,在执行EXEC时就会返回nil,表示事务无法触发。

   

   

   

   

4、模块、过滤器(防止mysql被击穿)

   

   

   

   

   

   

在根目录下新建redisBloom文件夹,并进入执行命令:

wget https://github.com/RedisBloom/RedisBloom/archive/master.zip

   

   

   

解压后,进入文件夹,按照Readme提示,直接执行 make 。执行完毕后目录文件会生成一个redisBloom.so的文件。

将文件复制到 /opt/bigdata/redis5/ 下 与redis的bin目录同一级别。

   

然后 停止redis服务:

Service redis_port stop

   

查看服务:

Service redis_port status

   

最后挂载Bloom模块启动

Redis-server /etc/redis/6379.conf --loadmodule /opt/bigdata/redis5/redisBloom.so(此处一定要是绝对路径)。

   

Bloom过滤器

添加元素的原理

  1. 将要添加的元素给k个hash函数
  2. 得到对应于位数组上的k个位置
  3. 将这k个位置设置成 1

查询元素原理

  1. 将要查询的元素给k个hash函数
  2. 得到对应数组的k个元素
  3. 如果k个位置中有一个为0,则肯定不在集合中
  4. 如果k个位置全部为1,则有可能在集合中

   

   

   

5、数据库/缓存

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

5、缓存

   

redis缓存的消亡,内存过期的问题???

http://www.redis.cn/commands/expire.html

posted @ 2020-10-20 13:41  黑质白章  阅读(108)  评论(0编辑  收藏  举报