篇幅有限
完整内容及源码关注公众号:ReverseCode,发送 冲
基本数据类型
Redis作为内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。它的 value支持多种类型的数据结构,基本数据结构包含:字符串( strings)、散列( hashes)、列表(ists)、集合(sets)、有序集合( sorted sets)五种。这五种数据结构在我们工作中经常使用到,面试过程中经常被问到,因此熟练掌握这5种基本数据结构的使用和应用场景是Redis知识最基础也是最重要的部分。
共同好友:set
用户积分排行榜:sorted set
feed流:list
…
字符串
类型介绍
字符串是 Redis最简单的储存类型,它存储的值可以是字符串、整数或者浮点数,对整个字符串或者字符串的其中一部分执行操作;对整数或者浮点数执行自增( increment)或者自减( decrement)操作。
Redis的字符串是一个由字节组成的序列,跟java里面的 ArrayList有点类似,采用预分配冗余空间的方式来减少内存的频繁分配,内部为当前字符串实际分配的空间 capacity一般要高于实际字符串长度len。当字符串长度小于1M时,扩容都是加倍现有的空间,如果超过1M,扩容时一次只会多扩1M的空间。需要注意的是字符串最大长度为512M。
应用场景
字符串类型在工作中使用广泛,主要用于不怎么更改但频繁查询的缓存数据,提高査询性能。比如存储登录用户信息、电商中存储商品信息、可以做计数器(想知道什么时候封锁一个IP地址(访问超过几次))等等。
1 | set username onejane |
散列
散列相当于Java中的 HashMap,内部是无序字典。实现原理跟 HashMap一致。一个哈希表有多个节点,每个节点保存一个键值对。
与Java中的 HashMap不同的是, rehash的方式不一样,因为Java的 HashMap在字典很大时, rehash是个耗时的操作,需要次性全部 rehash。 Redis为了高性能,不能堵塞服务,所以采用了渐进式 rehash策略。
渐进式 rehash会在 rehash的同时,保留新旧两个hash结构,查询时会同时查询两个hash结构,然后在后续的定时任务中以及hash操作指令中,循序渐进地将旧hash的内容一点点迁移到新的hash结构中。当搬迁完成了,就会使用新的hash结。构取而代之
当hash移除了最后一个元素之后,该数据结构自动被删除,内存被回收。