Redis基本
1 | 命令起效返回`1` 不起效返回`0` 找不到返回`nil` 语法错误`error`... |
key
对所有key生效
- 添加&修改
1
2# expire
`expire key 秒钟`为给定的key设置过期时间 - 查询
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16# keys
`keys *`显示所有的key值.支持Ant风格
`?`匹配一个字符
`*`匹配0个或多个字符
`[]`表示匹配括号间任意一个字符,用 - 表示范围
例如: a[a-c] 可以匹配`aa` `ab` `ac`不能匹配`ad`
`\?`匹配`?`
`keys k?`只查询`k1` `k2`而不查询`k11`
`keys k??`只查询`k11` `k12`而不查询`k1`
# exists
`exists key`判断某个key是否存在
# type
`type key`查看你的key是什么类型
# ttl
`ttl key`查看还有多少秒到期。-1永不过期。-2不存在或已到期。【其实已到期就是不存在,因为到期自动删除了k】 - 删除
1
2# del
`del key`删除key,返回成功删除数量。删除多个 del k1 k2【用空格分隔,而不是逗号】
String字符串
Redis最基本的类型,一共key对应一个value,是二进制安全的,可以包含jpg图片或者序列号的对象.value最多可以是512M
- 添加&修改
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22# set
`set k1 v1`设置key。不存在插入,存在覆盖。直接使用`set k1`默认插入空字符串""
# setex
`setex k4 10 v4`十秒后过期移除
# setnx
`setnx k5 v5`key不存在再插入。插入成功返回1,失败返回0
# mset
`mset k1 v1 k2 v2 k3 v3`必须是双数,否则错误。`mset k1 v1 k2`则错误
# msetnx
`msetnx k4 v4 k5 v5`全部插入返回1,全部不插入返回0。已存在任何一个key都全部不插入
# getset
`getset k1 v1`【先get再set】返回旧值,再设置新值。key不存在返回空(nil)
# append
`append k1 123`在value后面追加内容123
## incr/decr/incrby/decrby
一定要是数字才能进行加减,返回计算后的值
`incr k1`加1
`decr k1`减1
`incrby k1 2`加2
`decrby k1 3`减3 - 查询
1
2
3
4
5
6
7
8
9
10
11`get k1`获取key的值。不存在返回空(nil)
`mget k1 k2 k3`依次返回对应的value
`getset k1 v1`【先get再set】返回旧值,再设置新值。key不存在返回空(nil)
`strlen k1`返回value的字符串长度。不存在返回0
## getrange/setrange
测试`set k1 abcdefg`
`getrange k1 0 -1`获取全部数据,相当于`get k1`。【不同的是k2如果不存在,返回空字符串""】
`getrange k1 1 3`返回下标1 2 3的数据,此时返回"bcd"【下标从0开始】
`setrange k1 2 xyz`返回设置后的长度7。把下标234设置成xyz。此时`get k1`返回"abxyzfg" - 拓展
1
2
3
4
5
6# 可以当成对象进行使用
6379> mset student:1:name naniu student:2:name erdan :
OK
6379> mget student:1:name student:2:name :
"naniu"
"erdan"
List列表
左头右尾,lpush依次头插入,rpush依次尾插入,lpop删除头,rpop删除尾
就把它当做LinkedList就行了。lpush头插入,rpush尾插入,lpop删除头,rpop删除尾
lrange key 0 -1 就是for循环,从左开始循环
注意:不存在为空的集合,如果集合无元素,就会删除这个集合的key。
- 添加&修改
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18`lpush list01 1 2 3 4 5`从左往右,依次头插入。此时集合[5,4,3,2,1]
`rpush list02 1 2 3 4 5`尾插入,此时集合[1,2,3,4,5]
## linsert
返回插入之后的集合长度。插入失败返回-1,也就是a1不存在集合中。集合不存在返回0。
`linsert list01 before a1 a2`在集合的第一个值为`a1`的前面添加`a2`
`linsert list01 after a1 a2`在集合的第一个值为`a1`的后面添加`a2`
`lset list01 1 ddd`把下标1的值改为`ddd`
## ltrim
截取指定范围作为新集合【也就是删除了集合不指定的部分】
`ltrim list01 3 5`除了下标3 4 5其他的元素全部删除。
## rpoplpush
把第一个的尾值放到第二个头部
`rpoplpush a1 a2`删除并返回a1的头节点,并把头节点尾插入到a2中。
注意:如果a1不存在,则返回空(nil)。如果a2不存在,则新建并插入a1的头节点。 - 查询
1
2
3
4
5
6## lrange
`lrange list01 0 -1`查看集合的全部内容
`lrange list01 2 4`查看集合下标2 3 4的内容。下标从0开始。
`lindex list01 2`返回下标2的元素。下标越界返回空(nil)
`llen list01`返回集合长度。不存在或集合空返回0 - 删除
1
2
3
4
5
6
7
8
9
10## lpop/rpop
如果删除的是最后一个元素,则删除集合。
也就是删除这个集合的key。集合就不存在了。
`lpop list01`删除头节点,返回删除的内容。为空返回(nil)
`rpop list01`删除尾节点,返回删除的内容。为空返回(nil)
## lrem
删除N个value
`lrem list01 2 dd`返回删除的数量。删除前2个dd
`lrem list01 0 dd`返回删除的数量。删除全部dd
Set集合
String类型的无序集合.值不允许重复.
- 添加&修改
1
2
3`sadd set01 1 1 1 1 2 3 3 4`返回4。4表示成功插入元素的数量
`smove set01 set02 x`把`set01`中的值`x`移到`set02`中。成功返回1,失败返回0 - 查询
1
2
3
4
5
6
7
8
9
10`smembers set01`查看set01里面的数据,无序。
`srandmember set01 3`随机获取3个元素。如果获取数量>元素数,则获取全部。
`sismember set01 x`查询集合中是否有元素`x`,有返回1,无返回0。集合不存在返回0
`scard set01`获取集合里面的元素个数。集合不存在返回0
`sdiff set01 set02 ...`获取`set01`中有,而`set02`和`后面`中没有的元素
`sinter set01 set02 ...`获取`set01`中有,而`set02`和`后面`中也有的元素
`sunion set01 set02 ...`获取`set01`和`set02`和`后面`中全部的的元素,并去重。 - 删除
1
2
3
4`srem set01 3`删除集合中值为`3`的元素。删除成功返回1,失败返回0。集合不存在返回0
`spop set01`随机删除1个元素
`spop set01 3`随机删除3条记录【在3.2+版本可用。】【未验证】
Hash哈希
类似于java的Map.KV模式不变.但V是一个键值对.
我们这里称【主key为k1,副key为k2,k2对应的值为v2】
- 添加&修改
1
2
3
4
5
6`hset user id 11`设置k1=user,k2=id,v2=11。k2存在返回0,不存在返回1。
`hmset student id 7 name daniu age 26`插入成功返回ok.失败error.
`hsetnx user id 25`如果不存在则添加。添加成功返回1,失败返回0
`hincrby student id 2`执行一次id的值都会增长2。返回增加后的值
`hincrbyfloat id 1.1`执行一次id的值都会增长1.1。返回增加后的值 - 查询
1
2
3
4
5
6
7
8
9`hget user id`根据k1,k2查找对应的v2。k1,k2不存在都返回空(nil)
`hmget student id nameee age`返回三条数据,依次是对应的v2。第二条是空(nil)。
`hkeys student`得到k1=student中所有的k2
`hvals student`得到k1=student中所有的v2
`hgetall student`返回6条数据。依次是"id" "7" "name" "daniu" "age" "26"
`hexists student id`判断是否存在对应的k1,k2。有返回1,无返回0。
`hlen student`返回k1=student里面k2的数量 - 删除
1
2`hdel student name`删除k1为student k2为name的数据。删除成功返回1,失败返回0
`hdel student id name ...`删除多条记录。返回删除k2的成功数量。【未验证】
Zset有序集合
Zset(sorted set) 有序集合 和set一样不允许重复,不同的是每个元素都会关联一个double类型的分数,
通过这些分数从大到小降序排列,成员是唯一的,分数是可以重复的
多说一句
1
2
3在`set`基础上,加一个`score`值
之前`set`是k1 v1 v2 v3
现在`zset`是k1 score1 v1 score2 v2添加&修改
1
`zadd zset01 60 v1 70 v2 80 v3 90 v4 100 v5 110 v1`返回插入数量5
查询
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32## zrange
`zrange zset01 0 -1`返回全部。返回五条记录。依次"v1" "v2" "v3" "v4" "v5"
`zrange zset01 0 -1 withscores`返回全部包括分数。返回十条记录。依次"v1" 60.0 "v2" 70.0以此类推
`zrange zset01 1 3`查看下标为1 2 3的数据.返回三条数据.依次"v2" "v3" "v4"
`zrange zset01 1 3 withscores`查看下标为1 2 3的数据包括分数.返回六条数据.依次"v2" 70.0 "v3" 80.0 "v4" 90.0
## zrevrange
与zrange查询反方向
`zrevrange zset01 0 -1`返回全部。返回五条记录。依次"v5" "v4" "v3" "v2" "v1"
`zrevrange zset01 0 -1 withscores`返回全部包括分数。返回十条记录。依次"v5" 100.0 "v4" 90.0以此类推
`zrevrange zset01 1 3`查看下标为1 2 3的数据.返回三条数据.依次"v4" "v3" "v2"
`zrevrange zset01 1 3 withscores`查看下标为1 2 3的数据包括分数.返回三条数据.依次"v4" 90.0 "v3" 80.0 "v2" 70.0
## zrangebyscore
zrangebyscore key 开始score 结束score
`zrangebyscore zset01 60 90`返回60<=score<=90的值.返回四条数据.依次"v1" "v2" "v3" "v4"
`zrangebyscore zset01 60 90 withscores`返回60<=score<=90的值和score.返回八条数据.依次"v1" 60.0 "v2" 70.0以此类推
`zrangebyscore zset01 60 (90`返回60<=score<90的值.返回三条数据.依次"v1" "v2" "v3"
`zrangebyscore zset01 (60 (90`返回60<score<90的值.返回两条数据.依次"v2" "v3"
`zrangebyscore zset01 60 90 withscores limit 2 1`先查出60<=score<=90的数据.从查询出来的数据下标2开始查询1条数据.此时返回两条数据.依次"v3" 80.0
## zrevrangebyscore【不做演示】
`zrevrangebyscore key 结束score 开始score` 与zrangebyscore反方向,结束为最大值,开始为最小值
`zrank zset01 v2`得到对应的下标1。v1=0,v2=1,v3=2,v4=3,v5=4。若不存在zset01或v2,返回空(nil)
`zrevrank zset01 v2`逆序获得下标值,与zrank相反。同理返回3。v5=0,v4=1,v3=2,v2=3,v1=4
`zscore zset01 v1`获取key为zset01 值为v1的score。此时返回 60.0
`zcard zset01`一个v对应一个double数。返回zset01中v的数量。
`zcount zset01 60 70`返回分数在[60,70]的数量。
`zcount zset01 60 (70`返回分数在[60,70)的数量。
`zcount zset01 (60 (70`返回分数在(60,70)的数量。删除
1
`zrem zset01 v5 v3 v9`返回成功删除的记录数2