redis string数据类型 作者:马育民 • 2020-12-22 22:25 • 阅读:10145 # 介绍 与 Java 的 `String` 、C++ `string` 同名,但不是一个意思 - 最为基础的数据存储类型,**一个key对应一个value** - 是二进制安全的,意味着该类型可以接受 **任何格式** 的数据,如 **JPEG** 或 序列化对象 等。 - 最多可以容纳的数据长度是 **512M**。 ### 应用场景 - 集群时实现session共享 [spring session](https://malaoshi.top/show_1EF5vjIHbvbP.html "spring session") - 计数器 用string类型进行计数,如:评论数、点赞数、分享数,收藏数,访问量,**商品库存(防止超卖)** string类型的内容是 **数字值** 时,可通过 `incr` 和 `decr` 命令将数字值 `加一` 或 `减一`,这两个操作具有 **原子性**,总能安全地进行加减操作。 # 命令 详解: http://redisdoc.com/string/index.html https://www.runoob.com/redis/redis-strings.html SET SETNX SETEX PSETEX GET GETSET STRLEN APPEND SETRANGE GETRANGE INCR:加一,**原子操作**,总能安全地进行操作 INCRBY INCRBYFLOAT DECR:减一,**原子操作**,总能安全地进行操作 DECRBY MSET MSETNX MGET # 例子 微博点赞数量 key:`weibo_123_like`,`weibo` 表示 **表名**,`123` 表示 **主键的值**,`like` 表示 **点赞数量** 字段 [![](https://www.malaoshi.top/upload/pic/redis/Snipaste_2022-03-11_11-29-14.png)](https://www.malaoshi.top/upload/pic/redis/Snipaste_2022-03-11_11-29-14.png) ### set 命令 将字符串值 value 关联到 key ``` >set weibo_123_like 0 OK ``` **注意:** 再次设置相同的key,其value会被覆盖,不会报错: ### get ``` >get weibo_123_like ``` 显示: ``` 0 ``` ### incr key 当key的value是数字时,加1 > INCR 命令是一个针对字符串的操作。 因为 Redis 并没有专用的整数类型, 所以键 key 储存的值在执行 INCR 命令时会被解释为十进制 64 位有符号整数。 如果键 key 不存在, 那么它的值会先被初始化为 0 , 然后再执行 INCR 命令。 如果键 key 储存的值不能被解释为数字, 那么 INCR 命令将返回一个错误。 ##### 例子 ``` >incr weibo_123_like (integer) 1 ``` ### decr key 当key的value是数字时,减1 如果键 key 不存在, 那么键 key 的值会先被初始化为 0 , 然后再执行 DECR 操作。 如果键 key 储存的值不能被解释为数字, 那么 DECR 命令将返回一个错误。 本操作的值限制在 64 位(bit)有符号数字表示之内。 ##### 接上面例子 ``` > DECR weibo_123_like (integer) 0 ``` ### incrby key decrement 当key的value是数字时,加上 increment 如果键 key 不存在, 那么键 key 的值会先被初始化为 0 , 然后再执行 INCRBY 命令。 如果键 key 储存的值不能被解释为数字, 那么 INCRBY 命令将返回一个错误。 本操作的值限制在 64 位(bit)有符号数字表示之内。 ``` > SET rank 50 OK > INCRBY rank 20 (integer) 70 > GET rank "70" ``` ### decrby key decrement 当key的value是数字时,减 decrement 如果键 key 不存在, 那么键 key 的值会先被初始化为 0 , 然后再执行 DECRBY 命令。 如果键 key 储存的值不能被解释为数字, 那么 DECRBY 命令将返回一个错误。 本操作的值限制在 64 位(bit)有符号数字表示之内。 ``` > SET count 100 OK > DECRBY count 20 (integer) 80 ``` 原文出处:http://malaoshi.top/show_1IXGjYbQ0Yz.html