企业门户网站建设/线上营销推广方法
redis有5种常用的数据结构:
String:字符串
list:有序可重复集合
hash:字典
set:无序不可重复集合
sortedSet:有序不可重复集合
一.String(字符串)
redis中的String是可以修改的,也叫动态字符串(Simple Dynamic String,SDS)。String数据结构是键值对类型,其中值可以是数字或者字符串。
SDS机制
SDS是redis底层c维护的一个结构体
struct sds{T capacity; // 数组容量T len; // 实际长度byte flags; // 标志位,低三位表示类型byte[] contents; // 数组内容
}
对于SDS之所以叫动态扩容的能力,第一次分配时并不会分配多余的空间。字符串的分配机制:
每次扩容前会根据剩余容量判断内存是否够用,不够用则扩容。
当扩容后字符串的长度小于1MB时,每次扩容后分配自身长度;
当扩容后字符串的长度大于1MB时,每次扩容分配1MB的空间。
二.list(有序列表)
redis中的list是一种链表结构,list的插入和删除时间复杂度为O(1),插入和删除时不需要移动数据,只用改变节点的指针。
应用场景:
1.消息队列:lpop和rpush或者lpush和rpop实现队列功能。
2.排行榜:。
三.hash(字典)
redis中的hash和Java中的HashMap类似,都是数据+链表,但是redis中的hash发生hash碰撞时会将元素追加到链表上,在redis中hash的value只能是字符串。
应用场景:
1.存储对象:存储用户信息,商品信息等对象。
四.set(无序不可重复集合)
底层由一个字典实现,但是每个字典的value为空null,当集合最后一个元素被移除,数据结构自动被删除,内存被回收。
应用场景:
1.共同好友。
2.利用不可重复性,统计访问网站的所有ip。
五.sortedSet(有序可重复集合)
sortedSet给每个value赋予一个score,代表每个value的排序权重,底层实现由跳表维护。
应用场景:
1.排行榜。
2.排序:对学生成绩排序,value是学生的id,score是分数。