字符串
常用命令
#设置值
#ex seconds:为键设置秒级过期时间。
#px milliseconds:为键设置毫秒级过期时间。
#nx:键必须不存在,才可以设置成功,用于添加。
#xx:与nx相反,键必须存在,才可以设置成功,用于更新
set key value [ex seconds] [px milliseconds] [nx|xx]
#若键hello已存在,setnx失败,返回结果为0
setnx hello redis
#若键jedis已存在,set xx成功,用于更新
set hello jedis xx
注意:setnx可以作为分布式锁的一种实现方案
#获取值
#若获取的键不存在,则返回nil(空)
get key
#批量设置值
mset key value [key value ...]
#批量获取值,有些键不存在,那么它的值为nil(空),结果是按照传入键的顺序返回
mget key [key ...]
注意:get和mget的区别如下:
#计数;incr命令用于对值做自增操作
#值不是整数,返回错误
#值是整数,返回自增后的结果
#键不存在,按照值为0自增,返回结果为1
incr key
#自减
decr key
#自增指定数字
incrby key increment
#自减指定数字
decrby key decrement
#自增浮点数
incrbyfloat key incremen
内部编码
int:8个字节的长整型
embstr:小于等于39个字节的字符串
raw:大于39个字节的字符串
使用场景
缓存功能
计数(优化:防作弊、按照不同维度计数、数据持久化到底层数据源等)
共享session(保证redis是高可用和扩展性的,每次用户更新或者查询信息都直接从redis中集中获取)
限速
伪代码如下:
phoneNum = "138xxxxxxxx"; key = "shortMsg:limit:" + phoneNum; // SET key value EX 60 NX //设置键的过期时间为60s,在键不存在的情况下设置; isExists = redis.set(key,1,"EX 60","NX"); if(isExists != null || redis.incr(key) <=5){ // 通过 }else{ // 限速 }