目录
3.1.1 10秒后过期,过期之后返回nil,ex表示秒,px表示毫秒
3.1.4 对数值的操作incr加1、decr减一,incrby加n,decrby减n,incrbyfloat浮点数加
3.1.8 redis内部编码object encoding
3.2.6 获取所有 field、获取所有value、获取所有field和value
1、windows下连接服务端
redis-cli.exe -h 127.0.0.1 -p 6379 -a 123456
2、关闭服务
停止 redis 服务: redis-cli shutdown
3、常见数据类型操作指令
3.1、Stirng类型常见操作
3.1.1 10秒后过期,过期之后返回nil,ex表示秒,px表示毫秒
127.0.0.1:6379> set age 23 ex 3
OK
127.0.0.1:6379> get age
"23"
127.0.0.1:6379> get age
(nil)
3.1.2 key存在创建返回1,不存在返回0
127.0.0.1:6379> setnx name test
(integer) 1
127.0.0.1:6379> setnx name test
(integer) 0
127.0.0.1:6379>
3.1.3 批量设置和批量获取mset和mget
127.0.0.1:6379> mset country china city beijing
OK
127.0.0.1:6379> mget country city adress
1) "china"
2) "beijing"
3) (nil)
127.0.0.1:6379>
3.1.4 对数值的操作incr加1、decr减一,incrby加n,decrby减n,incrbyfloat浮点数加
127.0.0.1:6379> set age 12
OK
127.0.0.1:6379> incr age
(integer) 13
127.0.0.1:6379> decr age
(integer) 12
127.0.0.1:6379> incrby age 2
(integer) 14
127.0.0.1:6379> decrby age 2
(integer) 12
127.0.0.1:6379> set score 1.1
OK
127.0.0.1:6379> incrbyfloat score 1.1
"2.2"
3.1.5 追加字符串append指令
127.0.0.1:6379> get name
"test"
127.0.0.1:6379> append name world
(integer) 9
127.0.0.1:6379> get name
"testworld"
3.1.6 获取字符串长度strlen
127.0.0.1:6379> strlen name
(integer) 9
127.0.0.1:6379> get name
"testworld"
127.0.0.1:6379>
3.1.7 截取字符串GETRANGE ,[a,b]
127.0.0.1:6379> get name
"testworld"
127.0.0.1:6379> GETRANGE name 2 3
"st"
127.0.0.1:6379>
3.1.8 redis内部编码object encoding
- <8字节返回int
- <=39字节,返回embstr
- >39字节返回raw
127.0.0.1:6379> set age 1000
OK
127.0.0.1:6379> set name beij
OK
127.0.0.1:6379> object encoding age
"int" //8字节返回int
127.0.0.1:6379> object encoding name
"embstr" //《=39字节,返回embstr
127.0.0.1:6379> set a fsdfwerwerwefffffffffffffffffffffffffffdsf
OK
127.0.0.1:6379> object encoding a
"raw"//>39字节返回raw
127.0.0.1:6379>
3.1.9 键值设计:业务名:对象名:id:[属性]
127.0.0.1:6379> set order:user:1 1
OK
127.0.0.1:6379> ser order:user:2 2
3.2 哈希hash数据的常见操作
3.2.1 添加\获取
127.0.0.1:6379> hset user:1 name henry
(integer) 1
127.0.0.1:6379> hset user:1 age 12
(integer) 1
127.0.0.1:6379> hset user:1 address hubei
(integer) 1
127.0.0.1:6379> hget user:1 name
"henry"
127.0.0.1:6379> hget user:1 age
"12"
127.0.0.1:6379> hget user:1 adress
(nil)
3.2.2 删除
127.0.0.1:6379> hdel user:1 address
(integer) 1
3.2.3 返回对象有几个值
127.0.0.1:6379> hlen user:1
(integer) 2
3.2.4 批量设置和获取
127.0.0.1:6379> hmset user:2 name 123 age 12
OK
127.0.0.1:6379> hmget user:2 name age
1) "123"
2) "12"
127.0.0.1:6379>
3.2.5 断 field 是否存在
127.0.0.1:6379> hexists user:1 name
(integer) 1
127.0.0.1:6379> hexists user:1 xxx
(integer) 0
3.2.6 获取所有 field、获取所有value、获取所有field和value
127.0.0.1:6379> hkeys user:2
1) "name"
2) "age"
127.0.0.1:6379> hvals user:2
1) "123"
2) "12"
127.0.0.1:6379> hgetall user:2
1) "name"
2) "123"
3) "age"
4) "12"
3.2.7 自增自减
127.0.0.1:6379> hgetall user:2
1) "name"
2) "123"
3) "age"
4) "12"
127.0.0.1:6379> hincrby user:2 age 2
3.2.8 内部编码
127.0.0.1:6379> object encoding user:2
"ziplist"
127.0.0.1:6379>
3.2.9 常用场景
1,存储对象set user:1:name aaa;
2,将对象序列化存入 redis
3,使用 hash 类型:
3.3 list常用操作
3.3.1 增加删除操作图解
类型 | 指令 |
新增 | lpush,rpush,linsert |
查找 | lrange,lindex,llen |
修改 | lset |
删除 | lpop,rpop,lrem,ltrim |
阻塞 | blpop,brpop |
添加
127.0.0.1:6379> rpush mylist c b a
(integer) 3d
查询所有
127.0.0.1:6379> lrange mylist 0 -1
1) "c"
2) "b"
3) "a"
查询0-1
127.0.0.1:6379> lrange mylist 0 1
1) "c"
2) "b"
左边加入
127.0.0.1:6379> lpush mylist d
(integer) 4
127.0.0.1:6379> lrange mylist 0 -1
1) "d"
2) "c"
3) "b"
4) "a"
在固定节点之前加入
127.0.0.1:6379> linsert mylist before b bb
(integer) 5
127.0.0.1:6379> lrange mylist 0 -1
1) "d"
2) "c"
3) "bb"
4) "b"
5) "a"
127.0.0.1:6379> lindex mylist -1
"a"
127.0.0.1:6379> lindex mylist -2
"b"
127.0.0.1:6379> lindex mylist -3
"bb"
列表长度
127.0.0.1:6379> llen mylist
(integer) 5
127.0.0.1:6379> lrange mylist 0 -1
1) "d"
2) "c"
3) "bb"
4) "b"
5) "a"
删除节点
127.0.0.1:6379> lpop mylist
"d"
127.0.0.1:6379> rpop mylist
"a"
127.0.0.1:6379> lrange mylist 0 -1
1) "c"
2) "bb"
3) "b"
127.0.0.1:6379>
3.3.2 删除固定数量的元素
127.0.0.1:6379> lpush test b b b b b x y z
(integer) 8
127.0.0.1:6379> lrange test 0 -1
1) "z"
2) "y"
3) "x"
4) "b"
5) "b"
6) "b"
7) "b"
8) "b"
从左边开始,删除4个b
127.0.0.1:6379> lrem test 4 b
(integer) 4
127.0.0.1:6379> lrange test 0 -1
1) "z"
2) "y"
3) "x"
4) "b"
删除所有的b
127.0.0.1:6379> lrem test 0 b
(integer) 1
127.0.0.1:6379> lrange test 0 -1
1) "z"
2) "y"
3) "x"
127.0.0.1:6379>
3.3.3 元素保留ltrim,修改某个元素的值
127.0.0.1:6379> lrange test 0 -1
1) "4"
2) "3"
3) "2"
4) "1"
5) "z"
6) "y"
7) "x"
保留第5个元素到最后一个元素,其他的删除
127.0.0.1:6379> ltrim test 4 -1
OK
127.0.0.1:6379> lrange test 0 -1
1) "z"
2) "y"
3) "x"
修改第一个元素
127.0.0.1:6379> lset test 0 zz
OK
127.0.0.1:6379> lrange test 0 -1
1) "zz"
2) "y"
3) "x"
127.0.0.1:6379>
3.4 set集合常用操作
3.4.1 set集合特点
- 无序,不重复
- 最多可以存2^23-1
- 除了支持增删查改,还支持几个的交并差集
3.4.2 常见操作
新增sadd
:6379> exists student
(integer) 0
127.0.0.1:6379> sadd student a b c c
(integer) 3
127.0.0.1:6379> sadd student abc
(integer) 1
127.0.0.1:6379> sadd student a b c
(integer) 0
127.0.0.1:6379> exists student
(integer) 1
查询打印所有元素smembers
127.0.0.1:6379> SMEMBERS student
1) "c"
2) "a"
3) "b"
4) "abc"
删除指定元素
127.0.0.1:6379> srem student abc
(integer) 0
127.0.0.1:6379> SMEMBERS student
1) "c"
2) "a"
3) "b"
统计元素个数scard
127.0.0.1:6379> scard student
(integer) 4
判断元素是否存在sismember
127.0.0.1:6379> sismember student a
(integer) 1
127.0.0.1:6379> sismember student aa
(integer) 0
127.0.0.1:6379> srandmember student 2
1) "b"
2) "a"
返回随机元素srandmember
127.0.0.1:6379> srandmember student 2
1) "b"
2) "a"
删除集合中的元素spop
127.0.0.1:6379> sadd user5 1 2 3
(integer) 3
127.0.0.1:6379> spop user5
"1"
127.0.0.1:6379> SMEMBERS user5
1) "2"
2) "3"
127.0.0.1:6379>
3.4.3 集合的交、并、补集操作
初始化两个集合
127.0.0.1:6379> SMEMBERS user1
1) "a"
2) "girl"
3) "24"
127.0.0.1:6379> SMEMBERS user2
1) "b"
2) "24"
3) "boy"
交集sinter
127.0.0.1:6379> sinter user1 user2
1) "24"
127.0.0.1:6379>
并集sunion
127.0.0.1:6379> sunion user1 user2
1) "24"
2) "girl"
3) "boy"
4) "a"
5) "b"
差集sdiff
127.0.0.1:6379> sdiff user1 user2
1) "a"
2) "girl"
127.0.0.1:6379>
3.4.5 保存交、并、补集到新的集合
保存交集到新集合sinterstore
127.0.0.1:6379> sinterstore userinter user1 user2
(integer) 1
127.0.0.1:6379> SMEMBERS userinter
1) "24"
保存并集到新集合sunionstore
127.0.0.1:6379> sunionstore userunion user1 user2
(integer) 5
127.0.0.1:6379> SMEMBERS userunion
1) "24"
2) "girl"
3) "boy"
4) "a"
5) "b"
127.0.0.1:6379>
保存补集到新集合sdiffstore
127.0.0.1:6379> sdiffstore userdiff user1 user2
(integer) 2
127.0.0.1:6379> SMEMBERS userdiff
1) "a"
2) "girl"
127.0.0.1:6379>
3.4.6 内部编码
- 当元素个数少(小于 512 个)且都为整数,redis 使用 intset 减少内存的使用
- 当超过 512 个或不为整数(比如 a b)时,编码为 hashtable
127.0.0.1:6379> sadd user4 a
(integer) 1
127.0.0.1:6379> object encoding user4
"hashtable"
127.0.0.1:6379> sadd user5 1 2 3
(integer) 3
127.0.0.1:6379> object encoding user5
"intset"
127.0.0.1:6379>
3.4.7 set适合的使用场景
- 查询共同爱好,使用交集
- 给标签、点赞添加用户
- 使用spop,srandmember随机获取数据,比如抽奖等
3.5 zset有序集合
特点:有序不重复,使用分值实现排序,适合排行榜,点赞数
数据结构是:score+member 的形式
3.5.1 常见操作增删查改
新增
127.0.0.1:6379> zadd user:zan 200 a 300 b
(integer) 2
key必须不存在才能添加成功
127.0.0.1:6379> zadd test:1 nx 100 a
(integer) 1
127.0.0.1:6379> zadd test:1 nx 200 a
(integer) 0
修改某个member 的score,xx必须存在才能修改成功
127.0.0.1:6379> zadd test:1 xx incr 200 a
"300"
127.0.0.1:6379> zadd test:1 xx ch incr -299 a
"1"
127.0.0.1:6379> zincrby test:1 10 a
查询member和score
127.0.0.1:6379> zrange user:zan 0 -1 withscores
1) "a"
2) "200"
3) "b"
4) "300"
查询所有member
127.0.0.1:6379> zrange user:zan 0 -1
1) "a"
2) "b"
查看分数score
127.0.0.1:6379> zadd user:zan 200 a 300 b
(integer) 2
127.0.0.1:6379> zscore user:zan a
"200"
计算元素个数zcard
127.0.0.1:6379> zcard test:1
(integer) 1
127.0.0.1:6379>
新增的数据是根据score排好了顺序的
127.0.0.1:6379> zrange user:zan 0 -1 withscores
1) "a"
2) "200"
3) "b"
4) "300"
5) "c"
6) "300"
7) "d"
8) "400"
127.0.0.1:6379> zadd user:zan 100 e
(integer) 1
127.0.0.1:6379> zrange user:zan 0 -1 withscores
1) "e"
2) "100"
3) "a"
4) "200"
5) "b"
6) "300"
7) "c"
8) "300"
9) "d"
10) "400"
127.0.0.1:6379>
查询元素b的排行
127.0.0.1:6379> zrange user:zan 0 -1 withscores
1) "e"
2) "100"
3) "a"
4) "200"
5) "b"
6) "300"
7) "c"
8) "300"
9) "d"
10) "400"
127.0.0.1:6379> zscore user:zan e
"100"
127.0.0.1:6379> zrank user:zan b
(integer) 2
127.0.0.1:6379>
反序查找元素的排行
127.0.0.1:6379> zrange user:zan 0 -1 withscores
1) "e"
2) "100"
3) "a"
4) "200"
5) "b"
6) "300"
7) "c"
8) "300"
9) "d"
10) "400"
127.0.0.1:6379> zrevrank user:zan d
(integer) 0
删除元素zrem
127.0.0.1:6379> zrange user:zan 0 -1 withscores
1) "e"
2) "100"
3) "a"
4) "200"
5) "b"
6) "300"
7) "c"
8) "300"
9) "d"
10) "400"
127.0.0.1:6379> zrem user:zan c
(integer) 1
127.0.0.1:6379> zrange user:zan 0 -1 withscores
1) "e"
2) "100"
3) "a"
4) "200"
5) "b"
6) "300"
7) "d"
8) "400"
127.0.0.1:6379>
返回指定范围内的score和member,正序和倒叙
127.0.0.1:6379> zrange user:zan 0 -1 withscores
1) "e"
2) "100"
3) "a"
4) "200"
5) "b"
6) "300"
7) "d"
8) "400"
127.0.0.1:6379> zrevrange user:zan 0 -1 withscores
1) "d"
2) "400"
3) "b"
4) "300"
5) "a"
6) "200"
7) "e"
8) "100"
127.0.0.1:6379>
返回指定分数范围内的成员zrangebyscore 、zrevrangebyscore
127.0.0.1:6379> zrevrange user:zan 0 -1 withscores
1) "d"
2) "400"
3) "b"
4) "300"
5) "a"
6) "200"
7) "e"
8) "100"
127.0.0.1:6379> zrangebyscore user:zan 200 300 withscores
1) "a"
2) "200"
3) "b"
4) "300"
127.0.0.1:6379> zrevrangebyscore user:zan 300 100 withscores
1) "b"
2) "300"
3) "a"
4) "200"
5) "e"
6) "100"
127.0.0.1:6379>
返回指定分数范围成员个数zcount
127.0.0.1:6379> zrange user:zan 0 -1 withscores
1) "e"
2) "100"
3) "a"
4) "200"
5) "b"
6) "300"
7) "d"
8) "400"
127.0.0.1:6379> zcount user:zan 200 400
(integer) 3
删除排名范围内元素
127.0.0.1:6379> zrange user:zan 0 -1 withscores
1) "e"
2) "100"
3) "a"
4) "200"
5) "b"
6) "300"
7) "d"
8) "400"
127.0.0.1:6379> zremrangebyrank user:zan 0 1
(integer) 2
127.0.0.1:6379> zrange user:zan 0 -1 withscores
1) "b"
2) "300"
3) "d"
4) "400"
127.0.0.1:6379>
删除指定分数范围的元素
127.0.0.1:6379> zrange user:zan 0 -1 withscores
1) "a"
2) "100"
3) "c"
4) "290"
5) "b"
6) "300"
7) "d"
8) "400"
127.0.0.1:6379> zremrangebyscore user:zan 100 300
(integer) 3
127.0.0.1:6379> zrange user:zan 0 -1 withscores
1) "d"
2) "400"
删除指定分数大于100的元素不包括100
127.0.0.1:6379> zrange user:zan 0 -1 withscores
1) "a"
2) "100"
3) "b"
4) "200"
5) "c"
6) "300"
7) "d"
8) "400"
127.0.0.1:6379> zremrangebyscore user:5 (100 +inf
(integer) 0
127.0.0.1:6379> zremrangebyscore user:zan (100 +inf
(integer) 3
127.0.0.1:6379> zrange user:zan 0 -1 withscores
1) "a"
2) "100"
127.0.0.1:6379>
3.5.2 交集、并集、补集常用操作
数据初始化
127.0.0.1:6379> zadd user:1 1 a 2 b 4 c 5 d
(integer) 4
127.0.0.1:6379> zadd user:2 2 a 3 b 1 e 8 f
(integer) 4
交集,默认member相同,score相加
127.0.0.1:6379> zinterstore user_inter 2 user:1 user:2
(integer) 2
127.0.0.1:6379> zrange user_inter 0 -1 withscores
1) "a"
2) "3"
3) "b"
4) "5"
交集min,member相同,取小的socre
127.0.0.1:6379> zinterstore user_min 2 user:1 user:2 aggregate min
(integer) 2
127.0.0.1:6379> zrange user_min 0 -1 withscores
1) "a"
2) "1"
3) "b"
4) "2"
交集max,member相同,取大的socre
127.0.0.1:6379> zinterstore user_max 2 user:1 user:2 aggregate max
(integer) 2
127.0.0.1:6379> zrange user_max 0 -1 withscores
1) "a"
2) "2"
3) "b"
4) "3"
weights把两个集合扩大固定倍数再取交集
先把user:1扩大2倍,再把user:2扩大4倍再取交集
127.0.0.1:6379> zinterstore user_weight 2 user:1 user:2 weights 2 4 aggregate max
(integer) 2
127.0.0.1:6379> zrange user_weight 0 -1 withscores
1) "a"
2) "8"
3) "b"
4) "12"
127.0.0.1:6379>
并集,具体说明参考上一个
127.0.0.1:6379> zunionstore user_uw 2 user:1 user:2 weights 2 3 aggregate max
(integer) 6
127.0.0.1:6379> zrange user_uw 0 -1 withscores
1) "e"
2) "3"
3) "a"
4) "6"
5) "c"
6) "8"
7) "b"
8) "9"
9) "d"
10) "10"
11) "f"
12) "24"
127.0.0.1:6379>
3.5.3 zset内部编码
- 当元素个数少(小于 128 个),元素值小于 64 字节时, 使用 ziplist 编码,可有效减少内存的使用
- 大于 128 个元素或元素值大于 64 字节时
3.5.4 使用场景