Redis底层学习(二)—存储类型-String篇

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: Redis底层学习(二)—存储类型-String篇

应用场景

服务器命令:

1.单值缓存

存储key,value :SET   key  value

2.对象缓存

存储key,value :SET key value(json 格式数据)

3.分布式锁

底层结构

我们可以通过命令查看 value值为string类型的编码

指向对象的底层实现数据结构,⽽这些数据结构由 encoding 属性决定。通过 encoding 属性来设定对象所使⽤的编码,⽽不是为特定类型的对象关联⼀种固定的编码,极⼤地提升了Redis的灵活性和效率,因为Redis可以根据不同的使⽤场景来

为⼀个对象设置不同的编码,从⽽优化对象在某⼀场景下的效率

String类型

由此我们可以了解

Value为String类型的值可以存储 Long 类型与字符串。

重点分享存储embstr 编码的动态字符串与 raw编码的 简单动态字符串

Redis小于等于44个字节的字符串是embstr编码、大于44个字节是raw编码

embstr编码与raw编码的区别

图片:

先说一下区别,embstr和raw都是用来存储string数据的,并且都是使用SDS(简单动态字符串(Simple Dynamic String))来存储,区别在于embstr是一块连续的内存,而raw是两个不连续的内存,因为raw是用来存长字符串的,所以SDS相对来说占用内存较大,而申请一块连续较大的内存是得不偿失的,embstr存数据时是只读的,如果需要改变embstr存储的value时,redis底层会将string的存储方式由embstr转换为raw,然后再去修改其value。embstr相对raw的优势在于申请内存和释放内存时只需要一次,而raw申请/释放两块不连续的内存需要两次,在效率上,embstr肯定是高于raw的。

Redis中的SDS与RedisObject的关系

知识普及

分布式锁:

控制分布式系统不同进程共同访问共享资源的一种锁的实现。如果不同的系统或同一个系统的不同主机之间共享了某个临界资源,往往需要互斥来防止彼此干扰,以保证一致性。

string类型的value扩容机制:

● 当存储的 字符串⼤⼩ <= 1M 的时候,都是翻倍扩容。

● 如果存储的 字符串⼤⼩ > 1M 的时候,则每次只扩容1M空间。

● 字符串最⼤不能超过 512M 。

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
15天前
|
存储 消息中间件 监控
Redis Stream:实时数据流的处理与存储
通过上述分析和具体操作示例,您可以更好地理解和应用 Redis Stream,满足各种实时数据处理需求。
51 14
|
2月前
|
存储 NoSQL 算法
Redis分片集群中数据是怎么存储和读取的 ?
Redis集群采用哈希槽分区算法,共有16384个哈希槽,每个槽分配到不同的Redis节点上。数据操作时,通过CRC16算法对key计算并取模,确定其所属的槽和对应的节点,从而实现高效的数据存取。
56 13
|
3月前
|
NoSQL 数据可视化 Linux
redis学习四、可视化操作工具链接 centos redis,付费Redis Desktop Manager和免费Another Redis DeskTop Manager下载、安装
本文介绍了Redis的两个可视化管理工具:付费的Redis Desktop Manager和免费的Another Redis DeskTop Manager,包括它们的下载、安装和使用方法,以及在使用Another Redis DeskTop Manager连接Redis时可能遇到的问题和解决方案。
160 1
redis学习四、可视化操作工具链接 centos redis,付费Redis Desktop Manager和免费Another Redis DeskTop Manager下载、安装
|
2月前
|
存储 消息中间件 NoSQL
Redis数据结构:List类型全面解析
Redis数据结构——List类型全面解析:存储多个有序的字符串,列表中每个字符串成为元素 Eelement,最多可以存储 2^32-1 个元素。可对列表两端插入(push)和弹出(pop)、获取指定范围的元素列表等,常见命令。 底层数据结构:3.2版本之前,底层采用**压缩链表ZipList**和**双向链表LinkedList**;3.2版本之后,底层数据结构为**快速链表QuickList** 列表是一种比较灵活的数据结构,可以充当栈、队列、阻塞队列,在实际开发中有很多应用场景。
|
3月前
|
NoSQL Redis
Redis 字符串(String)
10月更文挑战第16天
52 4
|
3月前
|
消息中间件 存储 监控
redis 的List类型 实现 排行榜
【10月更文挑战第8天】
50 2
|
3月前
|
存储 NoSQL Redis
redis-set类型
【10月更文挑战第6天】
57 1
|
3月前
|
数据可视化 Java
让星星月亮告诉你,通过反射创建类的实例对象,并通过Unsafe theUnsafe来修改实例对象的私有的String类型的成员属性的值
本文介绍了如何使用 Unsafe 类通过反射机制修改对象的私有属性值。主要包括: 1. 获取 Unsafe 的 theUnsafe 属性:通过反射获取 Unsafe类的私有静态属性theUnsafe,并放开其访问权限,以便后续操作 2. 利用反射创建 User 类的实例对象:通过反射创建User类的实例对象,并定义预期值 3. 利用反射获取实例对象的name属性并修改:通过反射获取 User类实例对象的私有属性name,使用 Unsafe`的compareAndSwapObject方法直接在内存地址上修改属性值 核心代码展示了详细的步骤和逻辑,确保了对私有属性的修改不受 JVM 访问权限的限制
68 4
|
2月前
|
存储 NoSQL Redis
【赵渝强老师】Redis的存储结构
Redis 默认配置包含 16 个数据库,通过 `databases` 参数设置。每个数据库编号从 0 开始,默认连接 0 号数据库,可通过 `SELECT &lt;dbid&gt;` 切换。Redis 的核心存储结构包括 `dict`、`expires` 等字段,用于处理键值和过期行为。添加键时需指定数据库信息。视频讲解和代码示例详见内容。
|
3月前
|
NoSQL Linux Redis
Docker学习二(Centos):Docker安装并运行redis(成功运行)
这篇文章介绍了在CentOS系统上使用Docker安装并运行Redis数据库的详细步骤,包括拉取Redis镜像、创建挂载目录、下载配置文件、修改配置以及使用Docker命令运行Redis容器,并检查运行状态和使用Navicat连接Redis。
382 3