redis对象与数据结构

redis有5种对象:字符串对象,列表对象,哈希对象,集合对象,有序集合对象。每种对象底层都有2种及2种以上的数据结构实现。使用type命令可查看对象类型,object encoding查看底层数据结构。

字符串对象由整数int,raw字符串(字符串较长),embstr字符串实现(字符串较短)。

列表对象由压缩列表或链表实现。

哈希对象由压缩列表和哈希表实现。

集合对象由整数集合和哈希表实现。

有序集合由压缩列表或(跳表以及哈希表实现)。

压缩列表和整数集合可以理解为redis为了节省内存以及重启redis时的效率而开发,在redis.conf文件中可以配置何时使用哪种数据类型,一般在数据量比较小的时候使用压缩列表和整数集合数据类型,生成环境开发我们可以忽略它们。

1,哈希对象和集合对象的区别

在数据量很大的时候,底层的实现其实都是哈希表,区别在于用法上,哈希对象hset可以设置value,而sadd只设置key就可以,比如在判断用于是否存在的时候可以使用sadd,例如sadd outkey uid1 uid2 .......

2,有序集合的实现

有序集合为了实现精确查找key,以及范围查找score,底层同时使用了两种数据结构:哈希表+跳表。

在使用zadd zscore这类查找key的命令时,使用的就是哈希表,时间复杂度O(1)

在使用zrangebyscore命令,需要按照score范围查找时,使用的就是跳表,时间复杂度O(logN)

这么做主要是处于查找性能的考虑,但同时一份数据,如果使用有序集合存储,其实存储了2份。

redis使用手册:http://doc.redisfans.com/

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Redis 是一个键值对数据库(key-value DB),数据库的值可以是字符串、集合、列表等多种类型的对象,而...
    吴昂_ff2d阅读 8,873评论 0 5
  • 转载:可能是目前最详细的Redis内存模型及应用解读 Redis是目前最火爆的内存数据库之一,通过在内存中读写数据...
    jwnba24阅读 3,764评论 0 4
  • 前言 Redis是目前最火爆的内存数据库之一,通过在内存中读写数据,大大提高了读写速度,可以说Redis是实现网站...
    小陈阿飞阅读 4,185评论 0 1
  • 入簡書是無意之中見一好友的分享,然後下裁注冊,擁有了自己的賬號。 手機一直時好時壞,下定決心買一台新的了。英語,五...
    86f27a0ed2f0阅读 1,293评论 0 1
  • 七天的代餐6.10-6.17完美收官,我的目标是体重瘦十斤,结果瘦了七斤,这七天六天每天两袋代餐粉,第六天是有点小...
    1e541df64afe阅读 5,259评论 0 0