本文主要是介绍Redis_九大数据类型,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1.String 2.Hash 3.Set 4.Zset 5.BitMaps 6.Hyperlogloss 7.Streams 8.Bloom FIlter数据结构 9.
1.String-键值对类型
- Redis存储的时候主动加序列化
- 使用场景:1.Session 客户端>Nginx>WEB多个>Redis(共享内存)
- 2.自增和自减,网站请求点赞评论数量等 大型网站不可能每次请求数据库,所以用redis操作内存,之后做个数据刷盘,把统计数据当道硬盘中
- string底层数据结构:在功能中,除了上面场景,否则别使用string 因为会浪费大量内存空间,(只针对数值类型,int不包括,只有整型才是int类型)
- 为什么会浪费内存空间:
- RAW编码:实际代表的就是用一种什么方式去开辟内存空间,而String的Raw编码 当你存60个字节的时候 就会给你开辟100个字节的空间 所以string底层会浪费大量数据空间
- embstr编码:如果操作Redis的时候,内容长度小于<=44字节 会自动选择embstr编码开辟空间,如果大于44字节 会使用RAW编码浪费空间
- 验证:
2.Hash
- 官网推荐使用的数据类型,1个大key,然后就是key value 下面是hask,内存结构
- 使用场景:用户信息(有name,address,iphone等)
- Hash底层数据结构:
- zipList:(压缩版的List,每个元素的内存空间一样,假如每个内存空间都是100字节,第1个元素10字节,第二个100字节,第三个20字节,浪费大量空间),而zipList是自动适应内存空间的, 第1个元素10字节,那么存储的内存空间就是10字节,都是在内存空间开辟一连串的空间,只不过zip会自动适应内存空间,但也有问题:每次要插入值的时候,要开辟新的大空间把原先的迁移过来,把新值插入进去,所以每次新值内容,就要开辟一次新的空间。查询的时候,要重头来计算前面的空间大小,所以查询速度变慢了。
- hash:时间复杂度O(1),数组+链表形式,快速查询结果而且节省空间,但是问题就来了
- 如果链表越长复杂度就越高 怎么解决:Redis存哈希会存两个哈希 相当于人提两个桶,一个是有数据的,1个是空的,当你左边桶快满的时候,就开始使用到右边的桶了,左桶往右桶给数据。这里又牵扯到数据迁移的问题,redis再进行左桶往右桶给东西,是每一次操作只给1部分,然后还有个后台任务再跑。迁移过程中如果第二个快满了,就继续增加第一个的桶的空间 所以官网才推荐使用hash
3.Set
4.Zset
5.BitMaps
6.Hyperlogloss
7.Streams
8.Bloom FIlter数据结构
9.
这篇关于Redis_九大数据类型的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!