全局命令
keys L* //查询所有的key。此命令会将所有的key全都查出来,在key多时,影响性能。
生产上不建议使用。
dbsize//查询中所有key的个数。不需要遍历所有键,而是直接获取 Redis内置的键总数。
exists tkey//是否存在,存在1,不存在0
expire tkey 10//设置过期时间,单位秒
pexpire tkey 10//设置过期时间,单位毫秒
expireat key 秒级时间截timestamp//timestamp时间戳后过期
pexpireat key 毫秒级时间截timestamp//timestamp时间戳后过期
ttl key// >=0:剩余过期时间;-1:永不过期;-2:已过期
persist tkey//让key永不过期
type tkey//返回value的类型
randomkey//随机一个key返回对应value
rename oldkey newkey//key重命名
注意
- 对于字符串类型键,执行set命令会去掉过期时间,这个问题很容易在开发中被忽视
- Redis不支持二级数据结构(例如哈希、列表)内部元素的过期功能,不能对二级数据结构做过期时间设置。
- rename之前,新键已经存在,那么它的值也将被覆盖,也会将新建的过期时间重置为永不失效
- timestamp 是1970年1月1号到现在的秒数与毫秒数。
String
set key value//ex:秒、px毫秒、nx存在就放弃,key不存在才执行、xx存在才执行,key不存在就放弃命令。
返回值是影响的 行数
setex key seconds value//为键设置秒级过期时间 返回ok(如果key存在,会覆盖之前的设置)
setnx key value//必须不存在,才可以设置成功 返回1或者0
get key//返回key对应的value值 ; 不存在则返回nil(空) ;不是字符串类型会报错
mset k1 v1 k2 v2 k3 v3...//批量设置键值对
mget k1 k2 k3...//批量获取键对应的值。
incr key//值不是整数,返回错误 ; 值是整数,返回自增后的结果 ; 键不存在,按照值为0自增,返回结果为1。
Redis提供了decr(自减)、 incrby(自增指定步长)、decrby(自减指定步长)、incrbyfloat(自增浮点数)
append key string//key对应的值后面追加,字符串拼接
strlen key 字符串长度(一个中文占的长度是3)
getset key newvalue//设置新值,返回旧值(不存在则返回nil(空))
setrange key index str//将index位索引的值替换为str ; 返回新字符串长度 ; str可以是多字符的字符串
index越界不会报错,redis会主动为缺失的位补null,计算长度的时候也是会算上
getrange key startindex endindex//获取开始索引(包含此索引)、结束索引(包含此索引)字符串视图
缓存功能:Redis 作为缓存层,MySQL作为存储层,绝大部分请求的数据都是从Redis中获取。减少数据库压力
计数:使用Redis 作为计数的基础工具,它可以实现快速计数、查询缓存的功能,同时数据可以异步落地到其他数据源。
共享Session
限速:很多应用出于安全的考虑,会在每次进行登录时,让用户输入手机验证码,从而确定是否是用户本人。
但是为了短信接口不被频繁访问,会限制用户每分钟获取验证码的频率,例如一分钟不能超过5次。一些网
站限制一个IP地址不能在一秒钟之内方问超过n次也可以采用类似的思路。
批量操作命令可以有效提高效率,假如没有mget这样的命令,要执行n次get命令具体耗时如下:
n次 get时间=n次网络时间+n次命令时间
使用mget命令后,要执行n次get命令操作具体耗时如下:
n次get时间=1次网络时间+n次命令时间
巧记:
- m 含义是mutiple 多个,批量的意思
- ex 秒、px时间
- nx key不存在才生效
- xx key存在才生效
Hash
约定习惯:
- key:最外层的key
- map:key对应的value整体结构
- field:map里面的key
- value:map
命令:
hset key field value//返回值是影响的field条数; 设置某一字段具体值;也是能多条field
hget key field//返回具体field对应的值;key或field不存在会返回nil;不能多个field 不然会报错
hdel key field//返回结果为成功删除field的个数; 会删除一个或多个field
hlen key//计算field个数
hstrlen key field//返回field对应value的长度;只能一个field,不支持多个field
hmset key f1 v1 f2 v2...//返回ok;批量设置field-value 键值对
hmget key f1 f2...//批量返回field对应的value
hexists key field//判断field是否存在;1-存在、0-不存在
hkeys key//返回所有的 field
hvals key//返回所有的 value
hincrby key field//返回自增后的值;值是整数,返回自增后的结果 ; 键不存在,按照值为0自增,返回结果为1。
hincrbyfloat同理
巧记
- h可以理解为hash,我更愿意理解为对field操作。
List
前置知识
- list本质是一个双向链表。命令前 l与r决定连表方向,决定左边|右边 谁是链表头
- list存储是有序的
- list是可以存储重复值的
lrange key startindex endindex//返回指定索引闭区间的元素 视图 ;
startindex从0开始;endindex-1代表最后、-2代表倒数第二个
endindex索引越界会查询到最后一个为止
lpush key value//向链表左侧添加元素 rpush是向右侧添加元素
LINSERT key BEFORE|AFTER old new//在某个元素前或后插入新元素;
正常返回新list的长度
若old不存在,返回-1
若key不存在返回0
lpop key //从列表左侧弹出,会删除弹出的元素
lrem key count value//从左或者右删除 最多 count 个 value对象;返回成功删除元素的个数
count>0:从头往尾数
count<0:从尾往头数
count=0:删除全部
ltirm key startindex endindex//返回OK;截取保留指定索引区间的值(闭区间);
startindex从0开始,endindex-1(-号代表从表尾数)代表最后元素
endindex 越界是到表尾
lset key index value//修改指定索引下标的元素;返回ok
lindex key index// 获取列表指定索引下标的元素值;index从0开始,越界返回null
llen key//获取列表长度
blpop key [time s]//可以理解为lpop的阻塞版,没有数据,就阻塞(不对客户端返回)指定秒数;0表示一直等待
数据结构
-
lpush+lpop =Stack(栈)
-
lpush +rpop =Queue(队列)
-
lpush+ ltrim =Capped Collection(有限集合)
-
lpush+brpop=Message Queue(消息队列)
Set
sadd key val1 val2...//返回结果为添加成功的元素个数;允许添加多个(字符串元素)
srem key v1 v2...//返回结果为成功删除元素个数;允许添加多个
scard key//返回集合大小
sismember key val//判断val是否在集合中;1-存在、0-不存在
srandmember key num//随机返回指定num个元素视图;不写就是1
spop key num//返回弹出的元素;随机弹出指定num个元素;不写就是1
smembers key//返回集合中所有成员变量;
sinter set1 set2//返回set1 、set2交集视图
sinterstore mudikey s1 s2//返回mudikey集合长度;将s1、s2合集存到mudikey集合里
suinon set1 set2//返回set1 、set2并集视图
suinonstore mudikey s1 s2//返回mudikey集合长度;将s1、s2并集存到mudikey集合里
sdiff set1 set2//返回set1中set2中没有的元素(差集)
sdiffstore mudikey set1 set2//返回mudikey集合长度;将s1、s2c差集存到mudikey集合里
Zset
zadd key [nx|xx] [ch] [incr] score1 v1 score2 v2...//结果代表成功添加成员的个数
nx: member必须不存在,才可以设置成功,用于添加.
xx: member必须存在,才可以设置成功,用于更新
ch: 返回此次操作后,有序集合元素和分数发生变化的个数
incr: 对score做增加,相当于后面介绍的zincrby
ZCARD key//Sorted Set 中有多少个元素
ZCOUNT key min max//查看指定 score 范围内的元素个数;查询区间[min,max]
zrank key v//查询的是排名索引值,从0开始;根据score从小到大的排序;key 或者 v不存在都返回nil
zrevrank key v//查询的是排名索引值,从0开始;根据score从大到小的排序
ZINCRBY key score value//增加指定元素的 score 值;返回新增后的分值
--------------------------下面-----------------弹出命令--------------------------------------
ZPOPMAX key [count]//按照 score 值从高到低弹出count个数元素;默认1个;返回value 与 score
ZPOPMIN key [count]//按照 score 值从低到高弹出count个数元素;默认1个; 返回value 与 score
BZPOPMAX key... timeout//ZPOPMAX阻塞版本;timeout秒,默认永不超时;返回 key value score
//在第一个 Sorted Set 集合为空时,才会弹出第二个 Sorted Set 集合中的元素。
BZPOPMIN key... timeout//同上
ZRANGE key start stop [BYSCORE | BYLEX] [REV] [LIMIT offset count] [WITHSCORES]
//REV 分值从高到低--> start stop 要与 REV保持一致
//LIMIT offset count 从offset开始最多查count条数据
//start stop 可以用[val 或者(val 表示
//返回val的同时返回分数