美文网首页我爱编程
Redis常用数据类型介绍、使用场景及其操作命令

Redis常用数据类型介绍、使用场景及其操作命令

作者: 刀刃丿 | 来源:发表于2018-05-19 13:46 被阅读0次

详细地址

Redis目前支持5种数据类型,分别是:

1 String(字符串)

2 List(列表)

3 Hash(字典)

4 Set(集合)

5 Sorted Set(有序集合)

1. String(字符串)

String是简单的 key-value 键值对,value 不仅可以是

String,也可以是数字。String在redis内部存储默认就是一个字符串,被redisObject所引用,当遇到incr,decr等操作时会转成数值型进行计算,此时redisObject的encoding字段为int。

String在redis内部存储默认就是一个字符串,被redisObject所引用,当遇到incr,decr等操作时会转成数值型进行计算,此时redisObject的encoding字段为int

2. List(列表)

Redis列表是简单的字符串列表,可以类比到C++中的std::list,简单的说就是一个链表或者说是一个队列。可以从头部或尾部向Redis列表添加元素。列表的最大长度为2^32 - 1,也即每个列表支持超过40亿个元素。

Redis list的实现为一个双向链表,即可以支持反向查找和遍历,更方便操作,不过带来了部分额外的内存开销,Redis内部的很多实现,包括发送缓冲队列等也都是用的这个数据结构。

应用场景 :Redislist的应用场景非常多,也是Redis最重要的数据结构之一,比如twitter的关注列表、粉丝列表等都可以用Redis的list结构来实现,再比如有的应用使用Redis的list类型实现一个简单的轻量级消息队列,生产者push,消费者pop/bpop。

3. Hash(字典,哈希表)

类似C#中的dict类型或者C++中的hash_map类型。

Redis Hash对应Value内部实际就是一个HashMap,实际这里会有2种不同实现,这个Hash的成员比较少时Redis为了节省内存会采用类似一维数组的方式来紧凑存储,而不会采用真正的HashMap结构,对应的value  redisObject的encoding为zipmap,当成员数量增大时会自动转成真正的HashMap,此时encoding为ht。

应用场景 :假设有多个用户及对应的用户信息,可以用来存储以用户ID为key,将用户信息序列化为比如json格式做为value进行保存。

4. Set(集合)

可以理解为一堆值不重复的列表,类似数学领域中的集合概念,且Redis也提供了针对集合的求交集、并集、差集等操作。

set 的内部实现是一个 value永远为null的HashMap,实际就是通过计算hash的方式来快速排重的,这也是set能提供判断一个成员是否在集合内的原因。

应用场景 :Redis set对外提供的功能与list类似是一个列表的功能,特殊之处在于set是可以自动排重的,当你需要存储一个列表数据,又不希望出现重复数据时,set是一个很好的选择,并且set提供了判断某个成员是否在一个set集合内的重要接口,这个也是list所不能提供的。

又或者在微博应用中,每个用户关注的人存在一个集合中,就很容易实现求两个人的共同好友功能。

5. Sorted Set(有序集合)

Redis有序集合类似Redis集合,不同的是增加了一个功能,即集合是有序的。一个有序集合的每个成员带有分数,用于进行排序。

Redis有序集合添加、删除和测试的时间复杂度均为O(1)(固定时间,无论里面包含的元素集合的数量)。列表的最大长度为2^32- 1元素(4294967295,超过40亿每个元素的集合)。

Redis sorted

set的内部使用HashMap和跳跃表(SkipList)来保证数据的存储和有序,HashMap里放的是成员到score的映射,而跳跃表里存放的是所有的成员,排序依据是HashMap里存的score,使用跳跃表的结构可以获得比较高的查找效率,并且在实现上比较简单。

使用场景: Redis sorted set的使用场景与set类似,区别是set不是自动有序的,而sorted set可以通过用户额外提供一个优先级(score)的参数来为成员排序,并且是插入有序的,即自动排序。当你需要一个有序的并且不重复的集合列表,那么可以选择sorted

set数据结构,比如twitter 的public timeline可以以发表时间作为score来存储,这样获取时就是自动按时间排好序的。

又比如用户的积分排行榜需求就可以通过有序集合实现。还有上面介绍的使用List实现轻量级的消息队列,其实也可以通过Sorted Set实现有优先级或按权重的队列。

相关文章

  • Redis学习笔记02——数据类型和操作命令

    本文主要介绍 Redis 常用的基本操作命令和数据类型操作命令,也就是 Redis 的基本使用。通过学习本文,应该...

  • Redis常用数据类型介绍、使用场景及其操作命令

    详细地址 Redis目前支持5种数据类型,分别是:1 String(字符串)2 List(列表)3 Hash(字典...

  • 04_Redis集群

    redis主题 01_Redis介绍和安装运行02_Jedis的介绍和使用03_Redis数据类型和数据操作的命令...

  • 02_Jedis的介绍和使用

    redis主题 01_Redis介绍和安装运行02_Jedis的介绍和使用03_Redis数据类型和数据操作的命令...

  • 01_Redis介绍和安装运行

    redis主题 01_Redis介绍和安装运行02_Jedis的介绍和使用03_Redis数据类型和数据操作的命令...

  • 03_Redis数据类型和数据操作的命令

    redis主题 01_Redis介绍和安装运行02_Jedis的介绍和使用03_Redis数据类型和数据操作的命令...

  • Linux知识架构_Index

    redis主题01_Redis介绍和安装运行02_Jedis的介绍和使用03_Redis数据类型和数据操作的命令0...

  • NoSQL二--Redis

    目录 一、Redis介绍二、安装Redis三、Redis 持久化四、Redis 的数据类型五、Redis常用操作六...

  • redis-scan命令

    redis-scan命令 介绍&场景 redis中找到以某某开头的key对这些key进行操作。 问题 使用keys...

  • 03 Redis命令

    为了梳理知识点,本文章仅对Redis公共的命令作记录,对数据类型的常用操作命令请查看我的 Redis数据类型 文...

网友评论

    本文标题:Redis常用数据类型介绍、使用场景及其操作命令

    本文链接:https://www.haomeiwen.com/subject/odgodftx.html