第六讲:Redis基本数据类型
Redis基本数据类型
redis 作为内存中的数据结构存储系统,它可以用作数据库,缓存和消息中间件。它的value支持多种类型的数据结构;
基本数据结构包含:
字符串(strings)
散列(hashes)
列表(lists)
集合(sets)
有序集合(sorted sets)
这五种数据结构在我们的工作中经常使用到,面试过程中经常被问到;因此熟练掌握这五种基本数据结构的使用和应用场景是redis的重要部分;
共同好友:通过集合sets来实现;
下单之后的积分排行榜:通过有序集合sorted sets来实现
一:字符串(strings)
1.1:类型介绍
字符串是redis 最简单的存储类型,它存储的值可以是字符串,整数或者浮点数,对整个字符串或者字符串的其中一部分执行操作,对整数或者浮点数执行自增或者自减操作;
redis的字符串是一个由字节组成的序列,采用预分配冗余空间的方式来减少内存的频繁分配,内部为当前字符串实际分配的空间,一般要高于实际字符串长度len;当字符串长度小于1M时,
扩容都是加倍现有的空间,如果超过1M,扩容时一次只会多扩1M的空间;需要注意的是字符串最大长度为512M;
1.2:应用场景
缓存层 提高查询性能 比如存储登录用户信息,电商中存储商品信息,
计数器 也要定时写到数据库中
1.3:数据操作


也可以 设置自增自减步长 和删除键值对


二:散列(hashes)
2.1:类型介绍
一个哈希表有多个节点,每个节点保存一个键值对,redis为了高性能,不堵塞服务,所以采用了渐进式rehash策略;
2.2:应用场景
对象存储 比如存储用户信息,与字符串不一样的是,字符串需要将对象进行序列化(比如json序列化)之后才能保存;而哈希则可以将用户对象 的每个字段单独存储;这样就能节省序列化和反序列化的时间;
保存用户的购买记录 比如key为用户id,field为商品id;value为商品数量;
购物车数据的存储 比如key为用户id,field为商品id,value为商品数量;
2.3:操作指令





三:列表(lists)
3.1:类型介绍
实现原理是一个双向列表(其底层是一个快速列表),即可以支持反向查找和遍历,插入和删除速度非常快,其时间复杂度为o(1),但是索引定位很慢,时间复杂度为o(n);
3.2:应用场景
实现热销榜
实现工作队列(利用lists的push操作,将任务存在lists中,然后工作线程再用pop操作将任务取出进行执行);
可以实现最新列表,比如最新评论;
3.3:操作指令


右边插入





四:集合(sets)
4.1:类型介绍
内部实现是一个value值永远为null的HashMap,实际就是通过计算hash的方式来快速重排的,这也是set能提供判断一个成员是否在集合内的原因;
4.2:应用场景
redis的sets类型是使用哈希表构造的,因此复杂度是o(1),它支持集合内的增删改查,并且支持多个集合间的交集,并集,差集等操作;可以利用这些集合操作,解决程序开发中很多集合间的问题;
比如计算网站独立ip,用户画像中的用户标签,共同好友等功能;
4.3:数据操作


添加数据的时候内部会通过哈希计算自动去重


获取里面的所有数据

移除里面的数据 srem nums 2 移除2这个值的数据,而不是第2个


随机的移除一个数据

移除完数据便不存在了(包括redis的键)


五:有序集合
5.1:类型介绍 既是一个set 也是一个map set特性是去重,map特性是每一个value都有一个score的属性,这个score属性就是权重;
5.2:应用场景
主要应用于根据某个权重进行排序的队列的场景,比如游戏积分排行榜,设置优先级的任务列表,学生成绩表等
5.3:数据操作



删除

查看还有多少个元素

统计某个区间段有多少个元素

获取某个值所在的位置



浙公网安备 33010602011771号