首页 > 数据库 >3.Redis系列之常用数据类型字符串String

3.Redis系列之常用数据类型字符串String

时间:2022-10-31 20:58:01浏览次数:59  
标签:127.0 String 0.1 数据类型 Redis 6379 integer shenjian name

本文系列学习redis五大常用数据类型之字符串String的基本操作及编码与底层数据结构

1. 基本操作

// set key value设置键值对
127.0.0.1:6379> set blog shenjian.online
OK
// get查询对应键值
127.0.0.1:6379> get blog
"shenjian.online"
// EX表示10秒后key过期
127.0.0.1:6379> set blog shenjian EX 10
OK
// PX表示1000毫秒后key过期
127.0.0.1:6379> set blog shenjian PX 1000
OK
// NX表示不存在key则设置,nil不成功
127.0.0.1:6379> set blog shenjian NX
(nil)
// XX表示存在key则设置,OK成功
127.0.0.1:6379> set blog shenjian XX
OK
127.0.0.1:6379> get blog
"shenjian"
// 向key值中追加.online字符串
127.0.0.1:6379> append blog .online
(integer) 15
// 获取key值长度
127.0.0.1:6379> strlen blog
(integer) 15
// 当key不存在时设置值,0设置失败
127.0.0.1:6379> setnx blog shenjian
(integer) 0
127.0.0.1:6379> set count 0
OK
// 增加1
127.0.0.1:6379> incr count
(integer) 1
// 减少1
127.0.0.1:6379> decr count
(integer) 0
// 当前key值加5
127.0.0.1:6379> incrby count 5
(integer) 5
// 当前key值减4
127.0.0.1:6379> decrby count 4
(integer) 1
127.0.0.1:6379> get count
"1"
// mset批量赋值
127.0.0.1:6379> mset name shenjian sex man
OK
// 批量获取值
127.0.0.1:6379> mget name sex other
1) "shenjian"
2) "man"
3) (nil)
// msetnx批量赋值,原子性,一个失败全部失败
127.0.0.1:6379> msetnx name zhangsan other 3
(integer) 0
127.0.0.1:6379> mget name other
1) "shenjian"
2) (nil)
// 获取字符串指定位置
127.0.0.1:6379> getrange name 0 3
"shen"
// 在指定位置开始替换值
127.0.0.1:6379> setrange name 0 hao
(integer) 8
127.0.0.1:6379> get name
"haonjian"
// 获取旧值同时设置新值
127.0.0.1:6379> getset name shenjian
"haonjian"
// 设置过期时间10秒,上面也出现过奥
127.0.0.1:6379> setex name 10 shenjian
OK
127.0.0.1:6379> ttl name
(integer) 8

2. 内部编码

127.0.0.1:6379> set name shenjianshenjianshenjianshenjianshenjianshen
OK
127.0.0.1:6379> strlen name
(integer) 44
127.0.0.1:6379> object encoding name
"embstr"
127.0.0.1:6379> set name shenjianshenjianshenjianshenjianshenjianshens
OK
127.0.0.1:6379> strlen name
(integer) 45
127.0.0.1:6379> object encoding name
"raw"
127.0.0.1:6379> set age 20
OK
127.0.0.1:6379> object encoding age
"int"

由上可以看出,当字节数少于等于44时,字符串编码为embstr,当大于44时,字符串编码为raw,对于整型编码为int

127.0.0.1:6379> set name shenjian
OK
127.0.0.1:6379> object encoding shenjian
(nil)
127.0.0.1:6379> append name shenjian
(integer) 16
127.0.0.1:6379> object encoding blog
"raw"

由上可以看出,redis中embstr实现为只读,只要是修改embstr对象,修改后的对象一定是raw的,无论是否达到了44个字节

  • embstr与raw都使用redisObject和sds保存数据
  • embstr只分配一次内存空间,因此redisObject和sds[稍后介绍]是连续的
  • raw需要分配两次内存空间,分别为redisObject和sds分配空间,不连续。
  • embstr好处:创建/删除时少分配/释放一次空间,对象的所有数据连续,查找方便
  • embstr坏处:当需要重新分配内存时,整个redisObject和sds都要重新分配空间,因此redis中的embstr实现为只读

3. 底层数据结构

String的数据结构为简单动态字符串(Simple Dynamic String,即SDS),是可以修改的字符串,采用预分配冗余空间的方式来减少内存的频繁分配。
当字符串长度小于1M时,扩容是加倍现有空间。超过1M,扩容只会多扩1M空间,字符串最大长度为512M

欢迎关注公众号算法小生沈健的技术博客查看最新文章

标签:127.0,String,0.1,数据类型,Redis,6379,integer,shenjian,name
From: https://www.cnblogs.com/shenjian-online/p/16845741.html

相关文章

  • 5.Redis系列之常用数据类型集合Set
    本文讲解redis常用数据类型集合Set的基本操作与数据结构1.基本操作#sadd集合添加元素127.0.0.1:6379>saddusernameshenjianshenjiandomijing(integer)3#sme......
  • 6.Redis系列之常用数据类型有序集合Zset
    本文学redis常用数据类型有序集合Zset基本操作与底层数据结构1.基本操作#zadd<key><score><member>将多个member元素及其score值加入有序集合key中127.0.0.1:6379>......
  • redis 安装
    基于CenterOS7安装Redis下载安装包   wgethttp://download.redis.io/releases/redis-5.0.0.tar.gz解压安装包    tar–xvfredis-5.0.0.tar.gz编译(在解压......
  • 非关系型数据库 之 Key-Value数据库 Redis的使用(Python3)
    文章目录​​1、Redis简介​​​​1.1、简述​​​​1.2、特点​​​​1.3、优势​​​​2、CentOS操作Redis​​​​2.1、安装启动​​​​2.1.1、安装​​​​2.1.2、......
  • C++面向对象高级开发(六)写好一个String类
    类的内部:public:构造函数、拷贝构造、拷贝赋值、析构函数的接口和辅助函数以及它的实现private:参数  类的外部:内联:inline构造函数:判断是否有初值:有初值:分配......
  • Java学习笔记day1——String类型变量
    /*String(字符串)类型变量的使用*1.String属于引用数据类型;*2.String用双引号""进行定义;*/classStringTest{publicstaticvoidmain(String[]ag......
  • 注释,标识符,数据类型笔记
    注释单行注释:只能注释当前行,以//开始,直到行结束//输出HelloWorld!多行注释:注释一段文字,以/开始,/结束!/*这是我们Java程序的主入口,main方法也是程序的主线程。*/文......
  • [单片机框架] [str_hex] 字符串和16进制互转 string to hex
    /*********************************************************************************@filestr_hex.c*@authorjianqiang.xue*@VersionV1.0.0*@Date2021-04......
  • Redis实现分布式锁
    importredisimporttimeS_REDIS=redis.Redis(host='10.127.0.0',port='8088',db=9,password='test',decode_responses=True,retry_o......
  • redis限流和滑动窗口限流
     一、redissetnx实现限流 比如我们需要在10秒内限定20个请求,那么我们在setnx的时候可以设置过期时间为当前时间戳+10s,使用setnx设置20个互不相同的key,当请求的s......