《Redis深度历险》读书笔记
list/set/hash/zset 这四种数据结构是容器型数据结构:
1、create if not exists
2、drop if no elements
阻塞读在队列没有数据的时候,会立即进入休眠状态,一旦数据到来,则立刻醒过来。消息的延迟几乎为零。用 blpop/brpop 替代前面的 lpop/rpop
位图不是特殊的数据结构,它的内容其实就是普通的字符串,也就是 byte 数组。我们 可以使用普通的 get/set 直接获取和设置整个位图的内容,也可以使用位图操作 getbit/setbit 等将 byte 数组看成「位数组」来处理。(用在比如用户签到的地方)
HyperLogLog 提供了两个指令 pfadd 和 pfcount,根据字面意义很好理解,一个是增加 计数,一个是获取计数。(用在比如UV)
当布隆过滤器说某个值存在时,这个值可能不存在;当它说不存在时,那就肯定不存在。
可以使用zset结构进行简单限流,key为用户的动作,score值为时间,只关注时间窗口内的行为
Redis 4.0 提供了一个限流 Redis 模块,它叫 redis-cell。该模块也使用了漏斗算法,并提供了原子的限流指令。
使用Geo计算地理相关的东西
如果你观察到 Redis 的内存大起大落,这极有可能是因为大 key 导致的
使用scan来进行key相关的处理
在技术领域性能并不总 是一切,还有简单性、易理解性和易实现性,这些都需要进行适当权衡。
Redis 使用操作系统的多进程 COW(Copy On Write) 机制来实现快照持久化
Redis 的 intset 是一个紧凑的整数数组结构,它用于存放元素都是整数的并且元素个数 较少的 set 集合,当集合对象的元素不断增加,或者某个 value 值过大,这种小对象存储也会 被升级为标准结构
增量同步:Redis 同步的是指令流,主节点会将那些对自己的状态产生修改性影响的指令记录在本 地的内存 buffer 中,然后异步将 buffer 中的指令同步到从节点,buffer是一个定长的环形数组,如果数组内容满了就会从头覆盖前面的内容
可以将 Redis Sentinel 集群看成是一个 ZooKeeper 集群,一般由3-5个节点组成,客户端来连接集群时,会首先连接sentinel,通过它来查询主节点的地址,当主节点发生故障时,客户端会重新获取地址
Redis Cluster 将所有数据划分为 16384 的 slots,每个节点负责其中一部分槽位,槽位的信息存储于每个节点中,客户端为了可以直接定位某个具体的key所在的节点,它就需要缓存槽位相关信息
因为 Redlock 需要向多个节点进行读 写,意味着相比单实例 Redis 性能会下降一些
如果有大批量的 key 过期,要给过期时间设置 一个随机范围,而不能全部在同一时间过期