String
最简单的类型,可以存储 数字、字符串、序列化后的json对象、二进制对象等。value值不能大于512M.
技巧💡
最常用的使用场景,
- 缓存。可以缓存json对象等。
- 分布式锁,使用setnx
- counter,计算器
- 限流器
我们常说的分布式锁
内部编码
使用场景
缓存
涉及到缓存和数据库一致性的问题。 如何缓存json对象时,应该要注意序列化器。为减少内存的占用,一般会转换成 byte[]数组,有些还会使用 snappy 进行压缩。在使用时,在进行解压
分布式锁
在6.12版本之后,才支持设置过期失效,保证原子性。
在6.12之前,我们常说的setnx命令,是不支持设置过期时间的。所以需要加lua脚本保证原子性。
SET lock_key unique_value NX PX 10000
- lock_key 就是 key 键;
- unique_value 是客户端生成的唯一的标识;释放时,需要判断,是否是同一个客户端
- NX 代表只在 lock_key 不存在时,才对 lock_key 进行设置操作;
- PX 10000 表示设置 lock_key 的过期时间为 10s,这是为了避免客户端发生异常而无法释放锁。
PX —> pexpire
ex —> expire
exat —> expireat
counter
如果string是数字类型时,还支持自增操作。是线程安全的。类型java种的AtomicLong.
incr key ==> incrby key 1
incrby key count
describe