hi,你好!欢迎访问本站!登录
本站由网站地图腾讯云宝塔系统阿里云强势驱动
当前位置:首页 - 教程 - 杂谈 - 正文 君子好学,自强不息!

【Redis深度历险】那些年Redis的数据结构

2019-11-18杂谈搜奇网27°c
A+ A-

Redis端口号6379的泉源

Redis的端口号是6379,但这个端口号并非随机挑选的,源于"MERZ",这个单词在手机当中的对应数字就是6379。"MERZ"在Redis作者Antirez的挚友圈当中代表愚昧的意义。

数据构造

Redis的key只能是字符串,value可所以String,Hash,List,Sorted Set(Zset)。

String

Redis的字符串是动态字符串(SDS Simple Dynamic String ),内部构造有点儿相似于java的ArrayList,都是采纳预分派来削减内存的频仍扩容。如图len是现实字符串的长度,capacity是预分派的空间(数组容量)。建立字符串时,len和capacity一样长,运用字节数组寄存内容。

struct SDS<T> {
    T capacity; // 数组容量
    T len; // 数组长度
    byte flags; // 特别标识位
    byte[] content; // 数组内容
}

  • 假如在1M之内,都是更加扩大容量
  • 假如凌驾1M则,每次扩容1M
  • 字符串的最大容量是512M

String的一些基本操纵

  • 一般get set
127.0.0.1:6379> set name amber
OK
127.0.0.1:6379> get name
"amber"
127.0.0.1:6379> exists name
(integer) 1
127.0.0.1:6379> del name
(integer) 1
127.0.0.1:6379> get name
(nil)
127.0.0.1:6379> 
  • 批量mset,mget
127.0.0.1:6379> set name amber
OK
127.0.0.1:6379> set name2 nick
OK
127.0.0.1:6379> mget name name2
1) "amber"
2) "nick"
127.0.0.1:6379> mset name3 wade name4 hellen
OK
127.0.0.1:6379> mget name name2 name3 name4
1) "amber"
2) "nick"
3) "wade"
4) "hellen"
127.0.0.1:6379> 
  • 设置逾期时刻
  1. 第一种 expire
127.0.0.1:6379> set name amber
OK
127.0.0.1:6379> expire name 5
(integer) 1
127.0.0.1:6379> get name
"amber"
//守候5s
127.0.0.1:6379> get name
(nil)
127.0.0.1:6379> 
  1. 应用setex
    setex name 时刻 value
127.0.0.1:6379> setex name 5 amber
OK
127.0.0.1:6379> get name
"amber"
127.0.0.1:6379> get name
(nil)
127.0.0.1:6379> 
  • 自增自减
127.0.0.1:6379> set age 18
OK
127.0.0.1:6379> incr age
(integer) 19
127.0.0.1:6379> incrby age 5
(integer) 24
127.0.0.1:6379> incrby age -5
(integer) 19
127.0.0.1:6379> decr age
(integer) 18
127.0.0.1:6379> 

List

Redis的list构造有点像Java中的LinkedList,但现实上地产不仅仅是简朴的linkedlist,底层是quicklist(太深入了守候作者今后进修...)

特性

list的插进去删除效力很高,时刻复杂度为O(1),然则索引的定位就很慢,即O(n)

操纵

  • 左进右出(行列)
127.0.0.1:6379> lpush names amber nick wade
(integer) 3
127.0.0.1:6379> rpop names
"amber"
127.0.0.1:6379> rpop names
"nick"
127.0.0.1:6379> rpop names
"wade"
127.0.0.1:6379> rpop names
(nil)
127.0.0.1:6379> 

固然你也能够附近左出(栈),能够本身试验一下。

  • 索引操纵
  1. lindex相当于java的get(int index)依据索引取值,然则由于要遍历链表,假如数据很大,致使开支增大
  2. ltrim key index1 index2 保存index1和index2之间的数据
127.0.0.1:6379> lpush names amber nick wade
(integer) 3
127.0.0.1:6379> lindex names 0
"wade"
127.0.0.1:6379> lindex names 1
"nick"
127.0.0.1:6379> lindex names 2
"amber"
127.0.0.1:6379> ltrim names 0 1
127.0.0.1:6379> lindex names 0
"wade"
127.0.0.1:6379> lindex names 1
"nick"
127.0.0.1:6379> lindex names 2
(nil)
127.0.0.1:6379> 

hash(散列)

Redis的hash相似java中的HashMap

特性

Redis中的Hash举行rehash时区分于java中的HashMap。
在redis举行rehash时会同时保存新旧两个构造,并在后续的定时使命当中逐步把旧的数据移动到新数据。

操纵

127.0.0.1:6379> hmset person name amber age 18
OK
127.0.0.1:6379> hgetall person
1) "name"
2) "amber"
3) "age"
4) "18"
127.0.0.1:6379> hget person name
"amber"
127.0.0.1:6379> hset person gender 1
(integer) 1
127.0.0.1:6379> hgetall person
1) "name"
2) "amber"
3) "age"
4) "18"
5) "gender"
6) "1"

set

Redis中的set相当于java中的HashSet,内部相当于完成了一个字典

特性

value唯一

操纵

127.0.0.1:6379> sadd names amber
(integer) 1
127.0.0.1:6379> sadd names amber
(integer) 0
127.0.0.1:6379> sadd names nick wade
(integer) 2
127.0.0.1:6379> smembers names
1) "amber"
2) "wade"
3) "nick"

zset(sorted set)

Redis中的zset相当于java中sorted set和HashMap的连系。在set的基本上还能够给value给予score(排序的权重)

特性

zset由于有score须要排序,然则采纳一般的链表查找销量太低。因而zst采纳层级轨制。有点相似于国度->省级->市->xxx。最底层的乡镇肯帝就是我们的L0层级了,一切的元素都串连在一起,每一个几个元素就选出市位于L2,一样的原理每隔几个L2层级的元素就选出省位于L3层级。当我们插进去新的节点的时刻,只须要从最顶层最先举行查找定位到响应位置就好了。是否是有点儿像数组的二分查找。

操纵

实在另有一些操纵,不过这里就不展现了

127.0.0.1:6379> zadd names 2 amber
(integer) 1
127.0.0.1:6379> zadd names 3 wade
(integer) 1
127.0.0.1:6379> zadd names 1 nick
(integer) 1
127.0.0.1:6379> zrange names 0 2
1) "nick"
2) "amber"
3) "wade"
127.0.0.1:6379> 

数据构造知识点拓展

  • redis的一切数据构造都能够设置时刻
1. 设置时刻
expire key 时刻
2. 检察时刻
ttl key

  选择打赏方式
微信赞助

打赏

QQ钱包

打赏

支付宝赞助

打赏

  移步手机端
【Redis深度历险】那些年Redis的数据结构

1、打开你手机的二维码扫描APP
2、扫描左则的二维码
3、点击扫描获得的网址
4、可以在手机端阅读此文章
未定义标签

本文来源:搜奇网

本文地址:https://www.sou7.cn/282288.html

关注我们:微信搜索“搜奇网”添加我为好友

版权声明: 本文仅代表作者个人观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。请记住本站网址https://www.sou7.cn/搜奇网。

发表评论

选填

必填

必填

选填

请拖动滑块解锁
>>