当前位置: 首页 > news >正文

细说Redis(一)之 Redis的数据结构与应用场景

细说Redis(一)之 Redis的数据结构与应用场景

这一篇文章主要介绍Redis的数据结构与应用场景

NOSQL之Redis

    Redis是一款由key-value存储的软件。说起NOSQL,有文档型、键值型、列型存储、图形数据库。其中,在简单的读写性能来说,键值型是最快的。

    Redis作为目前市面上使用最多的键值型数据存储软件,内置了多种类型的数据结构,并且提供了高可用解决方案,使用方便快捷。市面上有很多语言的库可以调用Redis服务器。

 

Redis的数据结构类型

    Redis有很多种数据结构,包括string、hash、list、set、sortset、hyperloglog、GEO。这些数据结构都可以设置键值的存在时间。

string介绍                          

    string是以一种纯字符串作为value的形式存在的。也是这几种之中使用最多的数据结构。value可以存储json格式、数值型等。

string使用场景                    

    string使用场景一般是存储简单的键值类型。比如用户信息,登录信息,配置信息等。还有一种用得比较多的是string的incr/decr操作,即自减/自增操作。调用它是原子性的,无论调用多少次,都一一计算成功。例如需要增减库存的操作。

尽管string的value可以存储很大,甚至500多MB的容量。但是在性能上来说,我们尽量存储value的值不要过1MB。

 

hash介绍                         

    hash是一个集合,使用过hash的人都知道,hash的读取性能都一样快。在redis中,hash因为是一个集合,所以有两层。第一层是key:hash集合value,第二层是hashkey:string value。所以判断是否采用hash的时候可以参照有两层key的设计来做参考。并且注意的是,设置过期时间只能在第一层的key上面设置。

hash使用场景                         

    使用hash,一般是有那种需要两层key的应用场景,也可以是‘删除一个key可以删除所有内容’的场景。例如一个商品有很多规格,规格里面有不同的值。

    上面的例子表示成下面的图:

clipboard_看图王

 

    如果需要删除商品时,可以一次性删除‘商品id’的key,则商品里面的所有规格也会删除,而不需要找到对应的规格再做处理。如果查找商品id与规格id1的商品时,则通过两个key查找即可。或者查找所有商品的规格,查找商品id即可。

    需要注意的是,经过测试,在性能上来说一般hash里面的第二层key,不要超过200个为佳。尽管hash里面的key-value能达到500多MB的存储容量。

 

list介绍                            

    list是一个集合,而在redis中,list的使用场景多种多样。在redis中,插入list中的值,只需要找到list的key即可,而不需要像hash一样插入两层的key。list是一种有序的、可重复的集合。

list使用场景                       

    list可以使用左推、左拉、右推、右拉的方式。所以你可以使用list作为集合存储,比如存储某宝商铺里面的所有商品。

    也可以用作轻量级别的队列来使用。左推左拉、右推右拉。

   需要注意的是尽管redis可以使用推拉的队列模式,但是一定要注意场景。因为redis的队列是一种轻量级别的,没有队列重试、队列重放机制。消费完队列消息在redis代表已经删除了。

消息队列之发布订阅模式           

    redis除了list的推拉队列模式之外,还有一种是发布订阅的模式。发布订阅模式有是publish/subscribe的命令。与推拉队列模式不同之处在于,订阅者可以订阅多个频道,发布者可以向指定的频道或者所有频道发送消息。

    之所以在上面的list中结束这种队列模式,主要为了对比这两种的区别。

set介绍                            

    set是一种无序的,不能重复的集合。并且在redis中,只有一个key。

set使用场景                       

    如保存一些标签的名字。标签的名字不可以重复,顺序是可以无序的。

如下面:

clipboard

 

    需要注意的是使用set一定不要存储大量的数据。value的值不宜过大,并且集合数量不宜过大。几百个集合的值,value不超过1MB为佳。

sortset介绍                    

    sortset在redis中是有序的,并且不能重复。既有list的有序,又有set的不可重复性。

sortset使用场景              

sortset的使用场景一般是排行榜之类的场景。

clipboard

    sortset需要注意的地方与上面的set一致。

 

hyperloglog介绍                 

    hyperloglog,使用得不多。hyperloglog从创建一开始存储12KB的容量。

hyperloglog使用场景          

    一般用于统计使用,例如统计页面PV/UV等数据。

 

GEO介绍                           

    GEO,使用得也不多。用于处理地理位置的信息。

GEO使用场景                   

    在redis中,GEO可以保存地理位置的信息,并且可以计算地理位置的距离等。场景就在于使用地理位置时,并且需要计算,快速的场景,可使用。

 

可以关注本人的公众号,多年经验的原创文章共享给大家。

posted on 2018-10-23 13:40 alun-chen 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/alunchen/p/9836170.html

相关文章:

  • Python变量的相互转换
  • 2018.10.23-dtoi-1770不设找零No Change (nochange)
  • 【NOIP2017D2T3】列队
  • Algs4-1.3.13判断正确的出队次序
  • Dubbo分析之Exchange层
  • QML-qmake大法
  • DreamWeaver使用小结
  • Js jquery常用的身份证号码 邮箱电话等验证
  • POI 2018.10.27
  • w3c xml
  • Jmeter----逻辑控制器(Logic Controller)
  • Selenium实战教程系列(二)---元素定位
  • Spark内置框架rpc通讯机制及RpcEnv基础设施-Spark商业环境实战
  • ZooKeeper应用——解决分布式系统单点故障
  • 扩展rocketMQ延迟等级
  • [译] 怎样写一个基础的编译器
  • Asm.js的简单介绍
  • Centos6.8 使用rpm安装mysql5.7
  • codis proxy处理流程
  • exif信息对照
  • iOS 颜色设置看我就够了
  • Java到底能干嘛?
  • Java多态
  • Making An Indicator With Pure CSS
  • MYSQL 的 IF 函数
  • Next.js之基础概念(二)
  • socket.io+express实现聊天室的思考(三)
  • spring-boot List转Page
  • Webpack 4 学习01(基础配置)
  • 闭包--闭包作用之保存(一)
  • 大主子表关联的性能优化方法
  • 检测对象或数组
  • 盘点那些不知名却常用的 Git 操作
  • 《TCP IP 详解卷1:协议》阅读笔记 - 第六章
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • 选择阿里云数据库HBase版十大理由
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • # Maven错误Error executing Maven
  • #etcd#安装时出错
  • #图像处理
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (附源码)springboot优课在线教学系统 毕业设计 081251
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路
  • (免费领源码)python+django+mysql线上兼职平台系统83320-计算机毕业设计项目选题推荐
  • (译)2019年前端性能优化清单 — 下篇
  • (转)大型网站的系统架构
  • (转载)Google Chrome调试JS
  • .\OBJ\test1.axf: Error: L6230W: Ignoring --entry command. Cannot find argumen 'Reset_Handler'
  • .bat批处理出现中文乱码的情况
  • .htaccess 强制https 单独排除某个目录
  • .NET Framework 的 bug?try-catch-when 中如果 when 语句抛出异常,程序将彻底崩溃
  • .NET LINQ 通常分 Syntax Query 和Syntax Method
  • .net oracle 连接超时_Mysql连接数据库异常汇总【必收藏】
  • .Net(C#)常用转换byte转uint32、byte转float等