【Redis-高效的NoSQL数据库】Redis常用的五大类型

Redis-高效的NoSQL数据库之Redis常用的五大类型



前言

Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,zset,hash等数据结构的存储,还支持数据的备份,即master-slave模式的数据备份,同样Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。


Redis支持的五大数据类型:

1. String(字符串 用法: 键 值),
2. Hash(哈希 类似Java中的 map 用法: 键 键值对),
3. List(列表 用法:键 集合 不可以重复),
4. Set(集合 用法:键 集合 可以重复),
5. Zset(sorted set 有序集合 用法: 键 值 值)

一、String(字符串)

string 是 redis 最基本的类型,一个 key 对应一个 value。string 类型是二进制安全的。就是 redis 的 string 可以包含任何数据。比如jpg图片或者序列化的对象。string 类型的值最大能存储 512MB。

应用场景:
String是最常用的一种数据类型,普通的key/value存储都可以归为此类,value其实不仅是String,
也可以是数字。

二、Hash(哈希)

Redis的 hash 是一个键值(key=>value)对集合。是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。

应用场景:
存储、读取、修改用户属性。
简单举个实例来描述下Hash的应用场景,比如我们要存储一个用户信息对象数据,包含以下信息: 用户ID,为查找的key,存储的value为用户对象包含姓名name,年龄age,生日birthday 等信息, 如果用普通的key/value结构来存储,主要有以下2种存储方式:

​ 第一种方式将用户ID作为查找key,把其他信息封装成一个对象以序列化的方式存储,

​ 如:set u001 “王,30,19940101”

​ 这种方式的缺点是,增加了序列化/反序列化的开销,并且在需要修改其中一项信息时,需要把整个对象取回,并且修改操作需要对并发进行保护,引入CAS等复杂问题。

​ 第二种方法是这个用户信息对象有多少成员就存成多少个key-value对儿,用用户ID+对应属性的名称作为唯一标识来取得对应属性的值,

​ 如:mset user:001:name "王 "user:001:age:30 user:001:birthday “19940101” 虽然省去了序列化开销和并发问题,但是用户ID为重复存储,如果存在大量这样的数据,内存浪费还是非常大的。

​ 那么Redis提供的Hash很好的解决了这个问题。

三、List(列表)

Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。

应用场景:
Redis list的应用场景非常多,也是Redis最重要的数据结构之一。
我们可以轻松地实现最新消息排行等功能。
Lists的另一个应用就是消息队列,可以利用Lists的PUSH操作,将任务存在Lists中,然后工作线程再用POP操作将任务取出进行执行。

四、Set(集合)

Redis的Set是string类型的无序集合。

应用场景:
1.共同好友
2. 利用唯一性,可以统计访问网站的所有独立 IP
Redis set对外提供的功能与list类似是一个列表的功能,特殊之处在于set是可以自动排重的,当你需要存储一个列表数据,又不希望出现重复数据时,set是一个很好的选择,并且set提供了判断某个成员是否在一个set集合内的重要接口,这个也是list所不能提供的。

比如在微博应用中,每个人的好友存在一个集合(set)中,这样求两个人的共同好友的操作,可能就只需要用求交集命令即可。

Redis还为set集合提供了求交集、并集、差集等操作,可以非常方便的实现。

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

五、zset(sorted set:有序集合)

Redis zset 和 set 一样也是string类型元素的集合,且不允许有重复的成员。不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。zset的成员是唯一的,但分数(score)却可以重复。

应用场景:
1.带有权重的元素,比如一个游戏的用户得分排行榜
2.比较复杂的数据结构,一般用到的场景并太多

  • 21
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值