redis一些笔记

base


字典:

hget/hset

在redis字典中值只能是字符串,使用渐进式进行rehash。在rehash的过程中,会保留两个hash结构;查询时会同时查询两个结构;逐渐完成hash的迁移。

  • 如果大部分时候使用结构中的大部分数据,可以选择将整个结构序列化,使用string类型存储。
  • 如果大部分时候使用结构中的小部分数据,可以将结构进行拆分再序列化存储。

当hash最后一个元素被删除时,回收内存。


键值对:

get/set
setnx = set if not exist
setex //可以指定ttl

键值对的方式进行存储,可以批量处理键值对。而且能够设置key的过期时间

setex A 5 tyuio  # 5s 后过期,等价于 set+expire

set A tyuio
expire A 5

setnx可以实现锁,redis的setnx

  • 并发量较高时,缓存到期失效,可能出现大规模访问数据库,需要锁,可以setnx实现;
  • 创建了锁却由于宕机没有解开锁崩盘,setnx需要tll,setnx+expire
  • 只有一个请求的 setnx 可以成功,但是任何一个请求的 Expire 却都可以成功(lua脚本
  • 新版redis只用set指令就可以实现上面功能
  • 如果一个请求更新缓存的时间比较长,甚至比锁的有效期还要长,导致在缓存更新过程中,锁就失效了,此时另一个请求会获取锁,但前一个请求在缓存更新完毕的时候,如果不加以判断直接删除锁,就会出现误删除其它请求创建的锁的情况,所以我们在创建锁的时候需要引入一个随机值(在val加上随机值,删除时判断下?这个只能解决删除不对应锁的问题)
  • 坏情况是每次请求都出现了锁超时,但通过ttl可以保证DB请求的间隔,避免雪崩

集合set

Set可以看成一个特殊的字典

set		//列表,去重
zset 	//有序列表,去重+排序

zset的排序主要通过跳跃列表实现,能够进行快速查找


《Redis 深度历险:核心原理与应用实践》

posted @ 2018-08-29 17:33  Przz  阅读(233)  评论(0编辑  收藏  举报