Redis 基本操作
2021-02-01 本文已影响0人
西门早柿
Redis 基本操作
- set
- mset
- setnx
- setex
- incr
- incrby
- get
- mget
- exists
- del
- expire
基本数据结构
- string
- 位图操作
- setbit
- getbit
- bitcount
- bitops
- bitfield get/set/incrby
- 溢出策略:wrap/sat/fail
- 位图操作
- list
- rpush
- llen
- rpop
- lpop
- lindex O(n)
- ltrim O(n)
- lrange O(n)
- hash
- hset
- hget
- hmset
- hmget
- hlen
- hgetall
- set
- sadd
- scard
- smembers
- sismember
- spop
- zset (WITHSCORES)
- zadd [score key]
- zrange [start end]
- zrevrange
- zcard
- zscore [key]
- zrangebyscore [score0 score1]
- zrem
分布式锁
- setnx -> lock
- del -> unlock
- 如何保证锁及时得到释放及不被错误释放
- 过期时间
- 由于 setnx 和 expire 不是原子指令,可能导致 expire 没有生效
- set key value ex 5 nx,这个指令是 setnx+expire 的原子指令
- lock 的值设一个随机数,del 时判断这个随机值是否正确
- 但 get 和 del 也不是一个原子操作,所以可能会有问题
- 可以用 lua 脚本将 get 和 del 封装成一个原子操作
- 过期时间
- 可重入锁与非可重入锁
队列
- rpush/rpop/lpop 非阻塞,浪费 CPU
- brpush/brpop/blpop
- 服务端会断开长时间闲置的客户端连接,使用 brpop 时不会永远阻塞,要注意处理异常
- zset 实现延时任务队列
HyperLoglog
- 用来模糊统计超大集合中不同 key 的个数,非精确的去重统计方案
- pfadd/pfcount/pfmerge
Bloom Filter
- 存在的不一定存在
- 不存在的一定不存在
- 实现原理
限流算法
- 滑动窗口
- 漏斗算法
- 令牌桶算法
- Redis-Cell
- cl.throttle
GeoHash
- 用来计算地球坐标之间的距离,包括指定两个坐标间的距离,以及获取离某个坐标最近的几个目标。
- 内部其实就是一个 zset,保存的是坐标编码之后的值。
keys & scan
- keys 使用不当会极大的影响 redis 的稳定性
- scan 0 match key99* count 1000
- 其中 1000 指的不是返回的结果数,而是约等于遍历的 slot 数
- scan 的细节
- 返回结果可能有重复,需要客户端去重
- 遍历的过程有数据修改,修改后的值能不能遍历到是不一定的
- rehash 的影响是如何解决的
- --big-keys 用来找到 redis 中的大 key