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

本文涉及的产品
云数据库 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
相关文章
|
1天前
|
编译器 C++
【C++】继续学习 string类 吧
首先不得不说的是由于历史原因,string的接口多达130多个,简直冗杂… 所以学习过程中,我们只需要选取常用的,好用的来进行使用即可(有种垃圾堆里翻美食的感觉)
15 4
|
1天前
|
算法 安全 程序员
【C++】STL学习之旅——初识STL,认识string类
现在我正式开始学习STL,这让我期待好久了,一想到不用手撕链表,手搓堆栈,心里非常爽。接下来我们先来介绍一下STL:
17 4
|
1天前
|
NoSQL Java Unix
Redis基础操作 String List
Redis基础操作 String List
5 0
|
14天前
|
存储 NoSQL 安全
Redis入门到通关之Redis数据结构-String篇
Redis入门到通关之Redis数据结构-String篇
35 1
|
14天前
|
存储 缓存 NoSQL
Redis入门到通关之String命令
Redis入门到通关之String命令
18 0
|
15天前
|
存储 消息中间件 缓存
Redis 命令全解析之 String类型
Redis 命令全解析之 String类型
14 1
|
17天前
|
C++
c++的学习之路:11、string(3)
c++的学习之路:11、string(3)
17 0
|
17天前
|
编译器 C++
c++的学习之路:10、string(2)
c++的学习之路:10、string(2)
27 0
|
29天前
|
Java API 索引
Java基础—笔记—String篇
本文介绍了Java中的`String`类、包的管理和API文档的使用。包用于分类管理Java程序,同包下类无需导包,不同包需导入。使用API时,可按类名搜索、查看包、介绍、构造器和方法。方法命名能暗示其功能,注意参数和返回值。`String`创建有两种方式:双引号创建(常量池,共享)和构造器`new`(每次新建对象)。此外,列举了`String`的常用方法,如`length()`、`charAt()`、`equals()`、`substring()`等。
16 0
|
1月前
|
缓存 Java
Java中循环创建String对象的内存管理分析
Java中循环创建String对象的内存管理分析
25 2