签到成功

知道了

CNDBA社区CNDBA社区

Redis基础数据结构

2023-03-25 17:44 1052 0 原创 Redis
作者: bubble_wp

Redis 基础数据结构

Redis有五个基本的数据结构,string、list、hash、set、zset。
掌握了这基本的五种数据结构,等于掌握了Redis知识的一半。

https://www.cndba.cn/bubble_wp/article/116507

String

首先我们从基本的String谈起,string表示的是一组可变的字节数组,我们初始化字符串的内容,可以拿到字符串的长度,可以获取string的字串,可以覆盖string的字串内容,可以追加字串。https://www.cndba.cn/bubble_wp/article/116507https://www.cndba.cn/bubble_wp/article/116507

https://www.cndba.cn/bubble_wp/article/116507
https://www.cndba.cn/bubble_wp/article/116507
https://www.cndba.cn/bubble_wp/article/116507

Redis的字符串是动态字符串,是可以修改的字符串,内部结构实现上类似于Java的ArrayList,采用预分配冗余空间的方式来减少内存的频繁分配,如图中所示,内部为当前字符串实际分配的空间capacity一般要高于实际字符串长度len。当字符串长度小于1M时,扩容都是加倍现有的空间,如果超过1M,扩容时一次只会多扩1M的空间。需要注意的是字符串最大长度为512M。https://www.cndba.cn/bubble_wp/article/116507https://www.cndba.cn/bubble_wp/article/116507

初始化字符串 需要提供<变量名称>和<变量内容>
127.0.0.1:6379> set mystr1 today.is.happy.day
OK
获取字符串的内容 提供<变量名称>
127.0.0.1:6379> get mystr1
"today.is.happy.day"
获取字符串的长度
127.0.0.1:6379> STRLEN mystr1
(integer) 18
获取子串 提供<变量名称>和<起始>和<结束>位置
127.0.0.1:6379> getrange mystr1  9 100
"happy.day"
覆盖字串 提供<变量名称>和<字串开始位置>和<字符串>
127.0.0.1:6379> setrange mystr1 18 .too
(integer) 22
127.0.0.1:6379> get mystr1
"today.is.happy.day.too"
追加子串 提供<变量名称>和<添加的字符串>
127.0.0.1:6379> append mystr1 ;yes
(integer) 26
127.0.0.1:6379> get mystr1
"today.is.happy.day.too;yes"
127.0.0.1:6379>

遗憾的是字符串没有提供字串插入方法和子串删除方法。https://www.cndba.cn/bubble_wp/article/116507

https://www.cndba.cn/bubble_wp/article/116507

计数器 如果字符串的变量内容为整数,那么可以把字符串当作计数器使用
127.0.0.1:6379> set mycalculater 10
OK
127.0.0.1:6379> incrby mycalculater 30
(integer) 40
127.0.0.1:6379> decrby mycalculater 10
(integer) 30
127.0.0.1:6379> incrby mycalculater 1
(integer) 31
127.0.0.1:6379> decrby mycalculater 3
(integer) 28
127.0.0.1:6379> incr mycalculater
(integer) 29
127.0.0.1:6379> incr mycalculater
(integer) 30
127.0.0.1:6379> decr mycalculater
(integer) 29
127.0.0.1:6379> decr mycalculater
(integer) 28
127.0.0.1:6379>
计数器是有范围的,它不能超过Long.Max,不能低于Long.MIN
127.0.0.1:6379> set mycalc  9223372036854775807
OK
127.0.0.1:6379> incr mycalc
(error) ERR increment or decrement would overflow
127.0.0.1:6379> set mycalc_min  -9223372036854775807
OK
127.0.0.1:6379> decr mycalc_min
(integer) -9223372036854775808
127.0.0.1:6379> decr mycalc_min
(error) ERR increment or decrement would overflow
127.0.0.1:6379>
过期和删除 字符串可以使用del指令进行主动删除,可以使用expire指令设置过期时间,到点会自动删除,这属于被动删除。可以使用ttl指令获取字符串的寿命。
127.0.0.1:6379> set mystr2 7s_life
OK
127.0.0.1:6379> expire mystr2  7
(integer) 1
127.0.0.1:6379> ttl mystr2
(integer) 4
127.0.0.1:6379> ttl mystr2
(integer) 2
127.0.0.1:6379> ttl mystr2
(integer) 1
127.0.0.1:6379> ttl mystr2
(integer) -2
127.0.0.1:6379> ttl mystr2
(integer) -2
127.0.0.1:6379> ttl mystr2
(integer) -2
127.0.0.1:6379> get mystr2
(nil)
127.0.0.1:6379>

127.0.0.1:6379> set mystr2 7s_life
OK
127.0.0.1:6379> del mystr2
(integer) 1
127.0.0.1:6379> get mystr2
(nil)
127.0.0.1:6379>

版权声明:本文为博主原创文章,未经博主允许不得转载。

用户评论
* 以下用户言论只代表其个人观点,不代表CNDBA社区的观点或立场
bubble_wp

bubble_wp

关注
  • 1
    原创
  • 0
    翻译
  • 0
    转载
  • 0
    评论
  • 访问:1053次
  • 积分:6
  • 等级:注册会员
  • 排名:第165名
精华文章
    热门文章
      Copyright © 2016 All Rights Reserved. Powered by CNDBA · 皖ICP备2022006297号-1·

      QQ交流群

      注册联系QQ