字符串
字符串类型的值实际可以是字符串(简单的字符串、复杂的字符串例如 JSON 和 XML )、数字(整数、浮点数),甚至是二进制(图片、音频、视频),但是值最大不能超过 512MB。
常用命令
set 设置值
set key value
设置值,时间复杂度 O(1),设置成功则返回 OK
,设置失败返回 0
。
set 命令还有几个选项:
ex seconds:为键设置过期时间,单位秒;
px milliseconds:为键设置过期时间,单位毫秒;
nx:键必须不存在才能设置成功;
xx:于 nx 相反,必须存在才能设置成功。
get 获取值
get key
获取值,时间复杂度为 O(1)。
返回值:
字符串,若键不存在则返回空(nil)。
del 删除键
del key key...
删除键,时间复杂度为 O(1),可批量删除;不存在的 key 会被忽略。
返回值:
整型,删除个数
批量设置值
mset key value key value...
批量设置值,时间复杂度为 O(n),n为键的个数。
返回值:
总是返回 OK
批量获取值
mget key key...
批量获取值,时间复杂度为 O(n),n为键的个数。
返回值:
按键传入顺序的返回值列表,不存在的键对应的值为空(nil)
计数增
incr key
返回值:
- 值不是整数,返回错误
- 值是整数,返回递增后的结果
- 键不存在,从 0 开始递增,返回 1
计数减
decr key
- 值不是整数,返回错误
- 值是整数,返回递减后的结果
- 键不存在,从 0 开始递增,返回 -1
使用场景
缓存功能
上图是比较典型的缓存使用场景,其中 Redis 作为缓存层,MySQL 作为存储层,绝大部分请求的数据是从 Redis 中获取。由于 Redis 具有支撑高并发的特性,所以缓存通常能起到加速读写喝降低后端压力的作用。
计数
许多应用都会使用 Redis 作为计数的基础工具,它可实现快速计数、缓存查询的功能,同时数据可以异步落地到其他数据源。
共享 Session
一个分布式 Web 服务将用户的 Session 信息(例如用户登录信息)保存在各自服务器中,这样会造成一个问题,出于负载均衡的考虑,分布式服务会将用户的访问均衡到不同服务器上,用户刷新一次访问可能会发现需要重新登录。为了解决这个问题,可以使用 Redis 将用户的 Session 集中管理,在这种模式下只要保证 Redis 是高可用和扩展性的。
限速
phoneNum = '138******';
key = 'sms:limit:${phoneNum}';
isExists = redis.set(key, 1, 'ex 60', 'nx');
if(isExists !== null || redis.incr(key) <=5){
// 通过
} else {
// 限速
}
上述就是利用 Reids 实现了限速功能,例如一些网站限制一个 IP 地址不能在一秒钟之内访问超过 n 次也可以采用类似的思路。
备注
- redis 键名推荐使用 ”业务名:对象名:id:[属性]“