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数据结构及使用场景相关推荐

  1. 玩玩Redis系列(八)--redis数据结构及使用场景

    redis数据结构及使用场景 数据结构 String 相关命令 使用场景 List 相关命令 使用场景 Set 相关命令 使用场景 Hash 相关命令 使用场景 ZSet 相关命令 使用场景 Hype ...

  2. 【带你重拾Redis】Redis数据结构及使用场景

    Redis数据结构 Redis有着非常丰富的数据结构,这些数据结构可以满足非常多的应用场景, 如果对这些数据结构有一个比较清晰的认知,使用Redis也会更加得心应手. Redis主要支持以下数据结构: ...

  3. Redis数据结构Hash应用场景-存储商品、购物车、淘宝短链接、分布式Session、用户注册、发微博功能

    Hash应用场景 Hash Hash应用场景 redis存储java对象常用String,那为什么还要用hash来存储? SpringBoot+redis+hash存储商品数据 短链接 场景1:淘宝短 ...

  4. Redis数据结构Set应用场景--黑名单校验器、京东与支付宝抽奖、微博榜单与QQ群的随机展示、帖子点赞、关注与粉丝、微关系计算、HyperLogLog的入门使用

    Set应用场景 set命令使用 淘宝黑名单 一.黑名单过滤器业务场景分析 二 .解决的技术方案 三.SpringBoot+redis模仿实现校验器 京东京豆抽奖 一.京东京豆抽奖的业务场景分析 二.京 ...

  5. redis数据结构及其应用场景

    redis 五大数据结构 redis中存储数据是以key-value的形式去存储的,其中key为String字符串类型,value的数据类型有string.hash.list.set.zset等这五种 ...

  6. Redis专题-底层数据结构与使用场景

    Redis介绍 Redis是一种基于键值对的NoSQL数据库,是一个基于内存中的数据结构存储系统,可以用作数据库.缓存和消息中间件.它支持以string(字符串),hash(哈希),list(列表), ...

  7. redis 获取所有的key_在微博微信场景下学习Redis数据结构

    Redis安装 下载地址:http://redis.io/download安装步骤:1.yum install gcc2.wget http://download.redis.io/releases/ ...

  8. 【面试经典】redis 常见数据结构以及使用场景分析

    1.String 常用命令: set,get,decr,incr,mget 等. String数据结构是简单的key-value类型,value其实不仅可以是String,也可以是数字. 常规key- ...

  9. list redis 怎样做排行_Redis中5种数据结构的使用场景介绍

    一.redis 数据结构使用场景 原来看过 redisbook 这本书,对 redis 的基本功能都已经熟悉了,从上周开始看 redis 的源码.目前目标是吃透 redis 的数据结构.我们都知道,在 ...

最新文章

  1. linux网络编程-posix信号量与互斥锁(39)
  2. java 中的gc方法
  3. 利用Servlet实现用户永久登录
  4. 解决RHEL sendmail服务启动慢
  5. 使用函数求最大公约数 pta_高中数学选修教材2-导数第6课时《函数的单调性与导数》教学设计...
  6. nginx反向代理获取用户真实ip
  7. Spring Framework 官方文档学习(三)之Resource
  8. mysql5.7下载中文版_mysql5.7正式版下载
  9. 2018华为数通技术大赛复赛拓扑具体配置
  10. 微信的9个隐藏功能,我不允许还有人不知道!
  11. 华中科技大学伍冬睿教授团队关于生理计算中的对抗攻击与防御综述
  12. j2sdkversion-doc.zip下载地址
  13. 联想F360移动硬盘拆解
  14. linux 系统基本设置
  15. php依赖注入框架pimple中文文档
  16. 迁移学习——Balanced Distribution Adaptation for Transfer Learning
  17. 这个英文语法校正插件很赞!可以校正邮件,也可以校正论文
  18. 查看mysql端口 windows_Windows运维之windows下如何查看和修改MySQL的端口号
  19. VS软件评估期已过不能使用的解决方法
  20. kettle入门(二) 之 kettle连接oracle报的坑爹错误 Error occured while trying to connect to the database 的几种情况

热门文章

  1. AC9560网卡等类似驱动无法正常启动解决方法
  2. 鸿蒙之境的称号,神都夜行录鸿蒙之境全关卡阵容配置汇总
  3. Solidify实现一个智能合约11(结构体)
  4. 多线程教程(二十四)CAS+volatile
  5. 【王道】计算机网络物理层(一)
  6. LINUX DHCP客户端配置及测试
  7. js微信抢红包脚本代码_JavaScript语言基于AutoJs简易微信抢红包参考大佬修改
  8. 计算机专业打游戏哪个笔记本好,打游戏的笔记本电脑推荐_2020最强悍的游戏笔记本...
  9. Java第三课:电脑软件及快捷键应用
  10. 垃圾就该呆在垃圾桶里!!