Redis基本数据类型:String

String

一、String 类型概述

Redis 的 String 类型并不仅仅是简单的"字符串"。它实际上是 二进制安全 的,意味着它可以存储任何形式的二进制数据,而不仅仅是可打印的文本。这使得 String 类型可以用来存储:

  • 普通的文本字符串(例如:"hello world")
  • 数字(整数或浮点数,例如:100, 3.14)
  • 二进制数据(例如:一张图片的序列化内容或一个序列化的对象)

一个 String 类型的 value 最大可以存储 512MB 的数据。

二、基本方法

  1. 简单set get del
bash 复制代码
127.0.0.1:6379> set name xiaozhang   #设置key-value
OK
127.0.0.1:6379> get name  #获得value
"xiaozhang"
127.0.0.1:6379> get age   #获取失败
(nil)
127.0.0.1:6379> del name  #删除key
(integer) 1
127.0.0.1:6379> del age  #删除失败
(integer) 0
  1. 批量set get
bash 复制代码
127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3  #批量写入
OK
127.0.0.1:6379> mget k1 k2 k3  #批量获取
1) "v1"
2) "v2"
3) "v3"
127.0.0.1:6379> mdel k1 k2  #没有mdel
(error) ERR unknown command 'mdel', with args beginning with: 'k1' 'k2' 
  1. 增与减
bash 复制代码
127.0.0.1:6379> set num 1
OK
127.0.0.1:6379> incr num  #自增
(integer) 2
127.0.0.1:6379> get num
"2"
127.0.0.1:6379> decr num  #自减
(integer) 1
127.0.0.1:6379> incrby num 10  #指定增加
(integer) 11
127.0.0.1:6379> decrby num 5  #指定减少
(integer) 6
  1. 特殊的get set: setex,setnx, getset
bash 复制代码
127.0.0.1:6379> setex test 5 ok  #设置key的过期时间
OK
127.0.0.1:6379> ttl test  #检查key多久之后会过期
(integer) 3
127.0.0.1:6379> ttl test
(integer) 1
127.0.0.1:6379> ttl test
(integer) -2              #key=-2说明已过期
127.0.0.1:6379> setnx test ok  #SET if Not eXists。只有在 key不存在时,才设置 key 的值。
(integer) 1
127.0.0.1:6379> setnx test no
(integer) 0
127.0.0.1:6379> get test
"ok"
127.0.0.1:6379> getset test no  #设置key的新值,并返回key的旧值
"ok"
127.0.0.1:6379> get test  
"no"
  1. 字符串操作
bash 复制代码
127.0.0.1:6379> set name xiao
OK
127.0.0.1:6379> strlen name  #获取value的长度
(integer) 4
127.0.0.1:6379> append name zhang  #如果key已经存在并且是一个字符串,则将value追加到原有值的末尾
(integer) 9
127.0.0.1:6379> get name
"xiaozhang"
127.0.0.1:6379> getrange name 0 -1  #获取范围字符串的子字符串,但是不会改变原来的字符串
"xiaozhang"
127.0.0.1:6379> getrange name 0 3
"xiao"
127.0.0.1:6379> get name 
"xiaozhang"

三、内部编码

Redis 会根据存储的 value 的不同,智能地采用不同的内部编码来节省内存和提高效率。对于 String 类型,主要有三种:

  1. int:当存储的值是 64 位有符号整数时,Redis 会直接使用整数存储。
  2. embstr:当存储的字符串长度较短(<= 44 字节)时,Redis 会使用一种优化的嵌入式字符串编码。
  3. raw:当存储的字符串长度较长(> 44 字节)或者是浮点数时,Redis 会使用标准的简单动态字符串(SDS)来存储。

你可以使用 OBJECT ENCODING key 命令来查看一个 key 的内部编码。

四、应用场景

String 类型的应用场景极其广泛:

  1. 缓存:最经典的用法。将数据库查询结果、页面内容、对象序列化后存储起来,加速访问。
  2. 计数器 :利用 INCR, DECR 命令实现网站访问量、视频播放量、点赞数等。原子性操作保证了高并发下的准确性。
  3. 分布式会话(Session) :结合 SETEX,将用户的 Session 信息存储在 Redis 中,实现多台应用服务器共享 Session。
  4. 分布式锁 :利用 SETNX 命令可以实现一个简单的分布式锁。
  5. 存储简单对象 :将对象序列化成 JSON 字符串后存储。例如:SET user:1001 '{"name":"Alice", "age":30}'
相关推荐
不知名的老吴7 小时前
Redis的延迟瓶颈:TCP栈开销无法避免
数据库·redis·缓存
Devin~Y7 小时前
高并发电商与AI智能客服场景下的Java面试实战:从Spring Boot到RAG与向量数据库落地
java·spring boot·redis·elasticsearch·spring cloud·kafka·rag
磊 子8 小时前
redis详解2
java·spring boot·redis
杰克尼9 小时前
redis(day03-商户查询缓存)
数据库·redis·缓存
刘~浪地球9 小时前
Redis 从入门到精通(十三):哨兵与集群
数据库·redis·缓存
一个有温度的技术博主10 小时前
Lua语法详解:从变量声明到循环遍历的避坑指南
redis·缓存·lua
一个有温度的技术博主12 小时前
Lua语法进阶:函数封装与条件控制的艺术
redis·分布式·缓存·lua
一个有温度的技术博主12 小时前
突破性能极限:深入解析多级缓存架构设计与实践
redis·缓存
北有树13 小时前
Redis专题面试题总结
数据库·redis·缓存
rannn_11113 小时前
【Redis|实战篇7】黑马点评|附近商铺、用户签到、UV签到
java·数据库·redis·后端·uv