【Redis】散列表(Hash)和列表(List)的运用和明确以及Hash和List应用场景对 ...

打印 上一主题 下一主题

主题 970|帖子 970|积分 2920

一. 散列表(hash)


Redis哈希是字符串类型字段和值的映射表。哈希特别得当存储对象。
Redis中的每个哈希可以存储232-1个键值对(凌驾40亿)。

1.1 基本操作



Redis Hset 命令用于为哈希表中的字段赋值 。假如哈希表不存在,一个新的哈希表被创建并举行 HSET 操作。假如字段已经存在于哈希表中,旧值将被覆盖。
Redis Hget 命令用于返回哈希表中指定字段的值。
hmget命令用于返回哈希表中指定多个的字段的值。
hgetall命令用于返回哈希表中所有的字段和值。
我的实操过程如下:
  1. 127.0.0.1:6379> hset h1 f1 v1 f2 v2
  2. (integer) 2
  3. 127.0.0.1:6379> hget h1 f1
  4. "v1"
  5. 127.0.0.1:6379> hmget h1 f1 f2
  6. 1) "v1"
  7. 2) "v2"
  8. 127.0.0.1:6379> hgetall h1
  9. 1) "f1"
  10. 2) "v1"
  11. 3) "f2"
  12. 4) "v2"
复制代码
Redis Hkeys 命令用于获取哈希表中的所有域(field)。包罗哈希表中所有域(field)列表。 当 key 不存在时,返回一个空列表。
Redis Hexists 命令用于查看哈希表的指定字段是否存在。假如哈希表含有给定字段,返回 1 。 假如哈希表不含有给定字段,或 key 不存在,返回 0 。
我的实操过程如下:
  1. 127.0.0.1:6379> hkeys h1
  2. 1) "f1"
  3. 2) "f2"
  4. 127.0.0.1:6379> hexists h1 f3
  5. (integer) 0
  6. 127.0.0.1:6379> hstrlen h1 f1
  7. (integer) 2
复制代码
1.2 当value字符串的内容是数字时


上篇文章里提到的字符串里也是可以加小数的。
如下,这个例子是增长一个f1字段的值为123,让其增长1.23,观察得知,最后的结果为"124.23"。
我的实操过程如下:
  1. 127.0.0.1:6379> hset h2 f1 123
  2. (integer) 1
  3. 127.0.0.1:6379> hincrbyfloat h2 f1 1.23
  4. "124.23"
复制代码
二.列表(List)

Redis列表是一个简单的字符串列表,根据插入顺序排序。您可以将元素添加到列表的头部(左侧)或尾部(右侧)
一个列表最多可以包罗232-1个元素(4294967295,每个列表凌驾40亿个元素)。

2.1 基本操作


Redis Rpush 命令用于将一个或多个值插入到列表的尾部(最右边)。假如列表不存在,一个空列表会被创建并实验 RPUSH 操作。 当列表存在但不是列表类型时,返回一个错误。**留意:**在 Redis 2.4 版本从前的 RPUSH 命令,都只接受单个 value 值。
Redis Lrange 返回列表中指定区间内的元素,区间以偏移量 START 和 END 指定。 其中 0 表示列表的第一个元素, 1 表示列表的第二个元素,以此类推。 你也可以利用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。
Redis Lpush 命令将一个或多个值插入到列表头部。 假如 key 不存在,一个空列表会被创建并实验 LPUSH 操作。 当 key 存在但不是列表类型时,返回一个错误。**留意:**在Redis 2.4版本从前的 LPUSH 命令,都只接受单个 value 值。
我的实操过程如下:
  1. 127.0.0.1:6379> rpush li 1 2 3 4 5
  2. (integer) 5
  3. 127.0.0.1:6379> lrange l1 0 -1
  4. (empty array)
  5. 127.0.0.1:6379> lrange li 0 -1
  6. 1) "1"
  7. 2) "2"
  8. 3) "3"
  9. 4) "4"
  10. 5) "5"
  11. 127.0.0.1:6379> lpush li a b c d e
  12. (integer) 10
  13. 127.0.0.1:6379> lrange li 0 -1
  14. 1) "e"
  15. 2) "d"
  16. 3) "c"
  17. 4) "b"
  18. 5) "a"
  19. 6) "1"
  20. 7) "2"
  21. 8) "3"
  22. 9) "4"
  23. 10) "5"
复制代码
Redis Rpop 命令用于移除列表的最后一个元素,返回值为移除的元素。
弹出之后,本来的列表里就不存在这个数值了。
我的实操过程如下:
  1. 127.0.0.1:6379> lrange li 0 -1
  2. 1) "e"
  3. 2) "d"
  4. 3) "c"
  5. 4) "b"
  6. 5) "a"
  7. 6) "1"
  8. 7) "2"
  9. 8) "3"
  10. 127.0.0.1:6379> rpop li
  11. "3"
复制代码

Redis Lset 通过索引来设置元素的值。当索引参数超出范围,或对一个空列表举行 LSET 时,返回一个错误。
这里的例子将li的值从e改为了aa。
我的实操过程如下:
  1. 127.0.0.1:6379> lset li 0 aa
  2. OK
  3. 127.0.0.1:6379> lrange li 0 -1
  4. 1) "aa"
  5. 2) "d"
  6. 3) "c"
  7. 4) "b"
  8. 5) "a"
  9. 6) "1"
  10. 7) "2"
复制代码
Redis Linsert 命令用于在列表的元素前或者后插入元素。当指定元素不存在于列表中时,不实验任何操作。当列表不存在时,被视为空列表,不实验任何操作。假如 key 不是列表类型,返回一个错误。
假如命令实验乐成,返回插入操作完成之后,列表的长度。 假如没有找到指定元素 ,返回 -1 。 假如 key 不存在或为空列表,返回 0 。
我的实操过程如下:
  1. 127.0.0.1:6379> linsert li after c cc
  2. (integer) 8
  3. 127.0.0.1:6379> lrange li 0 -1
  4. 1) "aa"
  5. 2) "d"
  6. 3) "c"
  7. 4) "cc"
  8. 5) "b"
  9. 6) "a"
  10. 7) "1"
  11. 8) "2"
复制代码
Redis Lrem 根据参数 COUNT 的值,移除列表中与参数 VALUE 相等的元素。
COUNT 的值可以是以下几种:


  • count > 0 : 从表头开始向表尾搜刮,移除与 VALUE 相等的元素,数量为 COUNT 。
  • count < 0 : 从表尾开始向表头搜刮,移除与 VALUE 相等的元素,数量为 COUNT 的绝对值。
  • count = 0 : 移除表中所有与 VALUE 相等的值。
  1. 127.0.0.1:6379> lrem li 2 c
  2. (integer) 1
复制代码
Redis Lrange 返回列表中指定区间内的元素,区间以偏移量 START 和 END 指定。 其中 0 表示列表的第一个元素, 1 表示列表的第二个元素,以此类推。 你也可以利用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。
我的实操过程如下:
  1. 127.0.0.1:6379> lrange li 0 -1
  2. 1) "aa"
  3. 2) "d"
  4. 3) "cc"
  5. 4) "b"
  6. 5) "a"
  7. 6) "1"
  8. 7) "2"
  9. 127.0.0.1:6379> ltrim li 1 -2
  10. OK
  11. 127.0.0.1:6379> lrange li 0 -1
  12. 1) "d"
  13. 2) "cc"
  14. 3) "b"
  15. 4) "a"
  16. 5) "1"
复制代码
三.Hash和List的应用场景

3.1Hash的应用场景

1.对象缓存
哈希类型(键、字段、值)的布局类似于对象(对象id、属性、值),也可以用于存储对象。string+json也是一种存储对象的方法,
2. 购物车
3.2List的应用场景



  • 堆栈:LPUSH+LPOP–>FILO
    先入后出原则:LPUSH从队列左侧进入d、c、b、a,LPOP从队列左侧离开a、b、c、d
  • 队列:LPUSH+RPOP
    先辈先出原则:LPUSH从队列左侧进入d、c、b、a,RPOP从队列右侧离开d、c,b、a
  • 阻塞队列:LPUSH+BRPOP
    LPUSH+BRPOP在LPUSH+RPOP的基础上增长了阻塞和等待功能,
    BRPOP实际上即是阻塞+RPOP。当队列中的数据为空时,
    它将侦听消息队列,直到收到消息
总结

本文深入介绍了 Redis 中的几种常见数据布局,包括哈希(Hash)、列表(List)和集合(Set),并通过具体的命令和实操示例展示了它们的基本操作和应用场景。


  • 哈希(Hash):哈希是 Redis 中非常有效的数据类型,它得当用于存储对象类型的数据布局,通过字段和值的映射关系,支持高效的键值操作,常用于缓存和用户信息存储等场景。
  • 列表(List):Redis 列表是一个有序字符串集合,支持从两头插入和删除元素。通过具体命令如 RPUSH、LPUSH、LPOP 等,用户可以实现栈和队列等数据布局,得当用于任务队列、消息队列等应用。
  • 集合(Set):Redis 集合是无序且唯一的字符串集合,能够高效处理去重操作,常用于标签管理、交际网络的好友列表等场景。集合支持交集、并集、差集等操作,特别得当需要举行集合运算的应用。
别的,文中还联合实际操作场景举行了具体展示,包括哈希表操作、列表操作以及集合操作等,使得读者能够更直观地明确 Redis 数据布局的实际应用。
总的来说,Redis 提供了非常丰富的数据类型和操作方法,能够满意各种业务需求,明确和掌握这些数据布局的利用技巧,对于开发高效、可靠的应用体系至关重要。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

泉缘泉

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表