字符串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长度限制多少吗相关推荐

  1. Redis基础数据结构内部实现简单介绍

    5种基础数据结构 Redis有5种基础数据结构,分别是:String(字符串),list(列表),hash(字典),set(集合),zset(有序集合),这五种是我们开发种经常用的到的,是Redis种 ...

  2. redis 基础数据结构实现

    参考文献 redis数据结构分析 Skip List(跳跃表)原理详解 redis 源码分析之内存布局 Redis 基础数据结构与对象 Redis设计与实现-第7章-压缩列表 在redis中构建了自己 ...

  3. redis 基础数据结构 之压缩列表

    redis基础数据结构 之 ziplist压缩链表 给新观众老爷的开场 ziplist是什么? ziplist的设计目的 ziplist的作用 ziplist的小瑕疵 ziplist 的空间布局 zl ...

  4. Redis基础数据结构

    Redis是一款完全免费的,高性能的key-value数据库,目前被大多数公司用来做缓存.Redis作为一个内存数据库,它的读写速度非常快:读速度可以达到110000次/s,写的速度是81000次/s ...

  5. redis基础数据结构(一)可变长字符串sds

    redis中的字符串是二进制安全的,传统C字符串以'\0'为结尾,只能用于保存纯文本,不能用于保存音频.视频等二进制文件,因为只要在中间遇到'\0'就被截断了.redis的sds模块所有api都使用二 ...

  6. Redis基础篇(万丈高楼平地起):核心底层数据结构

    微信原文链接,排版更舒适. 大家好,我是小龙.近期有很多小伙伴私信我Redis怎么做持久化?集群方案怎么做?分布式锁怎么实现?可是我发现,每次简答完一个问题他还有其他类似问题,或则各个知识点不能串通形 ...

  7. 【《Redis深度历险》读书笔记(1)】基础:万丈高楼平地起 ——Redis 5种基础数据结构

    [时间]2021.11.16 [题目][<Redis深度历险>读书笔记(1)]基础:万丈高楼平地起 --Redis 基础数据结构 本栏目是<Redis深度历险:核心原理和应用实践&g ...

  8. Redis高级数据结构原理解析-bitmap,hyperloglog

    Redis 位图 开发过程中,我们可能遇到这种场景记录用户的打卡情况,签到情况,这些场景只有两种结果,有或者没有,加入记录的数据量比较大,比如用一年的数据,如果用Redis中普通key/value,每 ...

  9. 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.总 ...

最新文章

  1. iOS 开发判断手机型号
  2. WPF 4 Ribbon 开发 之 快捷工具栏(Quick Access Toolbar)
  3. module 'paddle.fluid' has no attribute 'data'
  4. 下面属于javascript内部对象的有_【JavaScript 教程】面向对象编程——this 关键字...
  5. 《FPGA全程进阶---实战演练》第一章之如何学习FPGA
  6. 递归方法:对于树形结构的表,根据当前数据获取无限极的父级名称
  7. 功能农业奠基人-农业大健康·万祥军:赵其国安康工作站揭牌
  8. linux内核设计与实现---从内核出发
  9. Simulink之变压器漏抗对整流电路的影响
  10. Ajax ControlToolkit - AnimationExtender Action语法(笔记)
  11. JAVA开发面试常问问题总结1
  12. UCenter密码算法规则和生成方法
  13. 电子文档秒变手写文字:这个工具绝了!!
  14. Adobe FLASH CS6 安装错误解决方法
  15. 上帝模式下的shellcode
  16. 计算机编程课是学什么的,编程是什么课程
  17. 内核提速开机linux,Linux系统开机提速我有招!
  18. Win10系统双硬盘安装Ubuntu18.04心得
  19. Scale 编程基础 A(变量声明、基本数据类型、运算符、文件读写、分支与循环、数据结构)
  20. Spring:Webflux响应式编程

热门文章

  1. 上传图片计算机没有桌面,笔记本电脑浏览器不能上传图片怎么处理
  2. 【Linux】多线程
  3. ssd m.2接口详解
  4. Jmeter时间函数
  5. 上海软件和信息服务产业去年增长14.1%,呈现五大特点
  6. 深度学习学习笔记(一):深度学习在图像和视频的应用
  7. js中和NAN相关的应用
  8. JfreeChart 生成图表-雷达图
  9. mysql变量,mysql 变量(局部变量/全局变量)使用说明
  10. 网络空间安全——攻防对抗 2.0