@hainingwyx
2019-02-15T16:37:11.000000Z
字数 1155
阅读 927
redis
常用命令
# 设置值,返回OK代表设置成功
set key value [ex seconds] [px milliseconds] [nx|xx]
# ex seconds:设置秒级过期时间
# px milliseconds:设置毫秒级过期时间
# nx:键必须不存在才能设置成功,用于添加
# xx:键必须存在才能设置成功,用于更新
# 设置值
setex key seconds value
setnx key value
# 获取值
get key
# 批量操作可以减少网络时间,提高业务处理效率,但每次批量操作命令数有限制,过多会造成redis阻塞或者网络阻塞
# 批量设置值
mset key value [key value ...]
# 批量获取值,不存在则返回nil
mget key [key ...]
# 计数
# 单线程架构不需要使用CAS机制,没有额外开销
# 值不是整数时,返回错误
# 键不存在,按照值为0自增
incr key
# 自减
decr key
# 自增指定数字
incrby key increment
# 自减指定数字
decrby key decrement
# 自增浮点数
incrbyfloat key increment
不常用命令
# 字符串尾部追加值
append key value
# 字符串长度,一个中文占3个字节
strlen key
# 设置并返回原值
getset key value
# 设置指定位置的字符
setrange key offset value
# 获取部分字符串
getrange key start end
内部编码有:
+ int:8个字节的长整型
+ embstr:小于等于39个字节的字符串
+ raw:大于39个字节的字符串
缓存
例如获取用户信息,首先从redis获取用户信息,如果没有获取到用户信息,需要从MySQL中进行获取,并将结果会写到redis,添加1小时的过期时间
计数
可实现快速计数、查询缓存,同时数据可以异步落地到其他数据源。
共享session
分布式web服务将用户的session信息保存在各自服务器中,负载均衡时,分布式服务会将用户的访问均衡到不同服务器中,用户刷新一次可能需要重新登录。使用redis集中管理用户的session,只需要保证redis是高可用和扩展性的,每次用户更新或查询登录信息都直接从redis中集中获取
限速
用户登录需要输入手机验证码,为了短信接口不被频繁访问,限制用户每分钟获取验证码的频率。此外,一些网站限制一个IP地址不能在一秒钟内访问超过n次也是类似。
https://redis.io/topics/distlock
批量操作命令数量的上限
CAS机制
键名的设置:“业务名:对象名:id:[属性]”,如果当前redis只被一个业务使用,可以去掉业务名。如果键比较长,可以适当减少键的长度,从而减少由于键过长的内存浪费