Redis快速上手-常见数据结构和用法(一)

这是我参与8月更文挑战的第5天,活动详情查看:8月更文挑战

本章主要是介绍 redis 中常规的数据结构以及常用的方法,我们需要知道 redis 支持哪些数据结构,提供有哪些方法,能满足我们哪些需求,才能更好的驾驭这门利器

我的 redis 系列,感兴趣的朋友也可以来看看

Redis 快速上手 - 安装配置

String(字符串)

字符串是最基本的一种Redis值。Redis字符串是二进制安全的,这意味着Redis字符串可以包含任何类型的数据,例如JPEG图像或序列化的Ruby对象。字符串的长度可以是最大512MB

命令总结:

设置值

  • set key value [ex seconds | px milliseconds]
    • 设置 key-value,可选携带过期时间
  • mset key value [key value...]
    • 一次设置多组 key-value

获取值

  • get key
    • 获取指定 key 的 value
  • mget key [key...]
    • 一次获取多个指定 key 的数据

查看过期时间

  • ttl key
  • 返回指定 key 的过期时间
  • -2 表示 key 不存在
  • -1 表示 key 永不过期
  • >=0 表示剩余时间,单位是 s

Hash(哈希)

Redis散列是字符串字段和字符串值之间的映射,因此它们是表示对象的最佳数据类型(例如,具有多个字段(如name、姓氏、年龄等)的用户)

命令总结:

赋值操作

  • 为 key 赋予多个键值对
    • hmset -> hash more set
    • hmset key field value [field value...]
  • 为 key 设置一对 key-value
    • hset key field value

取值操作

  • 获取指定 key 的全部字段
    • hgetall -> hash get all
    • hgetall key
  • 获取 key 中多个字段的值
    • HMGET key field1 [field...]
  • 获取 key 中单个字段的值
    • HGET key field

删除 key 上的多个字段

  • HDEL key field1 [field...]

检查 key 中某个 field 是否存在

  • HEXISTS key field

List(有序列表)

列表的最大长度是2^32 - 1个元素(4294967295,每个列表可以包含超过40亿个元素)。从时间复杂性的角度来看,Redis列表的主要特性是支持在头和尾附近不断地插入和删除元素,即使插入了数百万元素。访问元素在列表的极端位置非常快,但是如果你试图访问一个非常大的列表的中间位置,则速度会很慢,因为这是一个O(N)操作。

一些可以实现的功能:

  • 为社交网络中的时间轴建模,使用LPUSH在用户时间线上添加新元素,使用LRANGE检索最近插入的一些项。
  • 可以使用LPUSH和LTRIM一起创建一个列表,该列表的元素数量不会超过给定的元素数量,但是只记住最新的N个元素。

命令总结:

阻塞式操作

  • 超时的单位为
  • 阻塞等待,弹出列表左边第一个元素,或者等待超时后停止
    • blpop key [key...] timeout
  • 阻塞等待,弹出列表右边第一个元素,或等待超时
    • brpop key [key...] timeout
  • 阻塞等待,从 a 列表移除右边第一个元素,并添加到 b 列表的左边,或等待超时
    • brpoplpush fromList toList timeout
    • 可以理解为 brpop + lpush 组合使用

插入操作

  • 将一个或多个值插入到列表
    • 左侧插入
    • lpush key value [value...]
    • 右侧插入
    • rpush key value [value...]
  • 将一个值插入到已存在的列表
    • 左侧插入
    • lpushx key value
    • 右侧插入
    • rpushx key value

移除操作

  • 弹出列表中左侧第一个
  • lpop key
  • 弹出列表中右侧第一个
  • rpop key

获取元素

  • 获取指定范围内的元素
  • lrange key startIndex endIndex
  • 根据索引来获取单个元素,获取失败会返回 (nil)
  • lindex key index

特殊操作

  • 修剪列表,保存指定区间的数据
    • ltrim key startIndex endIndex
  • 获取列表的长度
    • llen key
  • 在列表中某个元素的 前|后 插入元素
    • linsert key before|after valueInList targetValue
    • 如果列表中存在重复的元素,该命令会对顺序检索到的第一个元素进行操作

有很多资料都将 redis 中 list 结构的左边称为列表的头部,右边称为列表的尾部,为了避免误导大伙,文中都是称呼为左右操作 (或许在我看来,将右边称为队列的头部更合适?)

但实际上,调用诸如 lindex, lrange, linsert 等命令,会发现,redis 会从右往左来使用 list

比如,lpush name 1 2 3lrange name 0 10 显示的顺序是 3 2 1

并且 lindex name 0 返回值 3

linsert name before 2 10 的结果是 10 插入在了 2 和 3 之间

要是觉得不错的话,大佬们赏个赞呗~