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}'。
相关推荐
范中勤2 小时前
LLM 动态加载与多用户缓存架构技术文档
redis·langchain·llm·缓存架构·多用户隔离
小小龙学IT3 小时前
Redis 源码深度解析:从常用命令到内部实现
redis·golang·开源
禾小西15 小时前
07丨Redis 哨兵机制:主库故障后,如何恢复服务?
java·开发语言·redis
骉马代驾17 小时前
代驾系统实战(三):抢单池的 Redis 锁 + RabbitMQ 异步消费怎么做
redis
行百里er18 小时前
Redis Streams——有确认、能回溯的消息队列
redis
小马同学-19 小时前
Redis消息队列与客户端编程
数据库·redis
fengkai454519 小时前
十二、Redis -2
运维·数据库·redis·容器
hweiyu0019 小时前
Redis命令:BLPOP
redis·缓存
敲个大西瓜20 小时前
langchain笔记(一)
redis·笔记·langchain
小小龙学IT1 天前
C++ Redis 客户端深度解析(hiredis 与 redis-plus-plus)——工业数采实时缓存 C++ 侧实战
c++·redis·缓存