Redis小杂烩

相对于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。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值