文章

Redis--数据结构--String

本文深入探讨了Redis中String数据结构的功能与应用,包括基本命令、原子操作、批量处理及其实现秒杀、缓存等功能的示例。Redis的String类型能够存储二进制安全的数据,最大容量达到512MB。

Redis--数据结构--String

文章信息

  • 原文链接:https://jiayq.blog.csdn.net/article/details/107346717
  • 发布时间:2020-07-14 20:23:49
  • 阅读量:423
  • 分类:Redis专栏收录该内容, 订阅专栏
  • 标签:#Redis的String, #Redis的字符串操作, #Redis的字符串常用操作, #Redis的字符串的批量操作, #Redis的常用用法

摘要

文章浏览阅读423次。本文深入探讨了Redis中String数据结构的功能与应用,包括基本命令、原子操作、批量处理及其实现秒杀、缓存等功能的示例。Redis的String类型能够存储二进制安全的数据,最大容量达到512MB。


Redis–数据结构–String

  • 1. 介绍
  • 2. 命令
    • 2.1 赋值
      • 2.2 取值
      • 2.3 获取并更新
      • 2.4 递增
      • 2.5 递减
      • 2.6 增加
      • 2.7 减少
      • 2.8 超时赋值
      • 2.9 存在赋值
      • 2.10 追加
      • 2.11 获取长度
      • 2.12 批量赋值
      • 2.13 批量取值
      • 2.14 批量存在赋值
  • 3. 示例
    • 3.1 秒杀
      • 3.2 缓存

1. 介绍

字符串类型是Redis中最为基础的数据存储类型,它在Redis中是二进制安全的,这便意味着该类型可以接受任何格式的数据,如JPEG图像数据或Json对象描述信息等。在Redis中字符串类型的Value最多可以容纳的数据长度是512M。

2. 命令

2.1 赋值

命令SET key value

命令说明:如果不存在指定Keyd的映射,那么增加这个映射,否则更新映射的值。

返回值:OK

image-20200714190140584

2.2 取值

命令GET key

命令说明:获取指定Key的值,如果值不是String类型,那么返回错误

返回值:如果key存在,返回key的值,否则返回null

image-20200714190422278

2.3 获取并更新

命令GETSET key value

命令说明:首先获取key的值,然后用value覆盖原值。这是一个原子操作。

返回值:如果原来不存在key的映射的值,那么返回null,否则返回key原来的值。

image-20200714190722375

2.4 递增

命令INCR key

命令说明:将指定key的值递增1后返回。key对应的值必须是数字,或者可以转为数字,否则执行失败。该操作具有原子性。

返回值:key对应的值递增后的值,如果key不存在,那么原值为0.

image-20200714191120514

2.5 递减

命令DECR key

命令说明:将指定key的值递减1后返回。key对应的值必须是数字,或者可以转为数字,否则执行失败。该操作具有原子性。

返回值:key对应的值递减后的值,如果key不存在,那么原值为0.

image-20200714191611299

2.6 增加

命令INCRBY key value

命令说明:将指定key的值增加指定的值value后返回。key对应的值必须是数字,或者可以转为数字,否则执行失败。该操作具有原子性。

返回值:key对应的值增加后的值,如果key不存在,那么原值为0.

image-20200714191957001

2.7 减少

命令DECRBY key value

命令说明:将指定key的值减少指定的值value后返回。key对应的值必须是数字,或者可以转为数字,否则执行失败。该操作具有原子性。

返回值:key对应的值减少后的值,如果key不存在,那么原值为0.

image

2.8 超时赋值

命令SETEX key seconds value

命令说明:设置key的值为value,同时设置该key存活时间为seconds.该操作具有原子性。

返回值:OK(如果key有原值,将会被覆盖)

image-20200714193513124

2.9 存在赋值

命令SETNX key value

命令说明:如果key不存在,那么增加key的映射,以及key的值为value;如果key存在,那么什么都不做。

返回值:1:设置成功;0:设置失败。

image-20200714193920938

2.10 追加

命令APPEND key value

命令说明:将value追加到key的值的后面,如果key不存在,那么初始值为空。

返回值:追加后value的长度。

image-20200714194227149

2.11 获取长度

命令STRLEN key value

命令说明:返回指定key的值的字符串的长度。如果key不存在,长度为0.

返回值:长度。

image-20200714195346962

2.12 批量赋值

命令MSET key0 value0[key1 value1…]

命令说明:批量赋值key指定的value。该操作具有原子性。

返回值:OK

image-20200714195753948

2.13 批量取值

命令MGET key0 [key1 …]

命令说明:批量取值key。如果key不存在,或者不是字符串,返回空(Nil)

返回值:values 列表

image-20200714200142731

2.14 批量存在赋值

命令MSETNX key1 value1 [key2 value2 …]

命令说明:批量设置值,不存在设置,如果任意一个key已经存在,那么该次操作失败,该次全部操作回滚。

返回值:1:成功;0:失败。

image-20200714200518955

3. 示例

3.1 秒杀

背景:618活动,在线1W人,秒杀10件商品。

  1. 商品初始化
  2. 秒杀
  3. 结束

设置商品数量:

image-20200714200852118

然后每个线程都使用递减操作:

image-20200714200926420

因为递减是原子操作,所以只要最后线程得到的结果大于0,那么就是秒杀成功的线程

3.2 缓存

背景:将Redis作为数据库的缓存,将经常使用的数据放到redis中。

修改的时候使用获取并更新操作。

image-20200714201402041

当然可以设置缓存过期时间:

image-20200714201500388

本文由作者按照 CC BY 4.0 进行授权