一、Redis基本操作
- ping 返回 PONG:检查Redis是否可用【相当于服务器和客户端在打招呼】
127.0.0.1:6379> ping
PONG
127.0.0.1:6379>
- dbsize:返回的是数据库中key的数量
127.0.0.1:6379> dbsize
(integer) 0
- select db:切换Rdies库
127.0.0.1:6379> select 2
OK
- flushdb:删除当前库的数据
- flushall:删除所有库的数据
- exit 或 quit:退出客户端,进入linux环境
- redis-cli shutdown :关闭了服务器,建议停掉后,立马启动
二、Redis键(key)
- keys:列出所有key
*:代表多个字符
?:代表一个字符
127.0.0.1:6379[2]> set k1 v1
OK
127.0.0.1:6379[2]> set k2 v2
OK
127.0.0.1:6379[2]> keys *
1) "k1"
2) "k2"
*与?的区别
127.0.0.1:6379[2]> keys *1
1) "kabc1"
2) "k1"
127.0.0.1:6379[2]> keys ?1
1) "k1"
exists:判断key是否存在(存在为1,不存在为0)
127.0.0.1:6379[2]> exists k1
(integer) 1
127.0.0.1:6379[2]> exists kabc1
(integer) 1
127.0.0.1:6379[2]> exists kabc2
(integer) 0
expire:语法:expire key secords
作用:设置key的生存周期,超过时间,key会自动删除。单位是秒
返回值:设置成功返回数字1,其他情况返回是0
127.0.0.1:6379[2]> expire k1 5
(integer) 1
127.0.0.1:6379[2]> get k1
"v1"
127.0.0.1:6379[2]> get k1
(nil)
127.0.0.1:6379[2]> set 1590000 3568
OK
127.0.0.1:6379[2]> expire 1590000 15
(integer) 1
127.0.0.1:6379[2]> get 1590000
"3568"
127.0.0.1:6379[2]> get 1590000
(nil)
ttl:查看存活时间
返回值:
-1:没有设置key的生存周期,key永不过期
-2:key不存在
数字:key的剩余时间,单位为秒
127.0.0.1:6379[2]> set k1 v1
OK
127.0.0.1:6379[2]> ttl k1
(integer) -1
127.0.0.1:6379[2]> get aa
(nil)
127.0.0.1:6379[2]> ttl aa
(integer) -2
127.0.0.1:6379[2]> expire k1 60
(integer) 1
127.0.0.1:6379[2]> ttl k1
(integer) 54
127.0.0.1:6379[2]> ttl k1
(integer) 46
127.0.0.1:6379[2]> ttl k1
(integer) 32
del:删除key
127.0.0.1:6379[2]> set game lol
OK
127.0.0.1:6379[2]> get game
"lol"
127.0.0.1:6379[2]> del game
(integer) 1
127.0.0.1:6379[2]> get game
(nil)
type:判断key的类型(如果key不存在,则返回none)
127.0.0.1:6379[2]> set k2 v2
OK
127.0.0.1:6379[2]> type k2
string
127.0.0.1:6379[2]> type aaa
none
三、Redis字符串(String)
(key–value(string))
set:设置key和value
get:通过key获得value
- mset:设置多组key和value mset key value [key value key value …]
- mget 通过多组key获得value
127.0.0.1:6379[2]> mset a a1 b b1 c c1 d d1
OK
127.0.0.1:6379[2]> get k1
(nil)
127.0.0.1:6379[2]> mget a b c d e f
1) "a1"
2) "b1"
3) "c1"
4) "d1"
5) (nil)
6) (nil)
- incr:加一
- decr:减一
- 注意:操作key的对应的value必须能转化为数字。
127.0.0.1:6379[2]> set count 123
OK
127.0.0.1:6379[2]> get count
"123"
127.0.0.1:6379[2]> incr count
(integer) 124
127.0.0.1:6379[2]> incr count
(integer) 125
127.0.0.1:6379[2]> get count
"125"
127.0.0.1:6379[2]> decr count
(integer) 124
127.0.0.1:6379[2]> decr count
(integer) 123
127.0.0.1:6379[2]> get count
"123"
- append:追加对应key的value值
127.0.0.1:6379[2]> set name zhl
OK
127.0.0.1:6379[2]> append name 123
(integer) 6
127.0.0.1:6379[2]> get name
"zhl123"
- strlen:返回key值的长度
127.0.0.1:6379[2]> strlen name
(integer) 6
- setex:将值 value 关联到 key ,并将 key 的生存时间设为 seconds (以秒为单位)。如果 key 已经存在, SETEX 命令将覆写旧值。
127.0.0.1:6379[2]> setex zhl 8000 600
OK
127.0.0.1:6379[2]> ttl zhl
(integer) 7996
- setnx:将 key 的值设为 value ,当且仅当 key 不存在。若给定的 key 已经存在,则 SETNX 不做任何动作。
127.0.0.1:6379[2]> setnx aaa aaaa
(integer) 1
127.0.0.1:6379[2]> setnx aaa bbbb
(integer) 0
- getset:将给定 key 的值设为 value ,并返回 key 的旧值(old value)。
127.0.0.1:6379[2]> getset aaa ccc
"aaaa"
127.0.0.1:6379[2]> get aaa
"ccc"
四、Redis哈希(Hash)
hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。
key value
user string 类型的 field 和 value 的映射表
user345 name 张三
age 20
address 四川
- hset:将哈希表 key 中的域 field 的值设为 value ,如果 key 不存在,则新建 hash 表,执行赋值,如果有
field ,则覆盖值。 - hget:获取哈希表 key 中给定域 field 的值
127.0.0.1:6379> hset user345 name zhangsan
(integer) 1
127.0.0.1:6379> hset user345 age 20
(integer) 1
127.0.0.1:6379> hset user345 address sichuan
(integer) 1
127.0.0.1:6379> hget user345 name
"zhangsan"
127.0.0.1:6379> hget user345 age
"20"
127.0.0.1:6379> hget user345 address
"sichuan"
- hmset:同时将多个 field-value (域-值)设置到哈希表 key 中,此命令会覆盖已经存在的 field,hash 表key 不存在,创建空的 hash 表,执行 hmset.
- hmget:获取哈希表 key 中一个或多个给定域的值
127.0.0.1:6379> hmset user345 name lisi address beijing
OK
127.0.0.1:6379> hmget user345 name age address
1) "lisi"
2) "20"
3) "beijing"
- hlen:获取hash key 的长度
127.0.0.1:6379> hlen user345
(integer) 3
127.0.0.1:6379> hset user345 tel 56789
(integer) 1
127.0.0.1:6379> hlen user345
(integer) 4
- hgetall:获得hash所有的属性和值
127.0.0.1:6379> hgetall user345
1) "name"
2) "lisi"
3) "age"
4) "20"
5) "address"
6) "beijing"
7) "tel"
8) "56789"
- hkeys:获得hash所有的属性
127.0.0.1:6379> hkeys user345
1) "name"
2) "age"
3) "address"
4) "tel"
- hvals:获得hash所有的value
127.0.0.1:6379> hvals user345
1) "lisi"
2) "20"
3) "beijing"
4) "56789"
- hdel:删除hash某个属性
127.0.0.1:6379> hdel user345 address name
(integer) 2
127.0.0.1:6379> hgetall user345
1) "age"
2) "20"
3) "tel"
4) "56789"
- hexists:判断hash是否包含某个属性`
127.0.0.1:6379> hexists user345 name
(integer) 0
127.0.0.1:6379> hexists user345 age
(integer) 1
五、Redis列表(List)
list是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)
key value
shop 电视 冰箱 洗衣机
通过这个列表:可以表示的数据结构有栈和队列。
队列:一边进,一边出。
现实中:买票、银行排号。
- lpush:从左边放入元素到list
- rpush;从右边放入元素到list
- llen:显示list的长度
127.0.0.1:6379> lpush vip vip1vip2 vip3
(integer) 2
127.0.0.1:6379> lpush vip vip1vip2 vip3 vip4
(integer) 5
127.0.0.1:6379> lpush vip vip1 vip2 vip3
(integer) 8
127.0.0.1:6379> llen vip
(integer) 8
127.0.0.1:6379> rpush p1 p2 p3
(integer) 2
127.0.0.1:6379> llen vip
(integer) 8
127.0.0.1:6379> rpush vip p1 p2 p3
(integer) 11
127.0.0.1:6379> llen vip
(integer) 11
//vip3 vip2 vip1 vip4 vip3 vip1vip2 vip3 vip1vip2 p1 p2 p3
- lpop: 从左边取出元素到list
- rpop:从右边取出元素到list
127.0.0.1:6379> lpop vip
"vip3"
127.0.0.1:6379> lpop vip
"vip2"
127.0.0.1:6379> rpop vip
"p3"
127.0.0.1:6379> rpop vip
"p2"
127.0.0.1:6379> llen vip
(integer) 7
//a5 a4 a3 a2 a1
- lrange:列出list中指定元素
127.0.0.1:6379> lpush vip a1 a2 a3 a4 a5
(integer) 5
127.0.0.1:6379> lrange vip 0 3
1) "a5"
2) "a4"
3) "a3"
4) "a2"
127.0.0.1:6379> lrange vip 3 4
1) "a2"
2) "a1"
127.0.0.1:6379> lrange vip 0 4
1) "a5"
2) "a4"
3) "a3"
4) "a2"
5) "a1"
- lindex:获得指定位置元素的值
127.0.0.1:6379> lindex vip 0
"a5"
127.0.0.1:6379> lindex vip 3
"a2"
127.0.0.1:6379> lindex vip 300
(nil)
- lset:设置指定位置元素的值
127.0.0.1:6379> lset vip 1 vip1
OK
127.0.0.1:6379> lrange vip 0 -1
1) "a5"
2) "vip1"
3) "a3"
4) "a2"
5) "a1"
- linsert:
语法:linsert key BEFORE|ALFTER pivot value
作用:将值 value 插入到列表 key 当中位于值 pivot 之前或之后的位置。key 不存在,pivot不在列表中,不执行任何操作。
返回值:命令执行成功,返回新列表的长度。没有找到 pivot 返回 -1, key 不存在返回 0。
127.0.0.1:6379> lrange vip 0 -1
1) "a5"
2) "vip1"
3) "a3"
4) "a2"
5) "a1"
127.0.0.1:6379> linsert vip before vip2 vip_plus
(integer) -1
127.0.0.1:6379> lrange vip 0 -1
1) "a5"
2) "vip1"
3) "a3"
4) "a2"
5) "a1"
127.0.0.1:6379> linsert vip after a3 vip_plus
(integer) 6
127.0.0.1:6379> lrange vip 0 -1
1) "a5"
2) "vip1"
3) "a3"
4) "vip_plus"
5) "a2"
6) "a1"
- lrem:
count 的值可以是以下几种:
count > 0 : 从表头开始向表尾搜索,移除与 value 相等的元素,数量为 count 。
count < 0 : 从表尾开始向表头搜索,移除与 value 相等的元素,数量为 count 的绝对值。
count = 0 : 移除表中所有与 value 相等的值。
127.0.0.1:6379> lpush vip 1 2 3 4 5 6 7 8 9
(integer) 9
127.0.0.1:6379> lrange vip 0 -1
1) "9"
2) "8"
3) "7"
4) "6"
5) "5"
6) "4"
7) "3"
8) "2"
9) "1"
127.0.0.1:6379> lrem vip 3 2
(integer) 1
127.0.0.1:6379> lrange vip 0 -1
1) "9"
2) "8"
3) "7"
4) "6"
5) "5"
6) "4"
7) "3"
8) "1"
127.0.0.1:6379> lrem vip -1 4
(integer) 1
127.0.0.1:6379> lrange vip 0 -1
1) "9"
2) "8"
3) "7"
4) "6"
5) "5"
6) "3"
7) "1"
127.0.0.1:6379> lrem vip 0 7
(integer) 1
127.0.0.1:6379> lrange vip 0 -1
1) "9"
2) "8"
3) "6"
4) "5"
5) "3"
6) "1"
六、Redis集合(Set)
Set 是 string 类型的无序集合,集合成员是唯一的,即集合中不能出现重复的数据.
key value
food 炒饭
炒面
炒蛋
特点:
1.无序
2.元素不可重复
指令
- sadd:将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略,不会再加入。
127.0.0.1:6379> sadd set01 abc 123 haha abc abc 123
(integer) 3
- scard:获取集合里面的元素个数
127.0.0.1:6379> scard set01
(integer) 3
- smembers:列出set中所有的元素
127.0.0.1:6379> smembers set01
1) "haha"
2) "123"
3) "abc"
- sismember:判断是否包含某个元素
127.0.0.1:6379> sismember set01 abc
(integer) 1
127.0.0.1:6379> sismember set01 aaa
(integer) 0
- srem:删除元素
127.0.0.1:6379> srem set01 abc 123
(integer) 2
127.0.0.1:6379> smembers set01
1) "haha"
-
srandmember:
语法:srandmember key [count]
作用:只提供 key,随机返回集合中一个元素,元素不删除,依然在集合中;
提供了 count时,count 正数, 返回包含 count 个数元素的集合, 集合元素各不相同。
count 是负数,返回一个 count 绝对值的长度的集合, 集合中元素可能会重复多次。
返回值:多个元素的集合比如微信的:骰子、石头剪刀布
127.0.0.1:6379> sadd set01 a b c d e f
(integer) 6
127.0.0.1:6379> srandmember set01 3
1) "f"
2) "b"
3) "a"
127.0.0.1:6379> srandmember set01 3
1) "d"
2) "e"
3) "a"
127.0.0.1:6379> srandmember set01 3
1) "c"
2) "e"
3) "a"
127.0.0.1:6379> srandmember set01 -3
1) "haha"
2) "f"
3) "d"
七、Redis有序集合(Zset)
有序集合zset 和集合set一样也是 string 类型元素的集合,且不允许重复的成员。
不同的是 zset 的每个元素都会关联一个分数(分数可以重复),redis 通过分数来为集合中的成员进行从小到大的排序。
可以理解为set的升级版
key value
food 炒饭 1000
炒面 1500
炒蛋 1555
特点:
1.不能重复
2.无序,但是因为有分数的概念,可以根据分数进行排序。
常用:各大排行榜
- zadd:添加
127.0.0.1:6379[2]> zadd zset01 100 za 120 lisi 89 wangwu
(integer) 3
- zcard:查看集合中元素个数
127.0.0.1:6379[2]> zcard zset01
(integer) 3
- zscore:查看成员的分数
127.0.0.1:6379[2]> zscore zset01 lisi
"120"
127.0.0.1:6379[2]> zscore zset01 zhangsan
(nil)
127.0.0.1:6379[2]> zscore zset01 za
"100"
- zrange:排序方式为分数由小到大
127.0.0.1:6379[2]> zrange zset01 0 -1
1) "wangwu"
2) "za"
3) "lisi"
127.0.0.1:6379[2]> zrange zset01 0 -1 withscores
1) "wangwu"
2) "89"
3) "za"
4) "100"
5) "lisi"
6) "120"
- zrevrange:排序方式为分数由大到小
127.0.0.1:6379[2]> zrevrange zset01 0 -1
1) "lisi"
2) "za"
3) "wangwu"
127.0.0.1:6379[2]> zrevrange zset01 0 -1 withscores
1) "lisi"
2) "120"
3) "za"
4) "100"
5) "wangwu"
6) "89"
- zrank:返回有序集 key 中成员 member 的排名。其中有序集成员按 score 值递增(从小到大)顺序排列。
排名以 0 为底,也就是说, score 值最小的成员排名为 0 。
127.0.0.1:6379[2]> zrank zset01 za
(integer) 1
127.0.0.1:6379[2]> zrank zset01 lisi
(integer) 2
127.0.0.1:6379[2]> zrank zset01 wangwu
(integer) 0
- zrevrank:返回有序集 key 中成员 member 的排名。其中有序集成员按 score 值递减(从大到小)排序。
排名以 0 为底,也就是说, score 值最大的成员排名为 0 。
127.0.0.1:6379[2]> zscore zset01 wangwu
"89"
127.0.0.1:6379[2]> zrevrank zset01 wangwu
(integer) 2
- zrem:删除元素
127.0.0.1:6379[2]> zrem zset01 za
(integer) 1
127.0.0.1:6379[2]> zscore zset01 za
(nil)