我是靠谱客的博主 玩命饼干,最近开发中收集的这篇文章主要介绍redis数据结构及使用场景,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

redis数据结构及使用场景

1、字符串(String)
String是最常用的一种数据类型,普通的k/v存储都可以归为此类。redis是使用C语言开发,但C中并没有字符串类型,只能使用指针或符数组的形式表示一个字符串,所以redis设计了一种简单动态字符串(SDS)作为底实现。

SDS对象,此对象中包含三个属性:

  1. len buf中已经占有的长度(表示此字符串的实际长度)
  2. free buf中未使用的缓冲区长度
  3. buf[] 实际保存字符串数据的地方

特性:
空间分配原则:当len小于IMB(1024*1024)时增加字符串分配空间大小为原来的2倍,当len大于等于1M时每次分配 额外多分配1M的空间。
所以取字符串的长度的时间复杂度为O(1),高效的计算字符串长度
二进制安全的

Java中对redis的字符串操作

	redisTemplate.opsForValue();//操作字符串

redis字符串的使用场景
value其实不仅可以是String,也可以是数字。 常规key-value缓存应用。常规计数:微博数,粉丝数等

2、列表(List)
redis对键表的结构支持使得它在键值存储的世界中独树一帜,一个列表结构可以有序地存储多个字符串.。列表是使用ziplist和linkedlist实现的。

ziplist的结构
由表头和N个entry节点和压缩列表尾部标识符zlend组成的一个连续的内存块。然后通过一系列的编码规则,提高内存的利用率,主要用于存储整数和比较短的字符串。具有数组的优缺点。

linkedlist的结构
一个双向链表,和普通的链表定义相同,每个entry包含向前向后的指针,当插入或删除元素的时候,只需要对此元素前后指针操作即可

Java中对redis的list操作

	redisTemplate.opsForList();//操作list

redis列表(List)的使用场景
Redis list 的应用场景非常多,也是Redis最重要的数据结构之一,

  1. 比如微博的关注列表,粉丝列表,消息列表等功能都可以用Redis的 list 结构来实现。
  2. 另外可以通过 lrange 命令,就是从某个元素开始读取多少个元素,可以基于 list 实现分页查询,基于 redis 实现简单的高性能分页,可以做类似微博那种下拉不断分页的东西(一页一页的往下走)。

3、哈希(hash)
hash 是一个 string 类型的 field 和 value 的映射表,hash内部存储的value为一个hashMap,并提供了直接存取这个Map成员的接口。hash 特别适合用于存储对象,后续操作的时候,你可以直接仅仅修改这个对象中的某个字段的值。

Java中对redis的hash操作

	redisTemplate.opsForHash();//操作hash

redis列表(hash)的使用场景
可以使用 hash 数据结构来存储用户信息,商品信息等对象信息。因为它的底层是以hashMap存储的,所以查找效率很快。

4、集合(Set)
set 对外提供的功能与list类似是一个列表的功能,redis的集合和列表都可以存储多个字符串,它们之间的不同在于,列表可以存储多个相同的字符串,而集合则通过使用散列表(hashtable)来保证自已存储的每个字符串都是各不相同的。

并且set提供了判断某个成员是否在一个set集合内的重要接口,这个也是list所不能提供的。可以基于 set 轻易实现交集、并集、差集的操作。

Java中对redis的hash操作

	redisTemplate.opsForSet();//操作set

redis列表(Set)的使用场景
在微博应用中,可以将一个用户所有的关注人存在一个集合中,将其所有粉丝存在一个集合。Redis可以非常方便的实现如共同关注、共同粉丝、共同喜好等功能。这个过程也就是求交集的过程。

5、有序集合(zset)
有序集合和散列一样,都用于存储键值对:有序集合的键被称为成员(member),每个成员都是各不相同的。有序集合的值则被称为分值(score),分值必须为浮点数。有序集合是redis里面唯一一个既可以根据成员访问元素(这一点和散列一样),又可以根据分值以及分值的排列顺序访问元素的结构。

Java中对redis的hash操作

redisTemplate.opsForZSet();//操作有序set

redis列表(zset)的使用场景
在直播系统中,实时排行信息包含直播间在线用户列表,各种礼物排行榜,弹幕消息(可以理解为按消息维度的消息排行榜)等信息,适合使用 Redis 中的 Sorted Set 结构进行存储。

最后

以上就是玩命饼干为你收集整理的redis数据结构及使用场景的全部内容,希望文章能够帮你解决redis数据结构及使用场景所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部