Redis

104 篇文章 0 订阅
17 篇文章 0 订阅

Redis

缓存有哪些类型?
缓存是⾼并发场景下提⾼热点数据访问性能的⼀个有效⼿段,在开发项⽬时会经常使⽤到。
缓存的类型分为:本地缓存、分布式缓存和多级缓存

本地缓存:
本地缓存就是在进程的内存中进⾏缓存,⽐如在JVM 堆中,可以⽤ LRUMap 来实现,也可以使⽤Ehcache 这样的⼯具来实现。本地缓存是内存访问,没有远程交互开销,性能最好,但是受限于单机容量,⼀般缓存较⼩且⽆法扩展。
分布式缓存:
分布式缓存⼀般都具有良好的⽔平扩展能⼒,对较⼤数据量的场景也能应付⾃如。缺点就是需要进⾏远程请求,性能不如本地缓存。
多级缓存:
本地缓存只保存访问频率最⾼的部分热点数据,其他的热点数据放在分布式缓存中。为了平衡这种情况,实际业务中⼀般采⽤多级缓存。

Redis 是一种键值( Key-Value )数据库。相对于关系型数据库(比如MySQL),Redis也被叫作 非关系型 数据库。
像MySQL 这样的关系型数据库,表的结构比较复杂,会包含很多字段,可以通过SQL语句,来实现非常复杂的查询需求。而Redis中只包含“键”和“值”两部分,只能通过“键”来查询“值"。正是因为这样简单的存储结构,让Redis的读写效率非常高。Redis 主要是作为内存数据库来使用,数据是存储在内存中的。它也支持将数据存储在硬盘中。

Redis常用数据类型

string、 list、set、sorted set、hash 等。

String

数据结构特点 :key - value

String 类型是 Redis 中最常使⽤的类型,内部的实现是通过 SDS(Simple Dynamic String )来存储的。SDS 类似于 Java 中的 ArrayList,可以通过预分配冗余空间的⽅式来减少内存的频繁分配。这是最简单的类型,就是普通的 set 和 get,做简单的 KV 缓存。

实际应⽤场景
1、缓存功能:String字符串是最常⽤的数据类型,不仅仅是Redis,各个语⾔都是最基本类型,因此,利⽤Redis作为缓存,配合其它数据库作为存储层,利⽤Redis⽀持⾼并发的特点,可以⼤⼤加快系统的读写速度、以及降低后端数据库的压⼒。
2、计数器:许多系统都会使⽤Redis作为系统的实时计数器,可以快速实现计数和查询的功能。⽽且最终的数据结果可以按照特定的时间落地到数据库或者其它存储介质当中进⾏永久保存。
3、共享⽤户Session:⽤户重新刷新⼀次界⾯,可能需要访问⼀下数据进⾏重新登录,或者访问⻚⾯缓存Cookie,但是可以利⽤Redis将⽤户的Session集中管理,在这种模式只需要保证Redis的⾼可⽤,每次⽤户Session的更新和获取都可以快速完成。⼤⼤提⾼效率。

Hash

数据结构特点:key - (field-value,field2-value2…)

类似 Map 的⼀种结构,是可以将结构化的数据,⽐如⼀个对象(前提是这个对象没嵌套其他的对象)给缓存在 Redis ⾥,然后每次读写缓存的时候,可以就操作 Hash ⾥的某个字段。

实际应⽤场景
存储复杂对象

List

数据结构特点:key - value1,value2,value3…
List 是有序列表。⽐如可以通过 lrange 命令,读取某个闭区间内的元素,可以基于 List 实现分⻚查询,这个是很棒的⼀个功能,基于 Redis 实现简单的⾼性能分⻚,可以做类似微博那种下拉不断分⻚的东⻄,性能⾼,就⼀⻚⼀⻚⾛。⽐如可以搞个简单的消息队列,从 List 头怼进去,从 List 屁股那⾥弄出来。

实际应⽤场景
1、消息队列:Redis的链表结构,可以轻松实现阻塞队列,可以使⽤左进右出的命令组成来完成队列的设计。⽐如:数据的⽣产者可以通过Lpush命令从左边插⼊数据,多个数据消费者,可以使⽤BRpop命令阻塞的“抢”列表尾部的数据。⽂章列表或者数据分⻚展示的应⽤。
2、⽐如,我们常⽤的博客⽹站的⽂章列表,当⽤户量越来越多时,⽽且每⼀个⽤户都有⾃⼰的⽂章列表,⽽且当⽂章多时,都需要分⻚展示,这时可以考虑使⽤Redis的列表,列表不但有序同时还⽀持按照范围内获取元素,可以完美解决分⻚查询功能。⼤⼤提⾼查询效率。可以通过 List 存储⼀些列表型的数据结构,类似粉丝列表、⽂章的评论列表之类的东⻄。

Set

数据结构特点:key - value3,value2,value6,value4…

Set 是⽆序集合,会⾃动去重的那种。
直接基于 Set 将系统⾥需要去重的数据扔进去,⾃动就给去重了,如果你需要对⼀些数据进⾏快速的全局去重,你当然也可以基于 JVM 内存⾥的 HashSet 进⾏去重,但是如果你的某个系统部署在多台机器上呢?得基于Redis进⾏全局的 Set 去重。
可以

实际应⽤场景
基于 Set 玩⼉交集、并集、差集的操作,⽐如交集吧,可以把两个⼈的好友列表整⼀个交集,找出俩⼈的共同好友是。

Sorted Set:

数据结构特点:key - (score1 value1),(score2 value2)

Sorted set 是排序的 Set,去重但可以排序,写进去的时候给⼀个分数,⾃动根据分数排序。
有序集合的使⽤场景与集合类似,但是set集合不是⾃动有序的,⽽Sorted set可以利⽤分数进⾏成员间的排序,⽽且是插⼊时就排序好。所以当你需要⼀个有序且不重复的集合列表时,就可以选择Sorted set数据结构作为选择⽅案。

实际应⽤场景
1、排⾏榜:有序集合经典使⽤场景。例如视频⽹站需要对⽤户上传的视频做排⾏榜,榜单维护可能是多⽅⾯:按照时间、按照播放量、按照获得的赞数等。
2、⽤Sorted Sets来做带权重的队列,⽐如普通消息的score为1,重要消息的score为2,然后⼯作线程可以选择按score的倒序来获取⼯作任务。让重要的任务优先执⾏。
3、微博热搜榜,就是有个后⾯的热度值,前⾯就是名称。

Bitmap : 位图是⽀持按 bit 位来存储信息,可以⽤来实现 布隆过滤器(BloomFilter);

HyperLogLog: 供不精确的去重计数功能,⽐较适合⽤来做⼤规模数据的去重统计,例如统计 UV;

Geospatial:可以⽤来保存地理位置,并作位置距离计算或者根据半径计算位置等。使用⽤Redis来实现查找附近的⼈或者计算最优地图路径。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值