Redis的数据类型详解

字符串类型

虽然叫字符串类型,但是里面也可以由数字。

  • 创建一个字符串类型的key
127.0.0.1:6379> set name tom
OK
127.0.0.1:6379> get name
"tom"
127.0.0.1:6379> type name
string
  • 还可以在value的尾部追加字符串
string
127.0.0.1:6379> append name qq
(integer) 5
127.0.0.1:6379> get name
"tomqq"
  1. 用set可以设置一个键值对,用mset可以一次设置多个键值对,用mget可以一次获取多个key的值
127.0.0.1:6379> mset name jerry age 2 addr hebei
OK
127.0.0.1:6379> mget name age addr
1) "jerry"
2) "2"
3) "hebei"
  1. 用strlen可以获取key字符串的长度
127.0.0.1:6379> strlen name
(integer) 5
127.0.0.1:6379> strlen age
(integer) 1
  1. 可以使用incr的decr将值加1或者减1,但需要注意的是只能用在整数类型中
127.0.0.1:6379> set age 10
OK
127.0.0.1:6379> type age
string
127.0.0.1:6379> incr age
(integer) 11
127.0.0.1:6379> decr age
(integer) 10
  1. 也可以使用incrby或decrby设置每次自增或者自减不是1而是一个指定的值
127.0.0.1:6379> incrby age 3
(integer) 13
127.0.0.1:6379> decrby age 3
(integer) 10

哈希类型

  • redis的hash其实就是键值对的集合
  • 每个hash中可以储存2^32-1个键值对
  1. 使用hset和hget可以设置和获取哈希类型键值对得值
127.0.0.1:6379> hset userinfo name cx
(integer) 1
127.0.0.1:6379> hset userinfo age 20
(integer) 1
127.0.0.1:6379> hset userinfo addr beijing
(integer) 1
127.0.0.1:6379> type userinfo
hash
127.0.0.1:6379> hget userinfo age
"20"
  1. 使用hgetall可以返回哈希中全部的键值对
127.0.0.1:6379> hgetall userinfo
1) "name"
2) "cx"
3) "age"
4) "20"
5) "addr"
6) "beijing"
  1. 使用hmset和hmget可以一次设置或者获取多个key所对应的值。
127.0.0.1:6379> hmget userinfo name age
1) "cx"
2) "20"
  1. 可以使用keys *查看全部数据对象,使用del命令删除键值对
127.0.0.1:6379> keys *
1) "name"
2) "userinfo"
127.0.0.1:6379> del name

注意:del是删除的一个数据对象,比如执行 del userinfo命令会删除整个userinfo哈希表,想要删除哈希表中的某个键值对需要使用hdel userinfo name.

列表类型

  • 列表中的元素是有顺序的
  • 列表中最多储存2^32-1个键值对
  • 列表的元素是从0开始的
  • 列表其实是双向的(左L 右R)
  1. lpush可以将一个或者多个值插入到列表的首部(如果列表不存在,则创建列表)
127.0.0.1:6379> lpush citylist beijing shanghai guangzhou 
(integer) 3
  1. lrange可以显示一个列表中的部分元素,在现实的是需要制定起始位置终止位置
127.0.0.1:6379> lrange citylist 0 2
1) "guangzhou"
2) "shanghai"
3) "beijing"
  1. rpush可以在列表末尾追加元素
127.0.0.1:6379> rpush citylist shenyang
(integer) 4
127.0.0.1:6379> lrange citylist 0 5
1) "guangzhou"
2) "shanghai"
3) "beijing"
4) "shenyang"
  1. rpop可以显示列表末尾的一个元素,并将其从列表中删除
127.0.0.1:6379> rpop citylist
"shenyang"
127.0.0.1:6379> lrange citylist 0 5
1) "guangzhou"
2) "shanghai"
3) "beijing"
  1. lpop可以显示列表首部的一个元素,并将其从列表中删除。
    llen可以返回列表长度
127.0.0.1:6379> llen citylist
(integer) 3
  1. lrem可以删除指定个数的元素,比如从前往后找,找到的前两个qq
    用正数指定个数:表示从前往后找
    用负数指定个数:表示从后往前找
127.0.0.1:6379> lpush list1 qq baidu taobao sina qq baidu qq taobao qq
(integer) 9
127.0.0.1:6379> lrange list1 0 10
1) "qq"
2) "taobao"
3) "qq"
4) "baidu"
5) "qq"
6) "sina"
7) "taobao"
8) "baidu"
9) "qq"
127.0.0.1:6379> lrem list1 2 qq   >>>删除前两个qq
(integer) 2
127.0.0.1:6379> lrange list1 0 10
1) "taobao"
2) "baidu"
3) "qq"
4) "sina"
5) "taobao"
6) "baidu"
7) "qq"
127.0.0.1:6379> lrem list1 -1 baidu   >>>删除最后一个baidu
(integer) 1
127.0.0.1:6379> lrange list1 0 10
1) "taobao"
2) "baidu"
3) "qq"
4) "sina"
5) "taobao"
6) "qq"
127.0.0.1:6379> lrem list1 0 taobao  >>>删除所有的taobao
(integer) 2
127.0.0.1:6379> lrange list1 0 10
1) "baidu"
2) "qq"
3) "sina"
4) "qq"

lset可以修改某个下标得值,比如说把下标为1的值改为360

127.0.0.1:6379> lset list1 1 360
OK
127.0.0.1:6379> lrange list1 0 10
1) "baidu"
2) "360"
3) "sina"
4) "qq"
  1. linsert可以在指定的值前面或者后面插入新的数据,比如在360的后面添加一个元素cx
127.0.0.1:6379> linsert list1 after 360 cx
(integer) 5
127.0.0.1:6379> lrange list1 0 10
1) "baidu"
2) "360"
3) "cx"
4) "sina"
5) "qq"
  1. 在生产环境中,列表使用还是比较广泛的
    很多时候都是从左边添加数据,从右边读取数据,比如我们在缓存中缓存五个数据
127.0.0.1:6379> lpush list2 q1
(integer) 1
127.0.0.1:6379> lpush list2 q2
(integer) 2
127.0.0.1:6379> lpush list2 q3
(integer) 3
127.0.0.1:6379> lpush list2 q4
(integer) 4
127.0.0.1:6379> lpush list2 q5
(integer) 5
  1. 会发现新添加的数据在最后面(最下面,最右边)
127.0.0.1:6379> lrange list2 0 10
1) "q5"
2) "q4"
3) "q3"
4) "q2"
5) "q1"
  1. 那么在读取数据的时候就可以从后读
127.0.0.1:6379> rpop list2
"q1"
127.0.0.1:6379> rpop list2
"q2"
127.0.0.1:6379> rpop list2
"q3"
127.0.0.1:6379> rpop list2
"q4"
127.0.0.1:6379> rpop list2
"q5"

这其实是一个生产者-消费者模型,也就是所谓的消息队列,通常来说消息队列会用在下订单、用户注册场景中,比如一个用户提交订单了,这个订单会首先保存在消息队列中,那么这个时候即使数据库还没有写入就宕机了,也是没有问题的,在启动以后,通过读取消息队列,就可以继续执行了。

集合类型(set)

集合中会有比如交集、并集等这样的概念。
sadd可以创建集合,这里我们再结合中添加三个元素

127.0.0.1:6379> sadd myset qq
(integer) 1
127.0.0.1:6379> sadd myset baidu
(integer) 1
127.0.0.1:6379> sadd myset sina

smembers可以获取集合中的全部元素

127.0.0.1:6379> smembers myset
1) "baidu"
2) "qq"
3) "sina"

sismember可以判断一个元素是否在集合中

127.0.0.1:6379> sismember myset sina
(integer) 1           >>>在集合中
127.0.0.1:6379> sismember myset qqa
(integer) 0           >>>不在集合中

我们在怎样的场景中会用到交集呢?比如在好友列表中,既是你的好友也是我的好友那就会用到交集。

有序集合(sortdset)

  1. ZADD key score member [[score member] [score member] …]
    将一个或多个 member 元素及其 score 值加入到有序集 key 当中。
# 添加单个元素
127.0.0.1:6379> zadd sortdset1 10 qq
(integer) 1
# 添加多个元素
127.0.0.1:6379> zadd sortdset1 7 baidu 8 sina 15 taobao 
(integer) 3
  1. ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
    有序集成员按 score 值递增(从小到大)次序排列。
127.0.0.1:6379> zrange salary 0 100 withscores
1) "baidu"
2) "7"
3) "sina"
4) "8"
5) "qq"
6) "10"
7) "taobao"
8) "15"
  1. ZCARD key
    返回有序集 key 的基数
127.0.0.1:6379> zcard sortdset1
(integer) 4
  1. ZCOUNT key min max
    返回有序集 key 中, score 值在 min 和 max 之间(默认包括 score 值等于 min 或 max )的成员的数量。
127.0.0.1:6379> zcount sortdset1 5 10
(integer) 3    >>>有三个score值在5-10之间taobao的score是15不再这个之间
  1. ZSCORE key member
    返回有序集 key 中,成员 member 的 score 值。
    如果 member 元素不是有序集 key 的成员,或 key 不存在,返回 nil
127.0.0.1:6379> zscore salary baidu
"7"
  1. ZRANK key member
    返回有序集 key 中成员 member 的排名。其中有序集成员按 score 值递增(从小到大)顺序排列。
    排名以 0 为底,也就是说, score 值最小的成员排名为 0 。
    使用 ZREVRANK 命令可以获得成员按 score 值递减(从大到小)排列的排名。
127.0.0.1:6379> zrank salary baidu
(integer) 0        >>>baidu排名第一
127.0.0.1:6379> zrank salary qq
(integer) 2		    >>>qq排名第三
  1. ZINCRBY key increment member
    为有序集 key 的成员 member 的 score 值加上增量 increment。
    可以通过传递一个负数值 increment ,让 score 减去相应的值,比如 ZINCRBY key -5 member ,就是让 member 的 score 值减去 5 。
    当 key 不存在,或 member 不是 key 的成员时, ZINCRBY key increment member 等同于 ZADD key increment member 。
    当 key 不是有序集类型时,返回一个错误。
    score 值可以是整数值或双精度浮点数。

  2. ZREM key member [member …]
    移除有序集 key 中的一个或多个成员,不存在的成员将被忽略。
    当 key 存在但不是有序集类型时,返回一个错误。

  3. ZREVRANGE key start stop [WITHSCORES]
    返回有序集 key 中,指定区间内的成员。
    其中成员的位置按 score 值递减(从大到小)来排列。
    具有相同 score 值的成员按字典序的逆序(reverse lexicographical order)排列。
    除了成员按 score 值递减的次序排列这一点外, ZREVRANGE 命令的其他方面和 ZRANGE 命令一样。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值