Redis基础数据结构String:你知道String长度限制多少吗
字符串String是Redis最简单最常用的数据结构,它的内部表示就是一个字符数组,如图所示。Redis所有的数据结构都是以唯一的key字符串作为名称,然后通过这个唯一key值来获取相应的value数据。不同类型的数据结构的差异就在于value的结构不一样。
一、存储
Redis的字符串是动态字符串,是可以修改的字符串,内部结构的实现类似于Java的ArrayList,采用预分配冗余空间的方式来减少内存的频繁分配,如图2所示,内部为当前字符串分配的实际空间capacity一般要高于实际字符串长度len。当字符串长度小于1MB时,扩容都是加倍现有的空间。如果字符串长度超过1MB,扩容时一次只会多扩1MB的空间。字符串最大长度为512MB。
二、Redis命令
1.键值对
相当于字典的key和value,支持简单的增删改查操作。下面代码中的“name”就是字典的key,而value就是字符串"zhangsan"。
> set name zhangsanOK
> get name"zhangsan"
> exists name(integer) 1
> del name(integer) 1
> get name (nil)
2.批量键值对
可以对多个字符串进行批量读写,节省网络耗时开销
> mset name1 zhangsan name2 lisi name3 wanger
OK> mget name1 name2 name3 # 返回的是一个列表
1) "zhangsan"
2) "lisi"
3) "wanger"> mget name1 name2 name3 name4
1) "zhangsan"
2) "lisi"
3) "wanger"
4) (nil)
3.过期和set命令拓展
可以对key设置过期时间,到时间会被自动删除,这个功能常用来设置缓存的失效时间。
> set name zhangsanOK
> get name"zhangsan"> expire name 5 # 5s 后过期(integer) 1... # 等5s
> get name(nil)> setex name 5 zhangsan # 5s后过期,等价于set+expireOK> get name
"zhangsan"... # 等5s
> get name
(nil)> setnx name zhangsan # 如果name不存在就执行set创建
(integer) 1> setnx name lisi
(integer) 0 # name已经存在,不会set成功> get name
"zhangsan" # 没有改变
4.计数
如果value值是一个整数,可以对它进行自增操作。自增是有范围的,它的范围在signed long的最大值和最小值之间,超出这个范围Redis会报错。
> set age 18
OK
> incr age
(integer) 19
> incrby age 10
(integer) 29
> incrby age -5 #相当于减5
(integer) 24
三、使用场景
字符串结构使用非常广泛,一个常见的用途就是缓存用户信息。我们可以将用户信息结构序列化为JSON字符串,然后将字符串放到Redis来缓存,同样取用户信息时经过一次反序列化的过程
END
如有收获,请帮忙转发,您的鼓励是作者最大的动力,谢谢!
一大波微服务、分布式、高并发、高可用的原创系列文章正在路上,欢迎扫描下方二维码,持续关注:
文玥公子
Redis基础数据结构String:你知道String长度限制多少吗相关推荐
- Redis基础数据结构内部实现简单介绍
5种基础数据结构 Redis有5种基础数据结构,分别是:String(字符串),list(列表),hash(字典),set(集合),zset(有序集合),这五种是我们开发种经常用的到的,是Redis种 ...
- redis 基础数据结构实现
参考文献 redis数据结构分析 Skip List(跳跃表)原理详解 redis 源码分析之内存布局 Redis 基础数据结构与对象 Redis设计与实现-第7章-压缩列表 在redis中构建了自己 ...
- redis 基础数据结构 之压缩列表
redis基础数据结构 之 ziplist压缩链表 给新观众老爷的开场 ziplist是什么? ziplist的设计目的 ziplist的作用 ziplist的小瑕疵 ziplist 的空间布局 zl ...
- Redis基础数据结构
Redis是一款完全免费的,高性能的key-value数据库,目前被大多数公司用来做缓存.Redis作为一个内存数据库,它的读写速度非常快:读速度可以达到110000次/s,写的速度是81000次/s ...
- redis基础数据结构(一)可变长字符串sds
redis中的字符串是二进制安全的,传统C字符串以'\0'为结尾,只能用于保存纯文本,不能用于保存音频.视频等二进制文件,因为只要在中间遇到'\0'就被截断了.redis的sds模块所有api都使用二 ...
- Redis基础篇(万丈高楼平地起):核心底层数据结构
微信原文链接,排版更舒适. 大家好,我是小龙.近期有很多小伙伴私信我Redis怎么做持久化?集群方案怎么做?分布式锁怎么实现?可是我发现,每次简答完一个问题他还有其他类似问题,或则各个知识点不能串通形 ...
- 【《Redis深度历险》读书笔记(1)】基础:万丈高楼平地起 ——Redis 5种基础数据结构
[时间]2021.11.16 [题目][<Redis深度历险>读书笔记(1)]基础:万丈高楼平地起 --Redis 基础数据结构 本栏目是<Redis深度历险:核心原理和应用实践&g ...
- Redis高级数据结构原理解析-bitmap,hyperloglog
Redis 位图 开发过程中,我们可能遇到这种场景记录用户的打卡情况,签到情况,这些场景只有两种结果,有或者没有,加入记录的数据量比较大,比如用一年的数据,如果用Redis中普通key/value,每 ...
- redis源码剖析(1):基础数据结构SDS
目录 1.SDS概述 2.SDS的定义 2.1 3.2版本和3.0版本的差别 3.SDS数据结构解读 4.SDS重点源码分析 4.1 创建SDS 4.2 SDS拼接 4.3 SDS惰性空间释放 5.总 ...
最新文章
- iOS 开发判断手机型号
- WPF 4 Ribbon 开发 之 快捷工具栏(Quick Access Toolbar)
- module 'paddle.fluid' has no attribute 'data'
- 下面属于javascript内部对象的有_【JavaScript 教程】面向对象编程——this 关键字...
- 《FPGA全程进阶---实战演练》第一章之如何学习FPGA
- 递归方法:对于树形结构的表,根据当前数据获取无限极的父级名称
- 功能农业奠基人-农业大健康·万祥军:赵其国安康工作站揭牌
- linux内核设计与实现---从内核出发
- Simulink之变压器漏抗对整流电路的影响
- Ajax ControlToolkit - AnimationExtender Action语法(笔记)
- JAVA开发面试常问问题总结1
- UCenter密码算法规则和生成方法
- 电子文档秒变手写文字:这个工具绝了!!
- Adobe FLASH CS6 安装错误解决方法
- 上帝模式下的shellcode
- 计算机编程课是学什么的,编程是什么课程
- 内核提速开机linux,Linux系统开机提速我有招!
- Win10系统双硬盘安装Ubuntu18.04心得
- Scale 编程基础 A(变量声明、基本数据类型、运算符、文件读写、分支与循环、数据结构)
- Spring:Webflux响应式编程