@hainingwyx
2019-02-15T08:37:11.000000Z
字数 1155
阅读 1105
redis
常用命令
# 设置值,返回OK代表设置成功set key value [ex seconds] [px milliseconds] [nx|xx]# ex seconds:设置秒级过期时间# px milliseconds:设置毫秒级过期时间# nx:键必须不存在才能设置成功,用于添加# xx:键必须存在才能设置成功,用于更新# 设置值setex key seconds valuesetnx key value# 获取值get key# 批量操作可以减少网络时间,提高业务处理效率,但每次批量操作命令数有限制,过多会造成redis阻塞或者网络阻塞# 批量设置值mset key value [key value ...]# 批量获取值,不存在则返回nilmget 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只被一个业务使用,可以去掉业务名。如果键比较长,可以适当减少键的长度,从而减少由于键过长的内存浪费
