相对于redis的其他内容,小编也没有涉猎的很深入了!就在这一章把小编涉猎的其他内容也写一下吧!
redis事务:
1、什么是事务:redis事务就是一个命令执行的队列,将一系列预定义命令包装成一个整体,就是一个队列。当执行的时候,一次性按照添加顺序依次执行,中间不会被打断或者干扰。一个队列中,一次性,顺序性,排他性的执行一系列命令
2、事物常用命令
开启事务:multi设置事务的开始位置,这个指令开启后,后面所有的指令都会加入事务中
执行事务:exec设置事务的结束位置,同时执行事务,与multi成对出现,成对使用
取消事务:discard 终止当前事务,取消multi后,exec前的所有指令
注意:加入事务的命令并没有立马执行,而且加入队列中,exec命令后才执行
3、事物注意事项
(1)加入事务语法报错,事务则取消
(2)执行事务报错,则成功的返回成功,失败的返回失败,不影响报错后面的指令
注意: 已经执行完毕的命令对应的数据不会自动回滚,需要程序员自己实现
4、监控key
watch:对key进行监控,如果在exec执行前,监控的key发生了变化,终止事务执行
unwatch:取消对所有的key进行监控
下面小编就为大家演示一下redis的事务吧!为了方便大家观看呢,小编这边开两个窗口来展示!窗口一负责开启事务、提交事务。窗口二负责在事务执行前和事务执行后进行查询。
窗口一:
我们可以通过窗口一看到,这两条命令已经被加入到了队列中!那么接下来我们还是用窗口二验证一下。
窗口二:
我们可以看到事务没有提交的时候,都没有执行,那么我们现在提交一下,看看情况!
窗口一:
我们可以看到两个命令已经提交了哦!我们再到窗口二进行一下验证!
窗口二:
现在我们已经可以查到这个窗口一提交的值了呦!
下面我们再做一下尝试一下监控,看一下监控的情况吧!
我们可以看到,redis中如果被检控的key有变化,那么事务是失败的
redis发布订阅
publish: 发布消息 语法:publish channel名称 “消息内存”
subscribe: 订阅消息 语法:subscribe channel名称
psubscribe: 使用通配符订阅消息 语法: pubscribe channel*名称
punsubscribe: 使用通配符退订消息。语法:punsubscribe channel*名称
unsubscribe : 退订消息 语法:unsubscribe channel名称
redis删除策略
1、定时删除-->以CPU内存换redis内存
2、惰性删除-->以redis内存换CPU内存,只有在get key时才会查询key是否过期
3、定期删除
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: 达到最大内存后,对挑选出来的数据进行删除策略
(volatile开头,针对的是设置了过期时间的数据)
(allkeys开头,针对所有数据)
(flu根据访问次数淘汰)
(lru根据访问时间淘汰)
maxmemory-samples: 每次选取待删除数据的个数,选取数据时并不会全库扫描,采用随机获取数据的方式作为待检测删除数
redis的一些数据结构
GEO,可以计算距离 向GEO中加入精度及纬度信息,即可计算距离
GEOADD locations 116.419217 39.921133 beijin
GEOPOS locations beijin
GEODIST locations tianjin beijin km 计算距离
GEORADIUSBYMEMBER locations beijin 150 km 通过距离计算城市
注意:没有删除命令 它的本质是zset (type locations)
所以可以使用zrem key member 删除元素
zrange key 0 -1 表示所有 返回指定集合中所有value
hyperLogLog,可以做统计
Redis 在 2.8.9 版本添加了 HyperLogLog 结构。
Redis HyperLogLog 是用来做基数统计的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定 的、并且是很小的
在 Redis 里面,每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基 数。这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比。
PFADD 2017_03_06:key 'yes' 'yes' 'yes' 'yes' 'no'
PFCOUNT 2017_03_06:key 统计有多少不同的值
1.PFADD 2017_09_08:key uuid9 uuid10 uu11
2.PFMERGE 2016_03_06:key 2017_09_08:key 合并
注意:本质还是字符串 ,有容错率,官方数据是0.81%
bigmaps位图
redis底层数据存储为二进制格式,可以用位图进行更改二进制数据,bigmaps可以进行动态扩容。
setbit key 500000 0
getbit key 500000
bitcount key 统计有多少个1
Bitmap本质是string,是一串连续的2进制数字(0或1),每一位所在的位置为偏移(offset)。
string(Bitmap)最大长度是512 MB,所以它们可以表示2 ^ 32=4294967296个不同的位。
可以用bigmaps实现点赞功能。可以通过setbig创建一个key。