企业网站建设视频,网站建设数据中心,怎么开一个平台,长垣网站建设一) 字符串(String)
1 使用场景
2 编码
3 编码转换
二) List(列表)
1 使用场景
2 编码
三) Set(无序集合)
1 使用场景
2 编码
3 编码转换
四) ZSet(有序集合)
1 使用场景
2 编码
3 编码转换
五) Hash
1 使用场景
2 编码
3 编码转换
五种基本数据类型
redis… 一) 字符串(String)
1 使用场景
2 编码
3 编码转换
二) List(列表)
1 使用场景
2 编码
三) Set(无序集合)
1 使用场景
2 编码
3 编码转换
四) ZSet(有序集合)
1 使用场景
2 编码
3 编码转换
五) Hash
1 使用场景
2 编码
3 编码转换
五种基本数据类型
redis存储任何类型的数据都是以key-value形式保存并且所有的key都是字符串所以讨论基础数据结构都是基于value的数据类型 常见的5种数据类型是String、List、Set、Zset、Hash 一) 字符串(String)
String是redis最基本的类型value最大是512MString类型是二进制安全的可以包含任何数据如jpg图片或者序列化的对象 1 使用场景
1) 缓存redis作为缓存层mysql做持久化层降低mysql的读写压力 2) 计数器redis是单线程模型一个命令执行完才会执行下一个同时数据可以一步落地到其他的数据源 3) 分布式session 4) 分布式锁 5) 限流 2 编码
String类型的编码包括 1) int编码保存用 long 类型的整数值 2) embstr编码长度小于44Byte的短字符串(redis3.2版本之前是39Byte之后是44Byte)对其进行修改后变成raw编码无论是否达到44字节 3) raw编码 长度大于44Byte的长字符串(redis3.2版本之前是39Byte之后是44Byte) 3 编码转换
1) int 编码的值不再是整数或大小超过了long类型的时自动转化为raw
2) 由于redis没有对embstr编码的值提供修改方法(embstr编码是只读的)在修改embstr编码的值时都会先转化为raw编码再进行修改修改后的对象一定是raw编码的无论是否达到了44Byte 二) List(列表)
redis中的List其实就是双端链表 使用List的技巧
lpushlpopStack(栈)
lpushrpopQueue(队列)
lpushltrimCapped Collection(有限集合)
lpushbrpopMessage Queue(消息队列) 1 使用场景
1) 简单队列发布微博用lpush加入时间轴最新消息排行展示新的列表信息 2) 消息队列PUSH 操作将任务存放在List中然后工作线程再用 POP操作将任务取出进行执行 2 编码
1) linkedlist双向链表当列表元素个数比较多或者某个元素占用空间比较大的时使用redis3 .2版本之前使用 2) ziplist压缩列表当列表元素个数比较少并且每个元素占用空间比较小时使用redis3 .2版本之前使用 3) quicklist快速列表结合了ziplist和linkedlist各自的优点redis3 .2版本开始使用 三) Set(无序集合)
redis中的Set类型是无序集合集合中成员是不可重复的 添加删除查找元素的复杂度都是 O(1) 1 使用场景
1) 标签有同一标签或者类似标签的可以给推荐关注的事或者关注的人 2) 点赞点踩收藏 2 编码
1) hashtable数据全部存储于dict的键中值字段闲置不用 2) intset集合中存储的只能是数值数据且必须是整数 3 编码转换
同时满足以下两个条件时使用intset编码否则使用hashtable编码 1) Set中所有元素都是整数 2) Set中所有元素数量不超过512M(配置文件的set-max-intset-entries参数) 四) ZSet(有序集合)
Zset类型和Set类型基本一样区别在于Zset类型是有序集合 Zset集合中的每个元素都会关联一个 double 类型的权重参数(score)使得集合中的元素能够按score进行有序排列 添加删除查找元素的复杂度都是 O(1) 1 使用场景
1) 排行榜如网站需要对用户点赞数从高到低进行排行
2) 权重分配带权重的队列如普通消息的score为1重要消息的score为2工作线程根据权重倒序获取保证重要的任务优先执行 2 编码
1) ziplist需要基于ziplist数据结构的基础做排序与去重 2) skiplist底层使用了dict与skiplist两种数据结构 单独使用dict虽然能以 O(1) 的时间复杂度查找成员但dict是无序的所以进行范围操作的时候都要进行排序 单独使用skiplist虽然能执行范围操作但是查找操作为O(logN) 因此redis使用了dict与skiplist两种数据结构来共同实现Zset既可以以O(1) 的时间复杂度查找成员又可以实现范围操作 3 编码转换
当Zset对象同时满足以下两个条件时使用 ziplist 编码否者使用 skiplist 编码 1) 保存的元素数量小于128(配置文件的zset-max-ziplist-entries参数) 2) 保存的所有元素长度都小于64Byte(配置文件的zset-max-ziplist-value参数) 五) Hash
Hash是一个key(字段) 和 value(属性) 的映射表hash 特别适合用于存储对象 一个Hash可以存多个key-value 1 使用场景
1) 缓存用户信息视频信息等 2) 用户信息 3) 用户主页访问量 4) 组合查询 2 编码
1) ziplist 2) hashtable 3 编码转换
当同时满足下面两个条件时使用ziplist编码,否则使用hashtable 编码 1) 列表保存元素个数小于512(配置文件的set-max-intset-entries参数) 2) 每个元素长度小于64Byte