在 Linux 上安装 Redis 的详细步骤可以阅读这里。
与服务端一同安装的还有命令行客户端redis-cli
,可以通过以下方式用命令行客户端连接本机的 Redis 服务端:
[root@192 redis-6.2.6]# redis-cli
如果设置了密码,这样的默认连接会提示缺少权限:
127.0.0.1:6379> ping
(error) NOAUTH Authentication required.
可以通过auth 密码
的方式输入密码以获取权限:
127.0.0.1:6379> auth 123321
OK
127.0.0.1:6379> ping
PONG
也可以在初始连接时通过参数-a
指定密码:
[root@192 redis-6.2.6]# redis-cli -a 123321
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> exit
其他常用的参数还有:
-h
:目标服务端的 ip-p
:目标服务端的端口号可以在官网查看所有的通用命令,或者在命令行客户端下通过以下命令查看:
127.0.0.1:6379> help @generic
keys
命令可以查看 Redis 中的键,后面可以跟通配符,比如keys *
可以查看所有的键:
127.0.0.1:6379> keys *
1) "age"
2) "name"
keys a*
可以查看以a
开头的键:
127.0.0.1:6379> keys a*
1) "age"
exists
可以判断键是否存在:
127.0.0.1:6379> EXISTS name
(integer) 1
返回的是存在的键的数目,可以一次性检查多个键是否存在:
127.0.0.1:6379> EXISTS name age
(integer) 2
127.0.0.1:6379> EXISTS name k1 k2
(integer) 1
del
命令可以删除指定的键:
127.0.0.1:6379> del name age
(integer) 2
127.0.0.1:6379> exists name age
(integer) 0
返回的是成功删除的键的数目。
expire
命令可以设置指定键的有效时长(单位秒):
127.0.0.1:6379> set name jack
OK
127.0.0.1:6379> expire name 100
(integer) 1
ttl
命令可以查看指定键剩余的有效时长:
127.0.0.1:6379> ttl name
(integer) 93
返回值是正数时表示的是剩余的秒数,返回值是-1
表示永久有效:
127.0.0.1:6379> set age 20
OK
127.0.0.1:6379> ttl age
(integer) -1
返回值是-2
表示已经过期(被自动删除):
127.0.0.1:6379> ttl name
(integer) -2
设置键的值(如果存在就修改):
127.0.0.1:6379> set name Brus
OK
127.0.0.1:6379> get name
"Brus"
获取键的值:
127.0.0.1:6379> get name
"Brus"
批量设置键的值:
127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3
OK
批量获取键的值:
127.0.0.1:6379> mget k1 k2 k3
1) "v1"
2) "v2"
3) "v3"
让整型值自增:
127.0.0.1:6379> set age 20
OK
127.0.0.1:6379> INCR age
(integer) 21
127.0.0.1:6379> INCR age
(integer) 22
让整型值增加指定步长:
127.0.0.1:6379> INCRBY age 5
(integer) 27
127.0.0.1:6379> INCRBY age 5
(integer) 32
让浮点型增长指定步长:
127.0.0.1:6379> set score 5.7
OK
127.0.0.1:6379> INCRBYFLOAT score 0.5
"6.2"
127.0.0.1:6379> INCRBYFLOAT score 0.5
"6.7"
127.0.0.1:6379> INCRBYFLOAT score 0.5
"7.2"
只在键不存在时设置值:
127.0.0.1:6379> setnx name LiLei
(integer) 0
127.0.0.1:6379> get name
"Brus"
127.0.0.1:6379> setnx name2 LiLei
(integer) 1
127.0.0.1:6379> get name2
"LiLei"
nx
指not exists
这实际上是一个组合命令,相当于:
127.0.0.1:6379> set name3 Wang2 nx
OK
127.0.0.1:6379> get name3
"Wang2"
setex
可以在指定键值的同时设置有效时长:
127.0.0.1:6379> setex name 10 jack
OK
127.0.0.1:6379> ttl name
(integer) 8
127.0.0.1:6379> ttl name
(integer) 6
ex
的意思是expire
这同样是一个组合命令,等效于以下命令:
127.0.0.1:6379> set name jack ex 10
OK
127.0.0.1:6379> get name
"jack"
127.0.0.1:6379> ttl name
(integer) 4
127.0.0.1:6379> ttl name
(integer) 3
通常,Redis 中的 key 以以下格式命名:
项目名:业务名:类型:id
这样做的好处是在图形化客户端下可以看到分层的数据。
比如设置以下的 key:
127.0.0.1:6379> set project:person:1 '{"id":1, "name":"Jack", "age": 21}'
OK
127.0.0.1:6379> set project:person:2 '{"id":2, "name":"Rose", "age": 18}'
OK
127.0.0.1:6379> set project:phone:1 '{"id":1, "name":"小米11", "price": 4999}'
OK
127.0.0.1:6379> set project:phone:2 '{"id":2, "name":"荣耀6", "price": 2999}'
OK
在图形化客户端下能看到:
Hash 类型的 Key 对应的 Value 本身是一个 Hash(散列表/字典)结构。
类似于:
Hash 类型相关的命令都是基于field
进行的操作。
设置指定 key 的 field:
127.0.0.1:6379> hset project:person:3 name BrusLee
(integer) 0
127.0.0.1:6379> hset project:person:3 age 20
(integer) 0
获取指定 key 的 field 的值:
127.0.0.1:6379> hget project:person:3 name
"BrusLee"
127.0.0.1:6379> hget project:person:3 age
"20"
设置指定 key 的多个 field 的值:
127.0.0.1:6379> hmset project:person:3 name LiLei age 15
OK
获取指定 key 的多个 field 的值:
127.0.0.1:6379> hmget project:person:3 name age
1) "LiLei"
2) "15"
获取指定 key 的所有 field 和对应的值:
127.0.0.1:6379> hgetall project:person:3
1) "name"
2) "LiLei"
3) "age"
4) "15"
获取指定 key 的所有 field:
127.0.0.1:6379> HKEYS project:person:3
1) "name"
2) "age"
获取指定 key 的所有值:
127.0.0.1:6379> HVALS project:person:3
1) "LiLei"
2) "15"
让指定 key 的 field 自增指定步长:
127.0.0.1:6379> HINCRBY project:person:3 age 2
(integer) 17
127.0.0.1:6379> HINCRBY project:person:3 age 2
(integer) 19
127.0.0.1:6379> HGETALL project:person:3
1) "name"
2) "LiLei"
3) "age"
4) "19"
当指定 key 的 field 不存在时,设置其值:
127.0.0.1:6379> HSETNX project:person:3 name HanMeimei
(integer) 0
127.0.0.1:6379> HGET project:person:3 name
"LiLei"
127.0.0.1:6379> HSETNX project:person:3 sex male
(integer) 1
127.0.0.1:6379> HGET project:person:3 sex
"male"
Redis 的 List 类型其结构类似于一个双向链表。
从列表的左侧插入数据:
127.0.0.1:6379> LPUSH queue a b c
(integer) 3
像上边展示的,一次可以插入多个元素。
从列表的左侧取出数据:
127.0.0.1:6379> LPOP queue
"c"
如果指定去除元素的个数,可以取出多个元素:
127.0.0.1:6379> LPOP queue 2
1) "b"
2) "a"
与 lpush 类似,从右侧插入元素。
与 lpop 类似,从右侧取出元素。
从左侧读取指定下标的元素:
127.0.0.1:6379> lpush queue a b c d e
(integer) 5
127.0.0.1:6379> LRANGE queue 1 3
1) "d"
2) "c"
3) "b"
下标从零开始。
阻塞式地从列表地左侧取出一个元素:
127.0.0.1:6379> BLPOP queue2 100
如果队列queue2
是空队列,上边地命令会导致客户端阻塞,直到超时(这里指定等待100
秒)或队列中有元素可以被获取。
可以用另一个 Redis 命令行客户端连接并插入元素以观察之前被阻塞的客户端。
与 blpop 类似,同样是阻塞式获取元素,不过是从列表的右侧。
向集合中添加元素:
127.0.0.1:6379> sadd set1 a b c
(integer) 3
127.0.0.1:6379> SMEMBERS set1
1) "c"
2) "b"
3) "a"
从集合中删除元素:
127.0.0.1:6379> SREM set1 a
(integer) 1
127.0.0.1:6379> SMEMBERS set1
1) "c"
2) "b"
返回集合中的元素个数:
127.0.0.1:6379> SCARD set1
(integer) 2
判断集合中是否有指定元素:
127.0.0.1:6379> SISMEMBER set1 a
(integer) 0
127.0.0.1:6379> SISMEMBER set1 b
(integer) 1
返回集合中包含的元素:
127.0.0.1:6379> SMEMBERS set1
1) "c"
2) "b"
求集合的交集:
127.0.0.1:6379> SMEMBERS set1
1) "c"
2) "b"
127.0.0.1:6379> SADD set2 b c d
(integer) 3
127.0.0.1:6379> SINTER set1 set2
1) "c"
2) "b"
求集合的差集:
127.0.0.1:6379> SMEMBERS set1
1) "c"
2) "a"
3) "b"
127.0.0.1:6379> SMEMBERS set2
1) "c"
2) "d"
3) "b"
127.0.0.1:6379> SDIFF set1 set2
1) "a"
127.0.0.1:6379> SDIFF set2 set1
1) "d"
求集合的并集:
127.0.0.1:6379> SUNION set1 set2
1) "c"
2) "d"
3) "b"
4) "a"
Redis 中的 SortedSet 是按照元素的 Score 进行的排序。
添加一个元素到有序集合:
127.0.0.1:6379> ZADD ss 100 a
(integer) 1
127.0.0.1:6379> ZADD ss 50 b
(integer) 1
127.0.0.1:6379> ZADD ss 80 c
(integer) 1
127.0.0.1:6379> ZRANGEBYSCORE ss 0 100
1) "b"
2) "c"
3) "a"
SortedSet 默认按照升序排列(自然排序)。
删除指定元素:
127.0.0.1:6379> ZREM ss a
(integer) 1
127.0.0.1:6379> ZRANGEBYSCORE ss 0 100
1) "b"
2) "c"
获取指定元素的 score:
127.0.0.1:6379> ZSCORE ss b
"50"
获取指定元素在有序集合中的位置(排名):
127.0.0.1:6379> ZRANK ss b
(integer) 0
127.0.0.1:6379> ZRANK ss c
(integer) 1
返回有序集合中的元素个数:
127.0.0.1:6379> ZCARD ss
(integer) 2
返回 score 在指定范围内的元素个数:
127.0.0.1:6379> ZCOUNT ss 0 100
(integer) 2
将指定元素的 score 增加指定数值:
127.0.0.1:6379> ZINCRBY ss 10 b
"60"
127.0.0.1:6379> ZSCORE ss b
"60"
获取指定排名范围内的元素:
127.0.0.1:6379> ZRANGE ss 0 1
1) "b"
2) "c"
返回 score 在指定范围内的元素:
127.0.0.1:6379> ZRANGEBYSCORE ss 0 100
1) "b"
2) "c"
SortedSet 同样支持集合相关的运算命令: