redis事务、redis订阅、redis删除策略、redis淘汰策略

本文总结一些redis事务、redis订阅、redis删除策略、redis淘汰策略。笔记来源于语雀https://www.yuque.com/books/share/9f4576fb-9aa9-4965-abf3-b3a36433faa6/skz5cm

redis事务

什么是redis的事务?

redis事务就是一个命令执行的队列,将一系列预定义命令包装成一个整体,就是一个队列。当执行的时候,一次性按照添加顺序依次执行,中间不会被打断或者干扰。

能干嘛?

一个队列中,一次性,顺序性,排他性的执行一系列命令

redis事务基本操作命令

开启事务:multi     设置事务的开始位置,这个指令开启后,后面所有的指令都会加入事务中

执行事务: exec     设置事务的结束位置,同时执行事务,与multi成对出现,成对使用

取消事务:discard  终止当前事务,取消multi后,exec前的所有指令

注意:加入事务的命令并没有立马执行,而且加入队列中,进行exec命令后才执行

加入和执行事务有错误会怎么办?

1)当加入事务出现语法报错,则整个事务取消

2)当事务加队队列完成执行exec时报错,则队列中能成功执行的返回成功,失败的返回失败,前面指令报错不影响后面的指令

注意: 已经执行完毕的命令对应的数据不会自动回滚,需要程序员自己实现

redis事务是假事务,不会进行回滚。

监控key

watch: 对key进行监控,如果在exec执行前,监控的key发生了变化,终止事务执行

unwatch: 取消对所有的key进行监控

注意:使用watch必须在开启事务multi之前进行,否则watch失效。当监控某个key还没有在事务中操作该key但是还没有提交事务,但是另外一个地方又操作了这个key,那么这个事务将也会无效。

redis发布订阅

Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。

Redis 客户端可以订阅任意数量的频道。

1 PSUBSCRIBE pattern [pattern ...]
订阅一个或多个符合给定模式的频道。
2 PUBSUB subcommand [argument [argument ...]]
查看订阅与发布系统状态。
3 PUBLISH channel message
将信息发送到指定的频道。
4 PUNSUBSCRIBE [pattern [pattern ...]]
退订所有给定模式的频道。
5 SUBSCRIBE channel [channel ...]
订阅给定的一个或多个频道的信息。
6 UNSUBSCRIBE [channel [channel ...]]
指退订给定的频道。

https://www.runoob.com/redis/redis-pub-sub.html

删除策略

定时删除-->以CPU内存换redis内存

惰性删除-->以redis内存换CPU内存

定期删除

redis使用:惰性删除+定期删除

1.redis在启动的时候读取配置文件hz的值,默认为10

2.每秒执行hz次serverCron()-->databasesCron()--->actveEXpireCyle()

3.actveEXpireCyle()对每个expires[*]进行逐一检测,每次执行250ms/hz

4.对某个expires[*]检测时,随机挑选N个key检查

如果key超时,删除key

如果一轮中删除的key的数量>N*25%,循环该过程

如果一轮中删除的key的数量小于等于N25%,检查下一个expires[ ]

current_db用于记录actveEXpireCyle()进入哪个expires[ * ] 执行,如果时间到了,那么下次根据current_db继续执行

逐出算法

相关配置:

maxmemory: 最大可使用内存,占用物理内存的比例,默认值为0,,表示不限制。生产环境一般根据需求设置,通常50%以上

maxmemory-policy: 达到最大内存后,对挑选出来的数据进行删除策略

maxmemory-samples: 每次选取待删除数据的个数,选取数据时并不会全库扫描,采用随机获取数据的方式作为待检测删除数据