Redis基本数据类型与应用场景

篇幅有限

完整内容及源码关注公众号: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
2
3
4
5
6
7
8
9
set username onejane
get username
mset age 18 address suzhou
mget username age
incr num
decr num
incrby num 2
decrby num 2
del num

散列

散列相当于Java中的 HashMap,内部是无序字典。实现原理跟 HashMap一致。一个哈希表有多个节点,每个节点保存一个键值对。
与Java中的 HashMap不同的是, rehash的方式不一样,因为Java的 HashMap在字典很大时, rehash是个耗时的操作,需要次性全部 rehash。 Redis为了高性能,不能堵塞服务,所以采用了渐进式 rehash策略。
渐进式 rehash会在 rehash的同时,保留新旧两个hash结构,查询时会同时查询两个hash结构,然后在后续的定时任务中以及hash操作指令中,循序渐进地将旧hash的内容一点点迁移到新的hash结构中。当搬迁完成了,就会使用新的hash结。构取而代之
当hash移除了最后一个元素之后,该数据结构自动被删除,内存被回收。

文章作者: J
文章链接: http://onejane.github.io/2021/05/09/Redis基本数据类型与应用场景/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 万物皆可逆向
支付宝打赏
微信打赏