细说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可以删除所有内容’的场景。例如一个商品有很多规格,规格里面有不同的值。
上面的例子表示成下面的图:

如果需要删除商品时,可以一次性删除‘商品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使用场景
如保存一些标签的名字。标签的名字不可以重复,顺序是可以无序的。
如下面:

需要注意的是使用set一定不要存储大量的数据。value的值不宜过大,并且集合数量不宜过大。几百个集合的值,value不超过1MB为佳。
sortset介绍
sortset在redis中是有序的,并且不能重复。既有list的有序,又有set的不可重复性。
sortset使用场景
sortset的使用场景一般是排行榜之类的场景。

sortset需要注意的地方与上面的set一致。
hyperloglog介绍
hyperloglog,使用得不多。hyperloglog从创建一开始存储12KB的容量。
hyperloglog使用场景
一般用于统计使用,例如统计页面PV/UV等数据。
GEO介绍
GEO,使用得也不多。用于处理地理位置的信息。
GEO使用场景
在redis中,GEO可以保存地理位置的信息,并且可以计算地理位置的距离等。场景就在于使用地理位置时,并且需要计算,快速的场景,可使用。
可以关注本人的公众号,多年经验的原创文章共享给大家。

细说Redis(一)之 Redis的数据结构与应用场景的更多相关文章
- Redis中5种数据结构的使用场景介绍
转载于:http://www.itxuexiwang.com/a/shujukujishu/redis/2016/0216/108.html?1455861435 一.redis 数据结构使用场景 原 ...
- Redis系统学习 二、数据结构
一.字符串 1.在Redis里,字符串是最基本的数据结构.当你在思索着关键字-值对时,你就是在死锁着字符串数据结构.不要被名字给搞混了. 常见实例: set users:leto " ...
- Redis中5种数据结构的使用场景
一.redis 数据结构使用场景 原来看过 redisbook 这本书,对 redis 的基本功能都已经熟悉了,从上周开始看 redis 的源码.目前目标是吃透 redis 的数据结构.我们都知道,在 ...
- 深入剖析Redis系列:Redis数据结构与全局命令概述
前言 Redis 提供了 5 种数据结构.理解每种数据结构的特点,对于 Redis 的 开发运维 非常重要,同时掌握 Redis 的 单线程命令处理 机制,会使 数据结构 和 命令 的选择事半功倍. ...
- Redis数据结构以及应用场景
1. Redis数据结构以及应用场景 1.1. Memcache VS Redis 1.1.1. 选Memcache理由 系统业务以KV的缓存为主,数据量.并发业务量大,memcache较为合适 me ...
- Redis 中 5 种数据结构的使用场景介绍
这篇文章主要介绍了Redis中5种数据结构的使用场景介绍,本文对Redis中的5种数据类型String.Hash.List.Set.Sorted Set做了讲解,需要的朋友可以参考下 一.redis ...
- 2017-4-20/Redis的数据结构及应用场景
1. 谈谈你对redis的理解,它的应用场景. Redis是一个key-value存储系统,它支持存储的value类型包括string字符串.list链表.set集合.sorted Set有序集合和h ...
- redis的5种数据结构的使用场景介绍
一.redis 数据结构使用场景 原来看过 redisbook 这本书,对 redis 的基本功能都已经熟悉了,从上周开始看 redis 的源码.目前目标是吃透 redis 的数据结构.我们都知道,在 ...
- Redis学习笔记之Redis中5种数据结构的使用场景介绍
原来看过 redisbook 这本书,对 redis 的基本功能都已经熟悉了,从上周开始看 redis 的源码.目前目标是吃透 redis 的数据结构.我们都知道,在 redis 中一共有5种数据结构 ...
随机推荐
- # 2019-2020.3 《java程序设计》第一周学习总结
2019-2020-3 <Java 程序设计>第一周学习总结 在本周的学习中,学习到了好多也收获了好多,从最基础的安装虚拟机开始,根据老师的博客中的教程一步一步的进行,在这过程中也遇到了好 ...
- Linux 第五天
网络命令 1)write 给在线用户发信息(需按Crtl+D保存结束,w命令可看在线用户) 语法:write 用户名 2)wall 发广播信息 英文原意:write all 语法:wall 信息 3) ...
- ABP框架系列之三十八:(NHibernate-Integration-NHibernate-集成)
ASP.NET Boilerplate can work with any O/RM framework. It has built-in integration with NHibernate. T ...
- R语言csv与txt文本读入区分(sep参数)
R语言csv与txt文本读入区分 R语言用来处理数据很方便,而处理数据的第一步是把数据读入内存空间,平时最常用的文本数据储存格式有两种: 一种是CSV(逗号分隔符文本)另一种是TXT(Tab分隔符或空 ...
- 程序中使用now()函数对性能的影响
这两天从某平台的慢查询日志中发现了一些很简单的,原本执行时间在0.01-0.03s的SQL,慢查询日志中记录的执行时间在2s左右. 排查后发现,表设计及索引建设均没有什么问题.但是SQL语句中使用了n ...
- PMP:1.引论
全球项目管理业界定义的最重要的价值 观是责任.尊重.公正和诚实(成功准则). 项目是为创造独特的产品.服务或成果而进行的临时性工作: 开展项目是为了通过可交付成果达成目标.目标指的是工作所指向 ...
- Python自动化开发 - MySQL(一)
本节内容 一.概述 二.下载安装 三.数据库操作 四.数据表操作 五.表内容操作 一.概述 1.什么是数据库 ? 答:数据的仓库,如:在ATM的示例中我们创建了一个 db 目录,称其为数据库 2.什么 ...
- Jenkins内置环境变量的使用
一.查看Jenkins有哪些环境变量 1.新建任意一个job 2.增加构建步骤:Execute shell 或 Execute Windows batch command 3.点击输入框下方的“可用环 ...
- Linux pwn入门教程(6)——格式化字符串漏洞
作者:Tangerine@SAINTSEC 0x00 printf函数中的漏洞 printf函数族是一个在C编程中比较常用的函数族.通常来说,我们会使用printf([格式化字符串],参数)的形式来进 ...
- [CocoaPods]入门
什么是CocoaPods? CocoaPods管理Xcode项目的库依赖项. 项目的依赖项在名为Podfile的单个文本文件中指定.CocoaPods将解析库之间的依赖关系,获取生成的源代码,然后在X ...