redis 数据结构之 String

redis 数据结构之 String

  • 这个数据结构其实很简单,就是 key value 的形式。这里注意 key 在起名的时候不要太长,也不要太短,最佳的形式是:"comment:1234:reply.to" or "comment:1234:reply-to". 也就是说要使用 . 和 -

Redis String 类型是可以与 Redis 键关联的最简单的值类型。它是 Memcached 中唯一的数据类型,因此新手在 Redis 中使用它也很自然。由于 Redis 的键是字符串类型,当我们使用字符串类型作为值时,相当于将字符串映射到另一个字符串。下面使用 redis-cli 对字符串类型进行一些操作。

> set mykey somevalue
OK
> get mykey
"somevalue"

使用 SET 和 GET 命令是我们设置和检索字符串值的方式。请注意,即使键值 key 已经与非字符串值相关联,SET 也将替换已存在于键值 key 中的任何现有值(如果键值 key 已存在)。所以 SET 执行一项任务,值可以是各种类型的字符串(包括二进制数据),例如,可以将 jpeg 图像存储在值中。值不能大于 512 MB。SET 命令有一些有趣的选项,它们作为附加参数提供。例如,如果键值 key 已经存在,可能会要求 SET 失败,或者相反,如果键值 key 已经存在,它只会成功:

> set mykey newval nx    // 实际我测试的时候这里也是 OK 的,现在还没看懂这里,以后再补充
(nil)
> set mykey newval xx
OK

即使字符串是 Redis 的基本值,也可以使用它们执行有趣的操作。例如,一个是原子增量:

> set counter 100
OK
> incr counter
(integer) 101
> incr counter
(integer) 102
> incrby counter 50
(integer) 152

INCR 命令将字符串值解析为整数,将其递增 1,最后将获取的值设置为新值。还有其他类似的命令,如 INCRBY,DECR 和 DECRBY。在内部,它始终是相同的命令,以稍微不同的方式起作用。INCR 是原子的意味着什么?即使是针对同一键值 key 发布 INCR 的多个客户端也永远不会进入竞争状态。例如,永远不会发生客户端 1 在读取 “10” 的同时客户端 2 在读取“10”,两者都增加到 11,并将新值设置为 11。最终值将始终为 12 并且读取当所有其他客户端不同时执行命令时,执行增量设置操作。有许多用于操作字符串的命令。例如,GETSET 命令将键值设置为新值,并将旧值作为结果返回。例如,如果您的系统在每次网站收到新访问者时使用 INCR 递增 Redis 键值,则可以使用此命令。您可能希望每小时收集一次此信息,而不会丢失一个增量。您可以 GETSET 键值,为其指定新值 “0” 并返回旧值。在单个命令中设置或检索多个键的值的能力对于减少延迟也是有用的。因此,有 MSET 和 MGET 命令:

> mset a 10 b 20 c 30
OK
> mget a b c
1) "10"
2) "20"
3) "30"

当使用 MGET 的时候,redis 返回一个数组的值。

  • 改变和查询关键空间

有些命令没有在特定类型上定义,但是为了与键的空间交互很有用,因此可以与任何类型的键一起使用。例如,EXISTS 命令返回 1 或 0 以指示数据库中是否存在给定键,而 DEL 命令删除键和关联值,无论值是什么。

> set mykey hello
OK
> exists mykey
(integer) 1
> del mykey
(integer) 1
> exists mykey
(integer) 0

从示例中,您还可以看到 DEL 本身如何返回 1 或 0,具体取决于键值 key 是否被删除(它是否存在)(没有具有该名称的键值 key)。有许多与键值 key空间相关的命令,但上面两个是与 TYPE 命令一起必不可少的命令,它返回存储在指定键中的值的类型:

> set mykey x
OK
> type mykey
string
> del mykey
(integer) 1
> type mykey
none
  • Redis 到期:键值可以限制到期时间

在继续使用更复杂的数据结构之前,我们需要讨论另一个与值类型无关的功能,并称为 Redis 过期。基本上,您可以为键值 key 设置超时,这是一个有限的生存时间。当生存时间过去时,键值 key 会自动销毁,就像用户使用键值 key 调用 DEL 命令一样。关于 Redis 的一些快速信息到期:

它们可以使用秒或毫秒精度进行设置。 但是,到期时间分辨率始终为 1 毫秒。 有关过期的信息将被复制并保留在磁盘上,当 Redis 服务器保持停止时,这个时间实际上会消失(这意味着 Redis 会保存键值 key 过期的日期)。

设置过期时间很简单:

> set key some-value
OK
> expire key 5
(integer) 1
> get key (immediately)
"some-value"
> get key (after some time)
(nil)

两个 GET 命令之间的键值 key 消失了,因为第二个命令被延迟超过 5 秒。在上面的例子中,我们使用 EXPIRE 来设置 expire(它也可以用来为已经有一个的键设置一个不同的过期,就像 PERSIST 可以用来删除过期并使键值 key 永久持久化)。但是,我们也可以使用其他 Redis 命令创建过期键值 key。例如,使用 SET 选项:

> set key 100 ex 10
OK
> ttl key
(integer) 9

上面的示例设置一个字符串值为 100 的键值 key,其过期为 10 秒。稍后调用 TTL 命令以检查密钥的剩余生存时间。要以毫秒为单位设置和检查过期,请查看 PEXPIRE 和 PTTL 命令以及 SET 选项的完整列表。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Eglinux

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值