字符串
字符串类型是Redis最基础的数据结构。键都是字符串类型,其他数据结构都是基于字符串构建的。
字符串类型的值可以是字符串、数字和二进制数据,但最大值不能超过512M。
字符串常用命令
设置值
set key value [ex seconds][ps milliseconds] [nx|xx]
ex seconds:为键设置秒级过期时间
px milliseconds:为键设置毫秒级过期时间
nx:键必须不存在,才可以设置成功,用于添加
xx:键必须存在,才可以设置成功,用于更新
除了set选项,还有setex、setnx两个命令,作用和ex、nx选项一样。
setnx可以作为分布式锁的一种实现方案
获取单个值:get key
批量设置值:mset key value [key value …]
批量获取值:mget key [key …] 如果有些键不存在,值为nil(空),按照传入键的顺序返回
批量操作命令可以有效提高开发效率,但注意数量过多可能造成Redis阻塞或网络拥塞
计数:incr key
返回结果:
值不是整数,返回错误
值是整数,返回自增后的结果
键不存在,按照值为0自增,返回结果1
自减:decr
自增指定数字:incrby
自减指定数字:decrby
自增浮点数:incrbyfloat
不常用命令:
追加值:append key value
字符串长度:strlen key
设置并返回原值:getset key value
设置指定位置的字符:setrange key offset value
获取部分字符串:getrange key start end
内部编码
int:8个字节的长整型
embstr:小于等于39个字节的字符串
raw:大于39个字节的字符串
Redis根据当前值的类型和长度决定内部编码实现
使用命令:
object encoding key
可以看到键所属的内部编码
字符串的典型使用场景
- 缓存:加速读写和降低后端压力。比较推荐的键名是“业务名:对象名:id:[属性]”,可以防止键冲突和项目的可维护性,但也要注意键名过长造成的内存浪费
- 计数:可以实现快速计数、查询缓存的功能,同时数据可以异步落地到其他数据源。一个真实的计数系统还要考虑防作弊、按照不同维度计数、数据持久化等问题
- 共享Sesson:通过Redis对Seesion进行集中管理,需要保证Redis的高可用和扩展性,每次用户更新或者查询登录信息都直接从Redis中集中获取
- 限速:在限制用户在一段时间内只能操作几次的场景,可以使用Redis的超时功能进行控制