Redis全局命令
keys
命令:keys * 含义:查看所有键: 生产不要用,会遍历所有键。
keys命令会遍历所有键,所以它的时间复杂度是o(n),当Redis保存了大量键时线上环境禁止使用keys命令。
同时也支持通配符
dbsize
命令:dbsize 含义:dbsize命令会返回当前数据库中键的总数。
dbsize命令在计算键总数时不会遍历所有键,而是直接获取 Redis内置的键总数变量,所以dbsize命令的时间复杂度是O(1)。
del
命令:del key
含义:删除键,无论值是什么数据结构类型,del命令都可以将其删除。返回删除键个数,删除不存在键返回0。同时del命令可以支持删除多个键。
expire
命令:expire key seconds
含义:Redis支持对键添加过期时间,当超过过期时间后,会自动删除键,时间单位秒。
注:
1、如果在expire的前后各调用set,expire的时间会被清除。
2、过期时间是设置到key上的。不支持二级数据结构的过期。
pexpire
命令:pexpire key
含义:清除过期时间。
ttl
命令:ttl key
含义:ttl命令会返回键的剩余过期时间
ttl命令会返回键的剩余过期时间
- -0:大与0的整数,键剩余的过期时间。
- -1:键没设置过期时间。
- -2:键不存在
pttl
命令:pttl key
含义:精度更高可以达到毫秒级别
expireat
命令:expireat key timestamp 含义:键在秒级时间截timestamp后过期。
- 0->:键剩余的过期时间(ttl是秒,pttl是毫秒)。
- 1:键没有设置过期时间。
- 2:键不存在。
pexpireat
命令:pexpireat key 含义:清除key的过期时间。
type
命令:type key
含义:返回键的数据结构类型,例如键hello是字符串类型,返回结果为string。键mylist是列表类型,返回结果为list,键不存在返回none
rename
命令:rename oldkey newkey
含义:键重命名.
注:但是要注意,如果在rename之前,新键已经存在,那么它的值也将被覆盖。
为了防止被强行rename,Redis提供了renamenx命令,确保只有newKey不存在时候才被覆盖。
从上面我们可以看出,由于重命名键期间会执行del命令删除旧的键,如果键对应的值比较大,会存在阻塞Redis的可能性。
String
set
命令:set key value [ex seconds] [px milliseconds] [nxlxx]
- ex seconds:为键设置秒级过期时间。
- px milliseconds:为键设置毫秒级过期时间。
- nx:键必须不存在,才可以设置成功,用于添加。
- xx:与nx相反,键必须存在,才可以设置成功,用于更新。
注:从执行效果上看,ex参数和expire命令基本一样。还有一个需要特别注意的地方是如果一个字符串已经设置了过期时间,然后你调用了 set 方法修改了它,它的过期时间会消失。
而nx和xx执行效果如下
setex
命令:setex key seconds value
含义:为键设置秒级过期时间
setnx
命令:setnx key value
含义:设置时键必须不存在,才可以设置成功。
返回值:
- 0:设置失败
- 1:设置成功
get
语法: get key
含义:获取key的值
返回值:如果没有值,返回nil.
mset 批量设置值
语法:mset key value key1 value1 key2 value2 含义:批量设置值 返回值:OK
mget 批量获取值
语法: mget key1 key2 key3...
含义:批量获取keys的value
返回值:没有值返回nul
Incr 数字运算
语法:incr key 含义:incr命令用于对值做自增操作 返回值:
- 值不是整数,返回错误。
- 值是整数,返回自增后的结果。
- 键不存在,按照值为0自增,返回结果为1。
除了incr命令,Redis提供了decr(自减)、 incrby(自增指定数字)、decrby(自减指定数字)、incrbyfloat(自增浮点数),具体效果请同学们自行尝试。
append
语法:append key value 含义:向字符串尾部追加值 返回值:累加后的字符长度。
、
加中文?一个中文3个字符
strlen
语法:strlen key 含义:返回字符串长度 返回值:累加后的字符长度。
getset
语法:getset key
含义:getset和set一样会设置值,但是不同的是,它同时会返回键原来的值
返回值:返回旧值
命令的时间复杂度
字符串这些命令中,除了del 、mset、 mget支持多个键的批量操作,时间复杂度和键的个数相关,为O(n),getrange和字符串长度相关,也是O(n),其余的命令基本上都是O(1)的时间复杂度,在速度上还是非常快的。
使用场景
缓存功能
Redis 作为缓存层,MySQL作为存储层,绝大部分请求的数据都是从Redis中获取。由于Redis具有支撑高并发的特性,所以缓存通常能起到加速读写和降低后端压力的作用。、
计数
使用Redis 作为计数的基础工具,它可以实现快速计数、查询缓存的功能,同时数据可以异步落地到其他数据源。
共享Session
一个分布式Web服务将用户的Session信息(例如用户登录信息)保存在各自服务器中,这样会造成一个问题,出于负载均衡的考虑,分布式服务会将用户的访问均衡到不同服务器上,用户刷新一次访问可能会发现需要重新登录,这个问题是用户无法容忍的。
为了解决这个问题,可以使用Redis将用户的Session进行集中管理,,在这种模式下只要保证Redis是高可用和扩展性的,每次用户更新或者查询登录信息都直接从Redis中集中获取。
限速
比如,很多应用出于安全的考虑,会在每次进行登录时,让用户输入手机验证码,从而确定是否是用户本人。但是为了短信接口不被频繁访问,会限制用户每分钟获取验证码的频率,例如一分钟不能超过5次。一些网站限制一个IP地址不能在一秒钟之内方问超过n次也可以采用类似的思路。
哈希(Hash)
hset设值
命令:hset key field name
含义:设置键为key的 hash值(field-name对)
返回值:1
hget取值
命令:hget key field 含义:获取键为key的hash,从hash中获取field的value。 返回值: 没有值返回nil
hdel
命令:hdel key field
含义:获取键为key的hash,从hash中删除field。
返回值:
- 删除成功:1
- 删除失败:0
hdel会删除一个或多个field,返回结果为成功删除field的个数。
hlen
命令:hlen key
含义:计算field个数
返回值:返回field的个数
hmset批量设值
命令:hset key field name field1 name1 ... 含义:批量添加hash值。 返回值:返回ok
hmget批量取值
命令:hset key field field1 field2...
含义:批量获取hash值。
返回值:返回hash值。
hexists
命令:hexists key field
含义:判断field是否存在
返回值:返回field的value
hkeys
命令:hkeys key
含义:它返回指定哈希键所有的field
返回值:key的所有filed。
hvals
命令:hvals key
含义:获取hash的所有value
返回值:所有key的value
hgetall
命令:hvals key
含义:获取hash的所有value
返回值:所有key的value
在使用hgetall时,如果哈希元素个数比较多,会存在阻塞Redis的可能。如果只需要获取部分field,可以使用hmget,如果一定要获取全部field-value,可以使用hscan命令,该命令会渐进式遍历哈希类型,hscan将在后面的章节介绍。
hincrby
命令:hincrby key field n(增加的数量)
含义:field的value 增加n
返回值:返回增加后的值
hincrbyfloat
hgetall
list
列表( list)类型是用来存储多个有序的字符串,a、b、c、d、e五个元素从左到右组成了一个有序的列表,列表中的每个字符串称为元素(element),一个列表最多可以存储2-1个元素。在Redis 中,可以对列表两端插入( push)和弹出(pop),还可以获取指定范围的元素列表、获取指定索引下标的元素等。列表是一种比较灵活的数据结构,它可以充当栈和队列的角色,在实际开发上有很多应用场景。
lrange
命令:lrange key start end
含义:获取指定范围内的元素列表
返回值:返回增加后的值
lpush 和 rpush
命令:lpush/rpush key value
含义:从左/右 插入元素
返回值:当前list中元素的个数
linsert
命令:linsert key before/after aimValue value
含义:从aimValue的前后插入元素
返回值:当前list中元素的个数
linsert
命令:linsert key before/after aimValue value
含义:从aimValue的前后插入元素
返回值:当前list中元素的个数
lpop/rpop
命令:lpop/lpop key
含义:从列表左侧弹出/从列表右侧弹出
返回值:返回pop的值
lrem
命令:lrem key m value
含义: 从左/右 删除m个value
- m=0:删除所有的value
- m>0:从左到右删除m个元素
- m<0:从右到左删除m个元素
返回值:返回删除的个数
ltirm
命令:ltirm key start end
含义: 保留列表 start-end的元素
返回值:Ok
lindex
命令:lindex key index 含义: 获取list的index上的元素 返回值:元素值
llen
命令:llen key
含义: 获取list的长度
返回值:长度
(blocking)blpop和brpop
命令:blpop/brpop key key1 key2 n(timeout) 含义: 阻塞式获取keys元素,n秒。 keys:key可有多个,从左遍历键,直到有元素返回。 n=0:一直阻塞下去 n>0:一阻塞n秒钟。 返回值:元素值
set 集合
sadd
命令:sadd key value value1 value2 ...
含义: 添加元素到set
返回值:添加的个数
srem
命令:srem key value value1 value2 ...
含义: 删除元素
返回值:删除元素的个数
scard
命令:scard key
含义:计算元素个数
返回值:集合中元素的个数
sismember
命令:sismember key value 含义:判断是否存在元素value 返回值:
- 1:存在
- 0:不存在
spop
命令:spop key (弹出的个数)
含义:从集合中随机弹出n个元素
返回值:弹出的元素。
smembers
命令:smembers key 含义:获取所有元素 返回值:所有元素,返回结果是无序的。
set之间的操作
两个集合 set1 set2
sinter
命令:sinter key1 key2
含义:求key1 和key2交集
返回值:交集元素
sunion
命令:sunion key1 key2
含义:求key1 和key2 并集
返回值:并集元素
sdiff
命令:sdiff key1 key2
含义:求key1 和key2 差集,只属于key1,不属于key2
返回值:key1的差集
zset
zadd
命令:zadd key [nx|xx] [gt|lt] [CH] [INCR] score value score1 value1.....
含义:有序集合添加元d素,设置元素的的分数.
- nx:元素必须不存在,才能设置成功。
- xx:元素必须存在,才能设置成功,类似更新。
- ch:返回此次操作后,有序结合元素和分数发生变化的个数。
- incr:对socre做增加。 返回值:添加的个数
zcard
命令:zcard key
含义:返回结合的个数
返回值:结合的个数
zscore
命令:zscore key value
含义:返回某个元素的分数
返回值:元素的分数
zrank| zrevrank
命令:zrank|zrevrank key value
含义:返回某个元素的的 正序|倒叙 排名
返回值:元素的排名,从零开始计算。
zrem
命令:zrem key value
含义:删除某个元素
返回值:删除的个数。
zincrby
命令:zincrby key score value
含义:增加元素分数
返回值:增加后的分数
zrange
命令:zrange key begin end [rev] [limit offset count] [withscore] 含义:返回排序的元素。
- begin:分数开始元素
- end:结束元素
- limit offset count:
- rev:倒叙
- withscore:并携带分数 返回值:元素值和元素的分数
zrangebyscore | zrevrangebyscore
命令:zrangebyscore|zrevrangebyscore key begin end [withscore] [limit offset count]
含义:返回指定分数范围的元素。
- begin:分数开始元素 可以使用 +inf -inf(无穷大和无穷小)
- end:结束元素 可以使用 +inf -inf (无穷大和无穷小)
- limit offset count:
- withscore:并携带分数 返回值:元素值和元素的分数
zcount
命令:zcount key min max 含义:返回在min和max之间的分数
- min: 最小分数
- max: 最大分数 返回值:返回成员个数
zremrangebyrank
命令:zremrangebyrank key start end 含义:删除指定排名内的元素。
- start: 开始排名
- end: 结束排名 返回值:删除的个数
zremrangebyscore
命令:zremrangebyscore key start end 含义:删除指定分数范围的元素。
- min:最小分数
- max: 最大分数 返回值:删除的个数
bitmap
setbit
命令:setbit key index 0|1 含义:设置到数组[index]位置上 返回值:
getbit
命令:getbit key index
含义:获取数组[index]上的值
返回值:
bitcount
命令:bitcount key begin end
含义:获取数组指定范围为1的个数
- 返回值:返回为1的个数