redis的基本数据类型

        redis有5中数据结构,分别是String,List,Hash,Set,Zset。都是使用key-value的形式进行存储。数据类型的不同在使用中就体现在value的数据格式不同。

        String:

                字符串类型,是redis中最简单的数据类型使用key-value的形式,根据key来获取相对应的value。String类型可以满足绝大多数业务场景,比如jpg图片,或者对象序列化之后的数据。

                在redis中String采用预分配冗余空间来减少内存空间的频繁分配,内部分配的空间一般要高于当前字符串的length。当字符串长度小于1M是,每次扩容都是成倍的扩容。当大于1M时,扩容只会扩容1倍的空间。字符串的最大长度时512M。

        List:

                redis的List相当于Java语言中的LinkedList,是一个双向列表。当如用该数据类型时插入和删除元素都很快。当最后一个元素被弹出时,该结构自动删除,释放内存空间。

        Hash:

                hash结构可以用来存储对象的实体。不同与字符串一样需要全部序列化整个对象,hash可以单独存储对象的某个字段数据,这样当我们需要某部分数据时,只需要单独获取,不需要获取整个对象的数据。数据量的大小会影响网络IO的效率,在实际业务场景中我们也需要关注网络IO。但是hash所占用的存储空间要大于String,开发中要结合实际运用。

                hash有两种数据结构,ziplist和dict。如果hash所保存的键和值都小于64字节,且元素个数小于512则使用ziplist,其他情况使用dict。dict是hash表的高性能实现,他采用开放寻址法作为冲突的解决方案。

                开放寻址法:是一种解决hash冲突的方法,如果表中的一个位置被占用,他会去遍历寻找下一个可用的空槽。             

        Set:   

                无序的,元素不可重复的集合。可以理解为Java中的set集合。和List结构相同的一点是当最后一个元素弹出,他会自动删除,释放内存空间。底层使用了两种数据结构存储,intset和dict,如果元素少于默认值512使用intset,其他情况则使用dict。

        ZSet:

                有序的,元素不可重复。具体参考我的另一篇博文zset的实现原理-CSDN博客

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值