共计 10341 个字符,预计需要花费 26 分钟才能阅读完成。
前言
Redis 是一款基于键值对的数据结构存储系统,它的特点是 基于内存操作、单线程解决命令、IO 多路复用模型解决网络申请、键值对存储与简略丰盛的数据结构 等等
本篇文章作为深入浅出 Redis(一):对象与数据结构的根底篇,将深入浅出的介绍 Redis 中常用命令,如果想理解底层实现能够去观看那篇文章
Redis 中的命令分为两种,一种则是所有对象通用的,另一种是专门为对象应用的
本篇文章将先简略阐明通用命令,再阐明五大对象(string、hash、list、set、zset)专用命令
通用命令
keys *
查看所有 keysort key
对 key 进行排序,key 只能是 list、set、zset 对象-
exists key
查看这个 key 是否存在,存在为 1,不存在为 0127.0.0.1:6379> keys * 1) "age" 2) "name" 127.0.0.1:6379> exists name (integer) 1 127.0.0.1:6379> exists names (integer) 0
-
move key db
把这个 key 挪动到编号为几的数据库,胜利为 1,失败为 0127.0.0.1:6379> move name 3 (integer) 1 127.0.0.1:6379> keys * 1) "age" 127.0.0.1:6379> select 3 OK 127.0.0.1:6379[3]> keys * 1) "name"
把 name 挪动到了编号为 3 的数据库(第四个数据库)
expire key seconds
让这个 key 多少秒生效, 返回 1 为胜利,0 为失败-
ttl key
查看这个 key 的无效工夫,返回 - 1 为永恒,- 2 为已过期,其余数字代表无效秒数127.0.0.1:6379[3]> expire name 10 (integer) 1 127.0.0.1:6379[3]> ttl name (integer) 7 127.0.0.1:6379[3]> ttl name (integer) 6 127.0.0.1:6379[3]> ttl name (integer) 5 127.0.0.1:6379[3]> ttl name (integer) 4 127.0.0.1:6379[3]> ttl name (integer) 2 127.0.0.1:6379[3]> ttl name (integer) -2 127.0.0.1:6379[3]> ttl name (integer) -2 127.0.0.1:6379[3]> ttl name (integer) -2 127.0.0.1:6379[3]> expire name 10 (integer) 0 127.0.0.1:6379[3]> keys * (empty list or set)
-
type key
返回这个 key 的类型127.0.0.1:6379[3]> get age "1" 127.0.0.1:6379[3]> type age string
String(字符串)
动静字符数组
set key value
设置一个 key 的值get key
失去这个 key 的值-
append key value
给 key 追加字符串 value。如果 key 不存在就相当于 set key127.0.0.1:6379> append name "hello" (integer) 5 127.0.0.1:6379> get name "hello" 127.0.0.1:6379> append name ",wrold!" (integer) 12 127.0.0.1:6379> get name "hello,wrold!"
-
strlen key
取得这个 key 的字符串长度127.0.0.1:6379> get name "hello,wrold!" 127.0.0.1:6379> strlen name (integer) 12
incr key
让 key 自增 1-
decr key
让 key 自减 1127.0.0.1:6379> set age 18 OK 127.0.0.1:6379> incr age (integer) 19 127.0.0.1:6379> decr age (integer) 18
incrby key increment
让 key 减少指定的增量(设置步长)-
decrby key decrement
让 key 缩小指定的减量(设置步长)127.0.0.1:6379> get age "18" 127.0.0.1:6379> incrby age 10 (integer) 28 127.0.0.1:6379> decrby age 20 (integer) 8
getrange key start end
截取字符串【start,end】(这里是下标,从 0 开始,end 如果是 - 1 就算截取到倒数第一位,相似 substring 办法)-
setrange key offset value
替换指定地位开始的字符串127.0.0.1:6379> get string "hello" 127.0.0.1:6379> getrange string 0 2 "hel" 127.0.0.1:6379> setrange string 0 abcd (integer) 5 127.0.0.1:6379> get string "abcdo"
-
setex key seconds value
设置 key 的过期秒数(set with expire)127.0.0.1:6379> setex name 10 hello OK 127.0.0.1:6379> get name "hello" 127.0.0.1:6379> ttl name (integer) -2 127.0.0.1:6379> get name (nil)
-
setnx key value
如果 key 不存在就创立,存在就创立失败127.0.0.1:6379> setnx name liang (integer) 1 127.0.0.1:6379> get name "liang" 127.0.0.1:6379> setnx name chenliang (integer) 0 127.0.0.1:6379> get name "liang"
mset key value[key value...]
同时设置多个元素-
mget key [key...]
同时获取多个元素127.0.0.1:6379[3]> mset user:1:name liang user:1:age 18 #这个 key 是精妙的设计,user:{id}:{filed} OK 127.0.0.1:6379[3]> mget user:1 1) "{name:al,age:3}" 127.0.0.1:6379[3]> mget user:1:name user:1:age 1) "liang" 2) "18"
msetnx key value[key value...]
在 setnx 的根底上加上可同时创立多个,如果有一个存在,所有都不会创立胜利(原子性)-
getset
先 get 再 set127.0.0.1:6379[3]> getset name redis #不存在返回空 (nil) 127.0.0.1:6379[3]> getset name mongodb #返回原来设置的 redis, 再设置 mongodb "redis" 127.0.0.1:6379[3]> get name "mongodb"
-
rename key newkey
重命名 key127.0.0.1:6379> set name chenliang OK 127.0.0.1:6379> rename name liang OK 127.0.0.1:6379> get name (nil) 127.0.0.1:6379> get liang "chenliang"
-
del key...
删除一个或多个 Key127.0.0.1:6379> get liang "chenliang" 127.0.0.1:6379> del liang (integer) 1 127.0.0.1:6379> get liang (nil)
Hash(哈希)
能够把 hash 当作 map 汇合 Hash:key-<field,value>
无关 hash 的命令基本上是以 h 结尾
能够把以下的 key 看成 hash
hset key field value
设置 hash 中的字段和值,返回 1 为创立并赋值,0 为曾经有了并笼罩hget key field
失去 hash 中一个字段对应的值hmset key field value[field value...]
设置同个 hash 的多个字段和值hmget key field field...
失去同个 hash 的多个字段对应的值-
hgetall key
取得这个 hash 的数据127.0.0.1:6379> hset user:1 name liang (integer) 1 127.0.0.1:6379> hmset user:1 age 18 addres China OK 127.0.0.1:6379> hget user:1 name "liang" 127.0.0.1:6379> hmget user:1 age addres 1) "18" 2) "China" 127.0.0.1:6379> hgetall user:1 1) "name" 2) "liang" 3) "age" 4) "18" 5) "addres" 6) "China" 127.0.0.1:6379> hset user:1 name chenliang (integer) 0 127.0.0.1:6379> hgetall user:1 1) "name" 2) "chenliang" 3) "age" 4) "18" 5) "addres" 6) "China"
-
hdel key field field...
删除一个或多个 hash 指定字段(对应的值就隐没了)127.0.0.1:6379> hgetall user:1 1) "name" 2) "chenliang" 3) "age" 4) "18" 5) "addres" 6) "China" 127.0.0.1:6379> hdel user:1 addres age (integer) 2 127.0.0.1:6379> hgetall user:1 1) "name" 2) "chenliang" 127.0.0.1:6379> hdel user:1 name (integer) 1 127.0.0.1:6379> hgetall user:1 (empty list or set)
-
hlen key
取得 hash 字段数127.0.0.1:6379> hmset user:2 name zhangsan age 20 address china OK 127.0.0.1:6379> hlen user:2 (integer) 3
-
hexists key field
判断该 hash 中是否存在 field 该字段,在返回 1,不在返回 0127.0.0.1:6379> hgetall user:2 1) "name" 2) "zhangsan" 3) "age" 4) "20" 5) "address" 6) "china" 127.0.0.1:6379> hexists user:2 name (integer) 1 127.0.0.1:6379> hexists user:2 names (integer) 0
hkeys key
只取得所有 hash 的字段-
hvalue key
只取得所有 hash 的值127.0.0.1:6379> hgetall user:2 1) "name" 2) "zhangsan" 3) "age" 4) "20" 5) "address" 6) "china" 127.0.0.1:6379> hkeys user:2 1) "name" 2) "age" 3) "address" 127.0.0.1:6379> hvals user:2 1) "zhangsan" 2) "20" 3) "china"
-
hincrby key field increment
给 hash 的字段自增(increment 设置步长)127.0.0.1:6379> hset hash count 0 (integer) 1 127.0.0.1:6379> hincrby hash count 10 (integer) 10 127.0.0.1:6379> hincrby hash count -20 (integer) -10
-
hsetnx key field value
也是给 hash 设置字段和值,与 hset 不同的是如果曾经存在就失败返回 0,如果还没有就胜利返回 1,与 setnx 用法相似127.0.0.1:6379> hsetnx user:3 name liang (integer) 1 127.0.0.1:6379> hsetnx user:3 name cheng (integer) 0 127.0.0.1:6379> hvals user:3 1) "liang"
List(列表)
无关 List 的指令大部分都是以 L 结尾(往左边操作),以 R 结尾(往右边操作)
以下的 key 能够看成列表
lpush key value...
在队列头(左)插入一个或多个元素rpush key value...
在队列尾(右)插入一个或多个元素-
lrange key start end
用法与 range 雷同127.0.0.1:6379> lpush list hello1 hello2 hello3 (integer) 3 127.0.0.1:6379> lrange list 0 -1 1) "hello3" 2) "hello2" 3) "hello1" 127.0.0.1:6379> rpush list hello4 hello5 hello6 (integer) 6 127.0.0.1:6379> lrange list 0 -1 1) "hello3" 2) "hello2" 3) "hello1" 4) "hello4" 5) "hello5" 6) "hello6"
lpop key
从队列右边移除一个元素并返回-
rpop key
从队列左边移除一个元素并返回127.0.0.1:6379> lpop list "hello3" 127.0.0.1:6379> rpop list "hello6" 127.0.0.1:6379> lrange list 0 -1 1) "hello2" 2) "hello1" 3) "hello4" 4) "hello5"
lindex key index
通过下标获取一个元素-
llen key
返回队列的长度127.0.0.1:6379> lrange list 0 -1 1) "hello2" 2) "hello1" 3) "hello4" 4) "hello5" 127.0.0.1:6379> lindex list 0 "hello2" 127.0.0.1:6379> llen list (integer) 4
-
lrem count value
从列表中删除多少个元素(从头到尾)127.0.0.1:6379> lrange list 0 -1 1) "hello1" 2) "hello4" 3) "hello2" 4) "hello1" 5) "hello2" 6) "hello1" 7) "hello4" 8) "hello5" 127.0.0.1:6379> lrem list 2 hello1 (integer) 2 127.0.0.1:6379> lrange list 0 -1 1) "hello4" 2) "hello2" 3) "hello2" 4) "hello1" 5) "hello4" 6) "hello5"
-
ltrim key start end
将列表修剪到指定范畴(start 从 0 开始 end- 1 示意倒数第一位)127.0.0.1:6379> lrange list 0 -1 1) "hello4" 2) "hello2" 3) "hello2" 4) "hello1" 5) "hello4" 6) "hello5" 127.0.0.1:6379> ltrim list 2 -1 OK 127.0.0.1:6379> lrange list 0 -1 1) "hello2" 2) "hello1" 3) "hello4" 4) "hello5"
-
rpoplpush source destination
将 source 的最初一个元素,插到 destination 的头部127.0.0.1:6379> lrange list 0 -1 1) "hello2" 2) "hello1" 3) "hello4" 4) "hello5" 127.0.0.1:6379> lpush mylist hello1 (integer) 1 127.0.0.1:6379> rpoplpush list mylist "hello5" 127.0.0.1:6379> lrange list 0 -1 1) "hello2" 2) "hello1" 3) "hello4" 127.0.0.1:6379> lrange mylist 0 -1 1) "hello5" 2) "hello1"
-
lset key index value
将列表中指定的 index 下标的值替换为 value,如果 index 超出范围返回 error127.0.0.1:6379> lrange mylist 0 -1 1) "hello5" 2) "hello1" 127.0.0.1:6379> lset mylist 2 hello (error) ERR index out of range 127.0.0.1:6379> lset mylist 0 hello OK 127.0.0.1:6379> lrange mylist 0 -1 1) "hello" 2) "hello1"
-
linsert key before|after pivot value
在列表中的一个元素 (pivot) 之前 (before) 或之后 (after) 插入另一个元素(value)127.0.0.1:6379> lrange mylist 0 -1 1) "hello" 2) "hello1" 127.0.0.1:6379> linsert mylist before hello1 hello0 (integer) 3 127.0.0.1:6379> linsert mylist after hello1 hello2 (integer) 4 127.0.0.1:6379> lrange mylist 0 -1 1) "hello" 2) "hello0" 3) "hello1" 4) "hello2"
-
阻塞
blpop key 工夫秒
brpop key 工夫秒
Set(汇合)
无序,不可反复的散列表:Key 用来存值,Value 则是空的(相似 HashSet)
无关 set 的指令基本上都是以 s 结尾
以下的 key 能够看成 set 汇合
sadd key value...
给 set 汇合中增加一个或多个元素,返回 1 为胜利,0 为失败smembers key
查看 set 汇合中所有元素sismember key value
判断 value 是不是在 set 汇合中-
scard key
返回 set 汇合中的元素个数127.0.0.1:6379> sadd set1 a (integer) 1 127.0.0.1:6379> sadd set1 b (integer) 1 127.0.0.1:6379> sadd set1 c (integer) 1 127.0.0.1:6379> smembers set1 1) "c" 2) "b" 3) "a" 127.0.0.1:6379> sismember set1 a (integer) 1 127.0.0.1:6379> sismember set1 d (integer) 0 127.0.0.1:6379> scard set1 (integer) 3
-
srandmember key [count]
随机抽取 set 汇合中的多个元素,不写 count 默认一个,返回抽中的元素127.0.0.1:6379> srandmember set1 "b" 127.0.0.1:6379> srandmember set1 "c" 127.0.0.1:6379> srandmember set1 2 1) "b" 2) "a"
-
srem key value...
指定删除一个或多个 set 汇合中的元素,返回删除的元素127.0.0.1:6379> smembers set1 1) "c" 2) "b" 3) "a" 127.0.0.1:6379> srem set1 a b (integer) 2 127.0.0.1:6379> smembers set1 1) "c"
-
spop key [count]
随机删除 set 汇合中的元素,不写 count 默认一个, 返回删除的元素127.0.0.1:6379> smembers set1 1) "c" 2) "b" 3) "a" 4) "d" 127.0.0.1:6379> spop set1 "d" 127.0.0.1:6379> spop set1 2 1) "c" 2) "b" 127.0.0.1:6379> smembers set1 1) "a"
-
smove source destination member
将 set 汇合 (source) 中指定的一个元素 (member) 挪动到另一个 set 汇合 (destination) 中127.0.0.1:6379> smembers set1 1) "a" 127.0.0.1:6379> sadd set2 b (integer) 1 127.0.0.1:6379> smove set1 set2 a (integer) 1 127.0.0.1:6379> smembers set1 (empty list or set) 127.0.0.1:6379> smembers set2 1) "b" 2) "a"
sdiff key key..
差集(以第一个 set 汇合作为对象去比拟)sinter key key..
交加(以第一个 set 汇合作为对象去比拟)【独特好友的实现】-
sunion key key..
并集(以第一个 set 汇合作为对象去比拟)127.0.0.1:6379> sadd set1 a b c (integer) 3 127.0.0.1:6379> sadd set2 c d f (integer) 3 127.0.0.1:6379> sdiff set1 set2 1) "b" 2) "a" 127.0.0.1:6379> sinter set1 set2 1) "c" 127.0.0.1:6379> sunion set1 set2 1) "c" 2) "b" 3) "f" 4) "a" 5) "d"
Zset(有序汇合)
看作是一个有序的汇合,它比汇合多了一个 score 用来排序
把以下的 key 看成有序汇合
zadd key score member
在同一个有序汇合中增加一个或多个带 score 的值zrangebyscore key min max [withscores]
让有序汇合从 min 到 max 这个范畴排序输入,-inf ,+inf 代表负无穷,正无穷,如果加上 withscores 就会把成员的 score 也输入进去zrevrangebyscore key min max [withscores]
从 max 到 min,与 zrangebuscore 相似zrevrange key start stop
从 score 高到低输入成员 0 代表第一个元素,- 1 代表倒数第一个-
zrange key start stop
从 score 低到高输入成员 0 代表第一个元素,- 1 代表倒数第一个127.0.0.1:6379> zadd zset 1 one 2 two 3 three (integer) 3 127.0.0.1:6379> zrangebyscore zset 0 2 1) "one" 2) "two" 127.0.0.1:6379> zrangebyscore zset -inf +inf 1) "one" 2) "two" 3) "three" 127.0.0.1:6379> zrangebyscore zset -inf +inf withscores 1) "one" 2) "1" 3) "two" 4) "2" 5) "three" 6) "3" 127.0.0.1:6379> zrevrangebyscore zset +inf -inf withscores 1) "three" 2) "3" 3) "two" 4) "2" 5) "one" 6) "1" 127.0.0.1:6379> zrange zset 0 -1 1) "one" 2) "two" 3) "three" 127.0.0.1:6379> zrevrange zset 0 -1 1) "three" 2) "two" 3) "one"
zrem key member member...
移除有序汇合中的成员zcard key
取得有序汇合中的个数-
zcount key min max
取得 min~max 范畴之间的成员数量127.0.0.1:6379> zrange zset 0 -1 1) "one" 2) "two" 3) "three" 127.0.0.1:6379> zrem zset one (integer) 1 127.0.0.1:6379> zrange zset 0 -1 1) "two" 2) "three" 127.0.0.1:6379> zcard zset (integer) 2 127.0.0.1:6379> zcount zset -inf +inf (integer) 2
最初(一键三连求求拉~)
本篇文章笔记以及案例被支出 gitee-StudyJava、github-StudyJava 感兴趣的同学能够 stat 下继续关注喔 \~
有什么问题能够在评论区交换,如果感觉菜菜写的不错,能够点赞、关注、珍藏反对一下 \~
关注菜菜,分享更多干货,公众号:菜菜的后端私房菜
本文由博客一文多发平台 OpenWrite 公布!