一、全局命令
1.查看所有键
keys *
2.键总数
dbsize
3.检查键是否存在
exists key :存在返回1,不存在返回0
4.删除键
del key [key ...]:返回结果为成功删除键的个数,删除一个不存在的键返回0
5.键过期
expire key seconds / ttl key
ttl命令会返回键的剩余过期时间:
a.>=0的整数:键剩余的过期时间,
b.-1:键没有设置过期时间
c.-2:键不存在
6.键的数据结构类型
type key
二、单线程架构
Redis使用了单线程架构和I/O多路复用模型来实现高性能的内存数据库服务。
一条命令从客户端到达服务端之后不会被立即执行,所有命令都会进入一个队列中,然后逐个被执行。
Redis作为单线程还能那么快的原因:
1.纯内存访问,Redis将所有数据放在内存中,内存的响应时长大约为100纳秒,这是Redis达到每秒万级别访问的重要基础。
2.非阻塞I/O,Redis使用epoll作为I/O多路复用技术的实现,再加上Redis自身的事件处理模型将epoll中的连接、读写、关闭都转化为事件,不在网络I/O上浪费过多时间。
3、单线程避免了线程切换和竞态产生的消耗。
三、字符串
1、常用命令
A.设置键
set key value [ex seconds] [px milliseconds] [nx|xx]
ex seconds : 为键设置秒级过期时间
px milliseconds:为键设置毫秒级过期时间
nx:键必须不存在,才可以设置成功,用于添加
xx:与nx相反,键必须存在,才可以设置成功,用户更新
setex key seconds value : 同ex选项
setnx key value:同nx选项
B.获取值
get key
C.批量设置值
mset key value [key value ...]
D.批量获取值
mget key [key ...]
E:计数
incr key
incr命令用于对值做自增操作:
值不是整数,返回错误;值是整数,返回自增后的结果;键不存在,按照值为0自增,返回结果为1。
decr key :自减
incrby key increment:自增指定数字
decrby key decrement:自减指定数字
incrbyfloat key increment:自增指定浮点数
2.不常用命令
A.追加值
append key value : 字符串尾部追加值
B.字符串长度
strlen key
C.设置并返回原值
getset key value
D.设置指定位置的字符
setrange key offeset value
E.获取部分字符串
getrange key start end
四、哈希
1、命令
hset key field value :设置值
hget key field :获取值
hdel key field [field ...] :删除field
hlen key :计算field个数
hmget key field [field...] :批量获取field-value
hmset key field value [field value...] :批量设置
hexists key field :判断field是否存在
hkeys key :获取所有field
hvals key :获取所有value
hgetall key :获取所有field-value;如果哈希元素个数比较多,hgetall会存在阻塞Redis的可能,可用hscan
hincrby | hincrbyfloat key field increment:自增,increment为增长值
hstrlen key field :计算value的字符串长度
五、列表
rpush key value [value ...] :从右到左插入元素
lpush key value [value ...] :从左到右插入元素
linsert key before|after pivot value :从某个元素(pivot)前或后插入元素
lrange key start end :获取指定范围内的元素列表
索引下标从左到右:0~N-1;从右到左:-1~-N
lindex key value :获取指定索引下标的元素
llen key :获取列表长度
lpop key :从列表左侧弹出元素
rpop key :从列表右侧弹出元素
lrem key count value :删除指定元素
count > 0 ,从左到右,删除最多count个元素
count < 0,从右到左,删除最多count绝对值个元素
count = 0,删除所有
ltrim key start end :按照索引范围修剪列表
lset key index newValue :修改指定索引下标的元素
blpop|brpop key [key ...] timeout :阻塞
key[key...]:多个列表的键;timeout:阻塞时间(单位:秒)
1)列表为空:如果timeout=3,客户端要等到3秒后返回;如果timeout=0,客户端一直阻塞下去
2)列表不为空:客户端会立即返回
六、集合
sadd key element [element...] :添加元素
srem key element [element...] :删除元素
scard key :计算元素个数
sismember key element :判断元素是否在集合中存在
srandmember key [count] :随机从集合中返回指定个数元素,返回的元素在集合中依然存在
spop key [count]:从集合中随机弹出指定个数元素,弹出的元素在集合中会被删除
smembers key :获取所有元素
sinter key [key ...] :求多个集合的交集
sunion key [key ...] :求多个集合的并集
sdiff key [key ...] :求多个集合的差集
sinterstore destination key [key ...] :将交集的结果保存
sunionstore destination key [key ...] :将并集的结果保存
sdiffstore destination key [key ...] :将差集的结果保存
七、有序集合
zadd key [NX|XX] [CH] [INCR] score member [score member...] :添加成员
nx:member必须不存在,才可以设置成功;
xx:member必须存在,才可以设置成功;
ch:返回此次操作后,有序集合元素和分数发生变化的个数;
incr:对score做增加,相当于后面介绍的zincrby;
zcard key :计算成员个数
zscore key member :计算某个成员的分数
zrank key member:分数从低到高计算成员的排名
zrevrank key member:分数从高到低计算成员的排名
zrem key member [member ...] :删除成员
zincrby key increment member :增加成员的分数
zrange key start end [withscores] :返回指定排名范围的成员,从低到高
zrevrange key start end [withscores]:返回指定排名范围的成员,从高到低
zrangebyscore key min max [withscores] [limit offset count] :返回指定分数范围的成员,从低到高
zrevrangebyscore key max min [withscores] [limit offset count] :返回指定分数范围的成员,从高到低
zcount key min max :返回指定分数范围的成员个数
zremrangebyrank key start end :删除指定排名内的升序元素
zremrangebyscore key min max :删除指定分数范围的成员
zinterstore destination numkeys key [key...] [weights weight [weight ...]] [aggregate sum|min|max]:交集
destination:交集计算结果保存到这个键,
numkeys:需要交集计算键的个数,
key[key ...]:需要做交集计算的键,
weights weight[weight...]:每个键的权重,在做交集计算时,每个键中的每个member会将自己分数乘以这个权重,每个键的权重默认是1,
aggregate sum|min|max:计算成员交集后,分值可以按照sum、min、max做汇总,默认值是sum
zunionstore destination numkeys key [key ...] [weights weight [weight...]] [aggregate sum|min|max]:并集
八、键管理
A.单个键管理
rename key newkey :键重命名
renamenx key newkey :键重命名,只有在newkey不存在时才覆盖
randomkey :随机返回一个键
expire key seconds :键在seconds秒后过期
expireat key timestamp :键在秒级时间戳timestamp后过期
ttl key :查询键剩余过期时间,返回秒
pttl key :查询键剩余过期时间,返回毫秒
ttl(pttl) key 三种返回结果:
>=0的整数:键剩余的过期时间
-1:键没有设置过期时间
-2:键不存在
pexpire key milliseconds :键在milliseconds毫秒后过期
pexpireat key milliseconds-timestamp :键在毫秒级时间戳timestamp后过期
persist key :清除键的过期时间
move key db:迁移键到目标数据库
dump + restore :数据迁移
migrate:数据迁移命令,相当于将dump、restore、del三个命令组合起来,具有原子性
B.遍历键
keys pattern:全量遍历键
scan cursor [match pattern] [count number] :渐进式遍历键
C.数据库管理
select dbIndex:切换数据库
flushdb/flushall:清除数据库,flushdb只清除当前数据库,flushall清除所有数据库