Redis -- 05 -- Redis常用数据类型

相关文章:


在这里,我们来了解下 Redis 中常用的数据类型,它们分别是:String (字符串)、Hash (哈希)、List (列表)、Set (集合)、Sorted Set (有序集合)

官方文档:An introduction to Redis data types and abstractions


一、String (字符串)

  • String 是 Redis 最基本的数据类型,一个 key 对应一个 value

  • String 类型是二进制安全的,也就是说 Redis 的 String 可以包含任何数据,其值最大能存储 512 MB

  • 常用的命令有:set、get、incr、decr

  • 举例说明

    • set、get

      127.0.0.1:6379> set student xiaoming
      OK
      127.0.0.1:6379> get student
      "xiaoming"
      
      127.0.0.1:6379> set student xiaohong NX
      (nil)
      127.0.0.1:6379> get student
      "xiaoming"
      
      127.0.0.1:6379> set student xiaohong XX
      OK
      127.0.0.1:6379> get student
      "xiaohong"
      
      • NX:仅当 key 不存在时,才进行设置

      • XX:仅当 key 存在时,才进行设置

    • incr、decr

      127.0.0.1:6379> set counter 100
      OK
      127.0.0.1:6379> incr counter
      (integer) 101
      127.0.0.1:6379> decr counter
      (integer) 100
      

二、Hash (哈希)

  • Hash 是一个 String 类型的 field 和 value 的映射表,特别适合于存储对象

  • 常用的命令有:hset、hget、hmset、hgetall

  • 举例说明

    • hset、hget

      127.0.0.1:6379> hset xiaoming age 22
      (integer) 1
      127.0.0.1:6379> hgetall xiaoming
      1) "age"
      2) "22"
      127.0.0.1:6379> hget xiaoming age
      "22"
      
    • hmset、hgetall

      127.0.0.1:6379> hmset xiaohong age 23 sex female
      OK
      127.0.0.1:6379> hgetall xiaohong
      1) "age"
      2) "23"
      3) "sex"
      4) "female"
      

三、List (列表)

  • List 是最简单的字符串列表,按照插入顺序排序,可以将一个元素添加到列表的头部 (左边) 或者尾部 (右边)

  • List 底层由双向链表实现,可以通过 push 或 pop 操作来从列表的头尾或尾部添加或删除元素,即 List 既可以作为栈 (LIFO,后进先出),也可以作为队列 (FIFI,先进先出)

  • 常用的命令有:lpush、lpop、rpush、rpop、lrange

  • 举例说明

    • lpush、lpop

      127.0.0.1:6379> lpush mylist AAA
      (integer) 1
      127.0.0.1:6379> lpop mylist
      "AAA"
      
    • rpush、rpop

      127.0.0.1:6379> rpush mylist BBB
      (integer) 1
      127.0.0.1:6379> rpop mylist
      "BBB"
      
    • lrange

      127.0.0.1:6379> lpush mylist1 AAA BBB
      (integer) 2
      127.0.0.1:6379> lrange mylist1 0 1
      1) "BBB"
      2) "AAA"
      
      127.0.0.1:6379> rpush mylist2 AAA BBB
      (integer) 2
      127.0.0.1:6379> lrange mylist2 0 1
      1) "AAA"
      2) "BBB"
      

四、Set (集合)

  • Set 是 String 类型的无序集合

  • Set 底层由 Hashtable 实现,不允许有重复元素,其添加、删除、查找的时间复杂度为 O(1)

  • 常用的命令有:sadd、scard、smembers、sinter、sunion、sdiff

  • 举例说明

    • sadd、scard、smembers

      127.0.0.1:6379> sadd myset AAA
      (integer) 1
      127.0.0.1:6379> sadd myset BBB
      (integer) 1
      127.0.0.1:6379> scard myset
      (integer) 2
      127.0.0.1:6379> smembers myset
      1) "BBB"
      2) "AAA"
      
    • sinter、sunion、sdiff

      127.0.0.1:6379> sadd myset1 a
      (integer) 1
      127.0.0.1:6379> sadd myset1 b
      (integer) 1
      127.0.0.1:6379> sadd myset1 c
      (integer) 1
      127.0.0.1:6379> sadd myset2 c
      (integer) 1
      127.0.0.1:6379> sadd myset2 d
      (integer) 1
      127.0.0.1:6379> sadd myset2 e
      (integer) 1
      127.0.0.1:6379> sinter myset1 myset2
      1) "c"
      127.0.0.1:6379> sunion myset1 myset2
      1) "a"
      2) "d"
      3) "c"
      4) "e"
      5) "b"
      127.0.0.1:6379> sdiff myset1 myset2
      1) "b"
      2) "a"
      127.0.0.1:6379> sdiff myset2 myset1
      1) "d"
      2) "e"
      

五、Sorted Set (有序集合)

  • Sorted Set 和 Set 一样也是 String 类型的集合,且不允许有重复元素

  • Sorted Set 的每个元素都会关联一个 double 类型的分数,Redis 通过分数来为集合中的成员进行从小到大的排序

  • Sorted Set 的元素是唯一的,但是分数是可以重复的,分数越小权重越大

  • Sorted Set 底层由 HashMap 和 SkipList (跳跃表) 实现,HashMap 存放的是元素到分数的映射,SkipList 存放的是所有元素,依据 HashMap 里存放的分数来进行排序,同时使用跳跃表可以获得较高的查询效率,并且实现较为简单

  • 常用的命令有:zadd、zcard、zrangebyscore、zrank

  • 举例说明

    • zadd、zcard

      127.0.0.1:6379> zadd zset 1 AAA
      (integer) 1
      127.0.0.1:6379> zadd zset 2 BBB
      (integer) 1
      127.0.0.1:6379> zcard zset
      (integer) 2
      
    • zrangebyscore、zrank

      127.0.0.1:6379> zadd myzset 2 BBB
      (integer) 1
      127.0.0.1:6379> zadd myzset 1 AAA
      (integer) 1
      127.0.0.1:6379> zadd myzset 3 CCC
      (integer) 1
      127.0.0.1:6379> zadd myzset 5 EEE
      (integer) 1
      127.0.0.1:6379> zadd myzset 4 DDD
      (integer) 1
      127.0.0.1:6379> zadd myzset 5 FFF
      (integer) 1
      127.0.0.1:6379> zrangebyscore myzset 0 6
      1) "AAA"
      2) "BBB"
      3) "CCC"
      4) "DDD"
      5) "EEE"
      6) "FFF"
      127.0.0.1:6379> zrank myzset FFF
      (integer) 5
      

六、参考资料

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值