Redis(二):Redis五大数据结构

前面已经简单介绍过了,这次直接看一下其怎么用

string

append:往string末尾追加值,返回追加后的string长度

strlen:查看string的长度

redis 127.0.0.1:6379[2]> set k1 lq
OK
redis 127.0.0.1:6379[2]> append k1 jkl
(integer) 5
redis 127.0.0.1:6379[2]> get k1
"lqjkl"
redis 127.0.0.1:6379[2]> strlen k1
(integer) 5

这一组一定要是存的是数字才能进行加减,并且都是返回得到的结果

Incr:key的值加1

decr:key的值减1

incrby:key的值加指定数

decrby:key的值减指定数

redis 127.0.0.1:6379[2]> set k4 2
OK
redis 127.0.0.1:6379[2]> INCR k4
(integer) 3
redis 127.0.0.1:6379[2]> INCR k4
(integer) 4
redis 127.0.0.1:6379[2]> DECR k4
(integer) 3
redis 127.0.0.1:6379[2]> INCRBY k4 5
(integer) 8
redis 127.0.0.1:6379[2]> DECRBY k4 3
(integer) 5

getrange:获取指定区间范围内的值,类似between…and的关系,从零到负一表示全部

setrange:设置指定区间范围内的值,格式是setrange key值 具体值,这个会覆盖值

redis 127.0.0.1:6379[2]> get k1
"lqjkl"
redis 127.0.0.1:6379[2]> GETRANGE k1 0 3
"lqjk"
redis 127.0.0.1:6379[2]> SETRANGE k1 1 980
(integer) 5
redis 127.0.0.1:6379[2]> get k1
"l980l"

setex:指定的 key 设置值及其过期时间。如果 key 已经存在, SETEX 命令将会替换旧的值。

格式:setex 键 秒值 真实值

setnx:只有在 key 不存在时设置 key 的值。

redis 127.0.0.1:6379[2]> SETEX k5 10 v5
OK
redis 127.0.0.1:6379[2]> ttl k5
(integer) 6
redis 127.0.0.1:6379[2]> ttl k5
(integer) -1
redis 127.0.0.1:6379[2]>
redis 127.0.0.1:6379[2]> keys *
1) "k4"
2) "k3"
3) "k1"
redis 127.0.0.1:6379[2]> SETNX k4 v4
(integer) 0
redis 127.0.0.1:6379[2]> get k4
"5"

mset:同时设置一个或多个 key-value 对。

mget:获取所有(一个或多个)给定 key 的值。

msetnx:同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在。

redis 127.0.0.1:6379[2]> MSET k5 v5 k6 v6 k7 v7
OK
redis 127.0.0.1:6379[2]> MGET k5 k6 k7
1) "v5"
2) "v6"
3) "v7"
redis 127.0.0.1:6379[2]> keys *
1) "k4"
2) "k6"
3) "k1"
4) "k5"
5) "k7"
6) "k3"
redis 127.0.0.1:6379[2]> MSETNX k8 v8 k9 v9
(integer) 1
redis 127.0.0.1:6379[2]> MSETNX k8 vv k10 v10
(integer) 0

getset:将给定 key 的值设为 value ,并返回 key 的旧值(old value)。
简单一句话,先get然后立即set

redis 127.0.0.1:6379[2]> get k8
"v8"
redis 127.0.0.1:6379[2]> GETSET k8 vv
"v8"
redis 127.0.0.1:6379[2]> get k8
"vv"

###List

lpush:命令将一个或多个值插入到列表头部。 如果 key 不存在,一个空列表会被创建并执行 LPUSH 操作。 当 key 存在但不是列表类型时,返回一个错误。

rpush:命令将一个或多个值插入到列表尾部。 如果 key 不存在,一个空列表会被创建并执行 LPUSH 操作。 当 key 存在但不是列表类型时,返回一个错误。

lrange:返回列表中指定区间内的元素,区间以偏移量 START 和 END 指定。 其中 0 表示列表的第一个元素, 1 表示列表的第二个元素,以此类推。 你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。

redis 127.0.0.1:6379[2]> LPUSH list 1 2 3
(integer) 3
redis 127.0.0.1:6379[2]> LRANGE list 0 -1
1) "3"
2) "2"
3) "1"
redis 127.0.0.1:6379[2]> RPUSH list 4 5
(integer) 5
redis 127.0.0.1:6379[2]>  LRANGE list 0 -1
1) "3"
2) "2"
3) "1"
4) "4"
5) "5"

lpop:命令用于移除并返回列表的第一个元素。

rpop:命令用于移除并返回列表的最后一个元素。

lindex:通过索引获取列表中的元素(并不会移除该元素) 。格式:lindex key index

llen:获取该列表长度

redis 127.0.0.1:6379[2]> lpop list
"3"
redis 127.0.0.1:6379[2]> LRANGE list 0 -1
1) "2"
2) "1"
3) "4"
4) "5"
redis 127.0.0.1:6379[2]> rpop list
"5"
redis 127.0.0.1:6379[2]> LRANGE list 0 -1
1) "2"
2) "1"
3) "4"
redis 127.0.0.1:6379[2]> LINDEX list 1
"1"
redis 127.0.0.1:6379[2]> LRANGE list 0 -1
1) "2"
2) "1"
3) "4"
redis 127.0.0.1:6379[2]> LLEN list
(integer) 3

Lrem:根据参数 COUNT 的值,移除列表中与参数 VALUE 相等的元素。即从头往尾删除2个值等于v1的元素,返回的值为实际删除的数量,如果l列表不存在返回0

注意:LREM list3 0 值,表示删除全部给定的值。零个就是全部值

redis 127.0.0.1:6379[2]> RPUSH list 1 1 2 3 3 4 4 4 5 5
(integer) 13
redis 127.0.0.1:6379[2]> LRANGE list 0 -1
 1) "2,"
 2) "1,"
 3) "4,"
 4) "1"
 5) "1"
 6) "2"
 7) "3"
 8) "3"
 9) "4"
10) "4"
11) "4"
12) "5"
13) "5"
redis 127.0.0.1:6379[2]> LREM list 2 1
(integer) 2
redis 127.0.0.1:6379[2]> LRANGE list 0 -1
 1) "2,"
 2) "1,"
 3) "4,"
 4) "2"
 5) "3"
 6) "3"
 7) "4"
 8) "4"
 9) "4"
10) "5"
11) "5"

Ltrim:截取指定索引区间的元素在赋值给key,格式是ltrim list的key 起始索引 结束索引

redis 127.0.0.1:6379[2]> LRANGE list 0 -1
 1) "2,"
 2) "1,"
 3) "4,"
 4) "2"
 5) "3"
 6) "3"
 7) "4"
 8) "4"
 9) "4"
10) "5"
11) "5"
redis 127.0.0.1:6379[2]> LTRIM list 1 3
OK
redis 127.0.0.1:6379[2]> LRANGE list 0 -1
1) "1,"
2) "4,"
3) "2"

rpoplpush:移除列表的最后一个元素,并将该元素添加到另一个列表头部并返回

redis 127.0.0.1:6379[2]> LRANGE list 0 -1
1) "1,"
2) "4,"
3) "2"
redis 127.0.0.1:6379[2]> RPUSH list2 7 8 9
(integer) 3
redis 127.0.0.1:6379[2]> LRANGE list2 0 -1
1) "7"
2) "8"
3) "9"
redis 127.0.0.1:6379[2]> RPOPLPUSH list list2
"2"
redis 127.0.0.1:6379[2]> LRANGE list 0 -1
1) "1,"
2) "4,"
redis 127.0.0.1:6379[2]> LRANGE list2 0 -1
1) "2"
2) "7"
3) "8"
4) "9"

lset:将列表 key 下标为index的元素的值设置为 value 。

格式:LSET key index value

当 index 参数超出范围,或对一个空列表( key 不存在)进行 LSET 时,返回一个错误。

redis 127.0.0.1:6379[2]> LRANGE list 0 -1
1) "1,"
2) "4,"
redis 127.0.0.1:6379[2]> LRANGE list2 0 -1
1) "2"
2) "7"
3) "8"
4) "9"
redis 127.0.0.1:6379[2]> lset list2 0 6
OK
redis 127.0.0.1:6379[2]> LRANGE list2 0 -1
1) "6"
2) "7"
3) "8"
4) "9"

linsert:命令用于在列表的元素前或者后插入元素。当指定元素不存在于列表中时,不执行任何操作。

当列表不存在时,被视为空列表,不执行任何操作。如果 key 不是列表类型,返回一个错误。

格式: linsert key before/after v1 v2(v2是要插入的值)

redis 127.0.0.1:6379[2]> LRANGE list2 0 -1
1) "6"
2) "7"
3) "8"
4) "9"
redis 127.0.0.1:6379[2]> LINSERT list2 before 6 5
(integer) 5
redis 127.0.0.1:6379[2]> LINSERT list2 after 6 7
(integer) 6
redis 127.0.0.1:6379[2]> LRANGE list2 0 -1
1) "5"
2) "6"
3) "7"
4) "7"
5) "8"
6) "9"

总结:

它是一个字符串链表,left、right都可以插入添加;
如果键不存在,创建新的链表;
如果键已存在,新增内容;
如果值全移除,对应的键也就消失了。
链表的操作无论是头和尾效率都极高,但假如是对中间元素进行操作,效率就很惨淡了。

set

Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。

Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。

集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。

sadd:命令将一个或多个成员元素加入到集合中,已经存在于集合的成员元素将被忽略。假如集合 key 不存在,则创建一个只包含添加的元素作成员的集合。当集合 key 不是集合类型时,返回一个错误。

smembers:命令返回集合中的所有的成员。 不存在的集合 key 被视为空集合。

sismember:命令判断成员元素是否是集合的成员。是的话返回1,否返回0。

scard:获取集合里面的元素个数.

redis 127.0.0.1:6379[1]> sadd set1 1 2 3 4 5
(integer) 5
redis 127.0.0.1:6379[1]> smembers set1
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
redis 127.0.0.1:6379[1]> SISMEMBER set1 1
(integer) 1
redis 127.0.0.1:6379[1]> SISMEMBER set1 7
(integer) 0
redis 127.0.0.1:6379[1]> scard set1
(integer) 5

srem key n:删除集合中元素n

srandmember key n:从集合里随机取出n个数,如果超过最大数量就全部取出,如果写的值是负数,比如,表示需要取出个,但是可能会有重复值

redis 127.0.0.1:6379[1]> srem set1 5
(integer) 1
redis 127.0.0.1:6379[1]> SMEMBERS set1
1) "1"
2) "2"
3) "3"
4) "4"
redis 127.0.0.1:6379[1]> SRANDMEMBER set1 2
1) "3"
2) "1"
redis 127.0.0.1:6379[1]> SRANDMEMBER set1 2
1) "4"
2) "3"

spop key :随机出栈

smove key1 key2 在key1里某个值: 作用是将key1里的某个值赋给key2

redis 127.0.0.1:6379[1]> spop set1
"3"
redis 127.0.0.1:6379[1]> SMEMBERS set1
1) "1"
2) "2"
3) "4"
redis 127.0.0.1:6379[1]> sadd set2 1 2 3
(integer) 3
redis 127.0.0.1:6379[1]> smove set2 set1 3
(integer) 1
redis 127.0.0.1:6379[1]> SMEMBERS set1
1) "1"
2) "2"
3) "3"
4) "4"
redis 127.0.0.1:6379[1]> SMEMBERS set2
1) "1"
2) "2"

sdiff(差集):返回在第一个set里面而不在后面任何一个set里面的项

sinter(交集):返回两个set里共有的

sunion(并集):返回两个集合全部(去重)

redis 127.0.0.1:6379[1]> SMEMBERS set1
1) "1"
2) "2"
3) "3"
4) "4"
redis 127.0.0.1:6379[1]> SMEMBERS set2
1) "1"
2) "2"
redis 127.0.0.1:6379[1]> SDIFF set1 set2
1) "3"
2) "4"
redis 127.0.0.1:6379[1]> SINTER set1 set2
1) "1"
2) "2"
redis 127.0.0.1:6379[1]> SUNION set1 set2
1) "1"
2) "2"
3) "3"
4) "4"

hash

Redis hash 是一个string类型的field和value的映射表,其value也是一个k-v结构。hash特别适合用于存储对象。Redis 中每个 hash 可以存储 232 - 1 键值对(40多亿)。

hset:存单个值

hget:取单个值

hmset:存多个值

hmget:取多个值

hgetall:取所有键值对

hdel:删除哈希表 key 中的一个或多个指定域,不存在的域将被忽略。

hlen:获取哈希表中键值对数量

redis 127.0.0.1:6379[3]> hset user name lake
(integer) 1
redis 127.0.0.1:6379[3]> hget user name
"lake"
redis 127.0.0.1:6379[3]> hmset user age 20 add gz
OK
redis 127.0.0.1:6379[3]> hmget user name age add
1) "lake"
2) "20"
3) "gz"
redis 127.0.0.1:6379[3]> hgetall user
1) "name"
2) "lake"
3) "age"
4) "20"
5) "add"
6) "gz"
redis 127.0.0.1:6379[3]> hlen user
(integer) 3
redis 127.0.0.1:6379[3]> hdel user age add
(integer) 2
redis 127.0.0.1:6379[3]> hgetall user
1) "name"
2) "lake"

hexists key k1 :判断key中是否存在k1这个key,存在返回1,否则返回0

hkeys key:返回key中所有key

hvals key:返回key中所有values

hincrby key k1 n:为key中的k1的值加上n,n只能为整数

hincrbyfloat key k1 f :为key中的k1的值加上f,f为小数

hsetnx:为哈希表中不存在的key赋值,如果key已经存在,则操作无效

redis 127.0.0.1:6379[3]> hgetall user
1) "name"
2) "lake"
redis 127.0.0.1:6379[3]> hexists user name
(integer) 1
redis 127.0.0.1:6379[3]> hexists user age
(integer) 0
redis 127.0.0.1:6379[3]> hset user age 20
(integer) 1
redis 127.0.0.1:6379[3]> hkeys user
1) "name"
2) "age"
redis 127.0.0.1:6379[3]> hvals user
1) "lake"
2) "20"
redis 127.0.0.1:6379[3]> hincrby user age 2
(integer) 22
redis 127.0.0.1:6379[3]> HINCRBYFLOAT user age 0.5
"22.5"
redis 127.0.0.1:6379[3]> hsetnx user add gz
(integer) 1
redis 127.0.0.1:6379[3]> hgetall user
1) "name"
2) "lake"
3) "age"
4) "22.5"
5) "add"
6) "gz"
redis 127.0.0.1:6379[3]> hsetnx user age 20
(integer) 0
redis 127.0.0.1:6379[3]> hgetall user
1) "name"
2) "lake"
3) "age"
4) "22.5"
5) "add"
6) "gz"

zset

在set基础上,加一个score值。
之前set是k1 v1 v2 v3,
现在zset是k1 score1 v1 score2 v2

zadd:添加元素

zrange:根据范围取出元素,添加上withscores则会将score一起返回

zrangebyscore key 开始score 结束score limit 2 2:根据score取出元素,添加上withscores则会将score一起返回,如果在开始score前添加上(,表示这个数不包含在内,limit的作用是限制返回,意思是从返回值中下标2开始截取2个

redis 127.0.0.1:6379[5]> zadd zset1 60 v1 70 v2 80 v3 90 v4 100 v5
(integer) 5
redis 127.0.0.1:6379[5]> zrange zset 0 -1
(empty list or set)
redis 127.0.0.1:6379[5]> zrange zset1 0 -1
1) "v1"
2) "v2"
3) "v3"
4) "v4"
5) "v5"
redis 127.0.0.1:6379[5]> zrange zset1 0 -1 withscores
 1) "v1"
 2) "60"
 3) "v2"
 4) "70"
 5) "v3"
 6) "80"
 7) "v4"
 8) "90"
 9) "v5"
10) "100"
redis 127.0.0.1:6379[5]> ZRANGEBYSCORE zset1 60 (90 withscores limit 2 2
1) "v3"
2) "80"
redis 127.0.0.1:6379[5]> ZRANGEBYSCORE zset1 60 (90 withscores
1) "v1"
2) "60"
3) "v2"
4) "70"
5) "v3"
6) "80"

zrem key n:作用是删除key中的n元素

zcard key:作用是获取key中的元素个数

zcount key s1 s2:获取key中s1,s2这个score区间元素个数

zrank key v:返回key中v的排名(升序)

redis 127.0.0.1:6379[5]> zrem zset1 v5
(integer) 1
redis 127.0.0.1:6379[5]> zrange zset1 0 -1
1) "v1"
2) "v2"
3) "v3"
4) "v4"
redis 127.0.0.1:6379[5]> zcard zset1
(integer) 4
redis 127.0.0.1:6379[5]>  zcount zset1 60 90
(integer) 4
redis 127.0.0.1:6379[5]> zcount zset1 60 80
(integer) 3

zrevrank key v:在降序状态下获取v的下标值(降序排名)

zrevrange key:降序状态下根据范围取出元素

zrevrangebyscore key 结束score 开始score:降序根据score输出

redis 127.0.0.1:6379[5]> zrevrank zset1 v2
(integer) 2
redis 127.0.0.1:6379[5]> zrevrange key 0 2
(empty list or set)
redis 127.0.0.1:6379[5]> zrevrange zset1 0 2
1) "v4"
2) "v3"
3) "v2"
redis 127.0.0.1:6379[5]> zrevrangebyscore zset1 80 60
1) "v3"
2) "v2"
3) "v1"
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值