Redis(01)-数据结构

Redis 支持的五种存储数据的类型

字符串(String)类型

字符串是Redis支持的最简单的数据结构,内部就是一组字符数组,使用字符串存储数据结构的时候使用的是KV结构的存储方式

  • Redis的字符串是内部使用的是动态字符串,内部结构类似与Java的ArrayList
  • Redis的字符串空间分配采用预分配的冗余空间的方式,减少内存的频繁操作
    • 使用的内存空间如果小于1MB,则扩容空间加倍
    • 使用的空间大于1MB,则一次性多扩容1MB(最大长度512MB)
  • 如果使用的value是一个整数,还可以对他使用incr进行自增操作,范围在signed long之间,超出报错

使用场景:可以使用redis中incr进行统计网页的PV:针对每个网页的地址为key,value进行页面的incr

列表(list)类型

Redis列表相当于Java中的LinkedList,所以是更新快,查询慢。在实际场景中Redis的列表结构尝尝用于作为异步队列来使用

  • 使用rpush 和 rpop来对列表进行插入和读取操作
  • lindex相当于Java中get(int index)方法,需要对列表进行遍历,随着index的增大效率变差
  • ltrim 可以设置区间,保留start_index 和end_index之间的值,其余删除

内部原理:redis内部不是一个简单的linkedList,而是(quickList的结构)

  • 在列表元素较少的时候,使用一个连续内存空间zipList
  • 在列表元素较多的时候,考虑到链表的附加空间相对太高,prev 和 next 指针就要占去 16 个字节 (64bit 系统的指针是 8 个字节),另外每个节点的内存都是单独分配,会加剧内存的碎片化,影响内存管理效率,便是用quicklist

字典(hash)类型

Redis的字典相当于Java中的HashMap,也是基于数组加链表的二维结构实现的

  • Redis的字典值只能是字符串
  • 在rehash的时候,为了不堵塞服务,会保留两个版本的hash结构(类似于Java的CopyOnWriteArraylist)
    • 查询的时候会轮序的查询两个hash表结构
    • 后期的定时任务中,循序渐进的将旧的hash迁移到新的上来
  • hash结构中单个key也可以进行计数,使用hincrby 和incr的使用方法基本一样

集合(set)类型

Redis的集合相当于Java中的HashSet,它的内部键值对是无序,唯一的:

  • 字典中所有的value都默认是一个NULL
  • 当集合最后一个元素被移除之后,数据结构删除,内存收回

使用场景:

  • 因为数据是唯一的,可以用来存储中奖用户的ID,防止重复中奖
  • 可以使用统计UV,使用请求的用户ID为key(该场景适用于用户量不大的场景)

有序列表(zset)

Redis的zset 相当于Java中的SortedSet 和HashMap 的结合,一方面它是一个set,另一方面它为每个value赋了一个score的值,代表这个value的排序权重


  • zset中可以用来存储学生成绩,value值是学生ID,score是考试成绩

通用规则

容器型数据结构(list,set,hash,zset)都共享一下两条规则

  • 如果容器不存在,则使用例如rpush这种操作命令时,会直接创建
  • 如果容器中没有数据了,则立即删除容器,释放内存空间

过期时间

  • hash结构的过期是整个对象的过期时间,而不是某个key的过期时间
  • 使用set命令的时候,会覆盖上一次的过期时间
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,839评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,543评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,116评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,371评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,384评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,111评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,416评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,053评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,558评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,007评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,117评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,756评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,324评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,315评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,539评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,578评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,877评论 2 345