`
zhaomengsen
  • 浏览: 196954 次
  • 性别: Icon_minigender_1
  • 来自: 河北
社区版块
存档分类
最新评论

Redis中5种数据结构的使用场景介绍

阅读更多
转载于:http://www.itxuexiwang.com/a/shujukujishu/redis/2016/0216/108.html?1455861435
一、redis 数据结构使用场景
原来看过 redisbook ​这本书,对 redis 的基本功能都已经熟悉了,从上周开始看 redis 的源码。目前目标是吃透 redis 的数据结构。我们都知道,在 redis 中一共有5种数据结构,那每种数据结构的使用场景都是什么呢?
String——字符串
Hash——字典
List——列表
Set——集合
Sorted Set——有序集合
下面我们就来简单说明一下它们各自的使用场景:
1. String——字符串
String 数据结构是简单的 key-value 类型,value 不仅可以是 String,也可以是数字(当数字类型用 Long 可以表示的时候encoding 就是整型,其他都存储在 sdshdr 当做字符串)。使用 Strings 类型,可以完全实现目前 Memcached 的功能,并且效率更高。还可以享受 Redis 的定时持久化(可以选择 RDB 模式或者 AOF 模式),操作日志及 Replication 等功能。除了提供与 Memcached 一样的 get、set、incr、decr 等操作外,Redis 还提供了下面一些操作:

代码如下:

1.LEN niushuai:O(1)获取字符串长度
2.APPEND niushuai redis:往字符串 append 内容,而且采用智能分配内存(每次2倍)
3.设置和获取字符串的某一段内容
4.设置及获取字符串的某一位(bit)
5.批量设置一系列字符串的内容
6.原子计数器
7.GETSET 命令的妙用,请于清空旧值的同时设置一个新值,配合原子计数器使用

2. Hash——字典
在 Memcached 中,我们经常将一些结构化的信息打包成 hashmap,在客户端序列化后存储为一个字符串的值(一般是 JSON 格式),比如用户的昵称、年龄、性别、积分等。这时候在需要修改其中某一项时,通常需要将字符串(JSON)取出来,然后进行反序列化,修改某一项的值,再序列化成字符串(JSON)存储回去。简单修改一个属性就干这么多事情,消耗必定是很大的,也不适用于一些可能并发操作的场合(比如两个并发的操作都需要修改积分)。而 Redis 的 Hash 结构可以使你像在数据库中 Update 一个属性一样只修改某一项属性值。#p#分页标题#e#
代码如下:

存储、读取、修改用户属性

3. List——列表
List 说白了就是链表(redis 使用双端链表实现的 List),相信学过数据结构知识的人都应该能理解其结构。使用 List 结构,我们可以轻松地实现最新消息排行等功能(比如新浪微博的 TimeLine )。List 的另一个应用就是消息队列,可以利用 List 的 *PUSH 操作,将任务存在 List 中,然后工作线程再用 POP 操作将任务取出进行执行。Redis 还提供了操作 List 中某一段元素的 API,你可以直接查询,删除 List 中某一段的元素。
代码如下:

1.微博 TimeLine
2.消息队列

4. Set——集合
Set 就是一个集合,集合的概念就是一堆不重复值的组合。利用 Redis 提供的 Set 数据结构,可以存储一些集合性的数据。比如在微博应用中,可以将一个用户所有的关注人存在一个集合中,将其所有粉丝存在一个集合。因为 Redis 非常人性化的为集合提供了求交集、并集、差集等操作,那么就可以非常方便的实现如共同关注、共同喜好、二度好友等功能,对上面的所有集合操作,你还可以使用不同的命令选择将结果返回给客户端还是存集到一个新的集合中。
1.共同好友、二度好友
2.利用唯一性,可以统计访问网站的所有独立 IP
3.好友推荐的时候,根据 tag 求交集,大于某个 threshold 就可以推荐
5. Sorted Set——有序集合
和Sets相比,Sorted Sets是将 Set 中的元素增加了一个权重参数 score,使得集合中的元素能够按 score 进行有序排列,比如一个存储全班同学成绩的 Sorted Sets,其集合 value 可以是同学的学号,而 score 就可以是其考试得分,这样在数据插入集合的时候,就已经进行了天然的排序。另外还可以用 Sorted Sets 来做带权重的队列,比如普通消息的 score 为1,重要消息的 score 为2,然后工作线程可以选择按 score 的倒序来获取工作任务。让重要的任务优先执行。#p#分页标题#e#
1.带有权重的元素,比如一个游戏的用户得分排行榜
2.比较复杂的数据结构,一般用到的场景不算太多
二、redis 其他功能使用场景
1. 订阅-发布系统
Pub/Sub 从字面上理解就是发布(Publish)与订阅(Subscribe),在 Redis 中,你可以设定对某一个 key 值进行消息发布及消息订阅,当一个 key 值上进行了消息发布后,所有订阅它的客户端都会收到相应的消息。这一功能最明显的用法就是用作实时消息系统,比如普通的即时聊天,群聊等功能。
2. 事务——Transactions
谁说 NoSQL 都不支持事务,虽然 Redis 的 Transactions 提供的并不是严格的 ACID 的事务(比如一串用 EXEC 提交执行的命令,在执行中服务器宕机,那么会有一部分命令执行了,剩下的没执行),但是这个 Transactions 还是提供了基本的命令打包执行的功能(在服务器不出问题的情况下,可以保证一连串的命令是顺序在一起执行的,中间有会有其它客户端命令插进来执行)。Redis 还提供了一个 Watch 功能,你可以对一个 key 进行 Watch,然后再执行 Transactions,在这过程中,如果这个 Watched 的值进行了修改,那么这个 Transactions 会发现并拒绝执行。
分享到:
评论

相关推荐

    redis使用场景及数据结构.docx

    redis使用场景及数据结构.docx

    redis基础数据结构讲解

    本文主要介绍redis的几种数据类型和适用场景。会列出简单例子,具体的redis函数不会一一介绍。不过这些简单的例子基本上满足80%以上的项目。

    Redis面试必备知识点:使用场景及应用示例详解

    在面试中,Redis也是一个常见的考点,因此了解Redis的使用场景及常用应用示例是必要的。 首先,Redis的使用场景主要包括缓存、数据共享等方面。在缓存方面,Redis可以用来缓存一些热点数据,减少数据库的压力,同时...

    Redis数据类型及应用场景

    2、Redis的每个数据类型是处理不同业务场景而诞生,基本数据类型为5种,从redis5.0版发布后新增了Stream数据类型,如下思路图: 3、其中跳表为插入,删除,查询比较快的动态数据结构,跳表是一个值有序的链表建立...

    Redis特性和应用场景

    目前,Redis支持5种数据结构。 持久化 由于所有数据保持在内存中,所以对数据的更新将异步地保存到磁盘上,Redis提供了一些策略来保存数据,比如根据时间或更新次数。数据超过内存,使用swap,保证数据; memcacache...

    一口气说出Redis 5种数据结构及对应使用场景,面试要加分的

    一口气说出 9种 分布式ID生成方式,面试官有点懵了 3万字总结,Mysql优化之精髓 为了不复制粘贴,我被逼着学会了JAVA爬虫 技术部突然宣布:JAVA开发人员全部要会接口自动化测试框架 写在前边 也当过面试官,面试过...

    ypjh001#-#11.2.redis数据结构与应用场景1

    一、简介Redis 是开源免费, key-value 内存数据库,主要解决高并发、大数据场景下,热点数据访问的性能问题,提供高性能的数据快速访问。项目中部分数据

    Redis的介绍和使用(超详细概念介绍)

    本文主要介绍了: 1:基本数据类型。...它以高性能、支持丰富的数据结构、持久化特性、复制、集群以及发布/订阅等特性而闻名。可以应用于各种场景,包括缓存、会话存储、排行榜、实时通知、消息队列等。

    60道关于Redis的常见面试题.pdf

    - 1. 什么是 Redis?它的主要特点是什么?... Redis 支持的数据结构中,有哪些可以实现计数功能?请详细说明其使用场景。 - 10. 什么是 Redis Sentinel?它的作用是什么?如何配置和使用 Sentinel?

    Redis-x64-3.0.504可视化迷你安装包.zip

    Redis是一个快速、开源、高性能的内存键值数据库,它支持多种不同类型的数据结构,如字符串、列表、散列、集合和有序集合,应用于缓存、队列、发布/订阅等多种场景下。 以下是Redis的一些特点: 1. 内存存储 ...

    各种java面试大全,包含nginx、mysql、redis、spring各种基础

    java基础笔记,java基础面试全集,java里的volatile关键字详解,jvm垃圾回收,MySQL索引背后的数据结构及算法原理,MySQL性能优化的最佳21条经验,MySQL中的锁(表锁、行锁),Redis的优点和5种数据结构使用场景介绍,...

    使用Redis实现微信步数排行榜功能

    之前写过一篇博客,讲解的是Redis的5种数据结构及其常用命令,当时有读者评论,说希望了解下这5种数据结构各自的使用场景,不过一直也没来得及写。 碰巧,在3月份找工作面试时,有个面试官先问了我Redis有哪几种数据...

    Redis学习手册

    在目前的版本中,Redis 除了Key/Value 之外还支持 List、Hash、Set 和Ordered Set 等数据结构,因 此它的用途也更为宽泛。对于此种误解,Redis 官网也进行了相应的澄清。和以上两种产品不同的是,Redis 的 License ...

    Redis常见面试题汇总.pdf

    1、什么是Redis? Redis本质_上是一个Key-Value类型的内存数据库,很像memcached,整个数据库统统加 载在内存当中进行操作,定期通过异步操作把数据库...此Redis适合的场景主要局限在较小数据量的高性能操作和运算上。

    聊聊高并发高可用那些事(Kafka、Redis、MySQL)

    - 基本数据结构介绍 - MyIsAM InnoDB 等存储引擎 - 索引类型和方式、聚簇和非聚簇索引 - 回表、覆盖索引、最左前缀、联合索引、索引下推 - Explain分析SQL语句 - 索引失效的场景、索引优化方案 - TB级数据(600亿条)...

    Redis如何在项目中合理使用经验分享

    Redis作为一款性能优异的内存数据库,在互联网公司有着多种应用场景,本文将介绍Redis如何在项目中合理使用。 背景 Redis 是一个开源的内存数据结构存储系统。 可以作为数据库、缓存和消息中间件使用。 支持...

    Redis64位和java连接redis的jar包

    redis是一种支持Key-Value等多种数据结构的存储系统。可用于缓存,事件发布或订阅,高速队列等场景。该数据库使用ANSI C语言编写,支持网络,提供字符串,哈希,列表,队列,集合结构直接存取,基于内存,可持久化。...

    Redis.mmap

    2、 基础:数据结构、分布式锁、持久化、事务、同步机制、集群、集群高可用 3、缓存问题:缓存雪崩、缓存穿透、缓存击穿、缓存预热、缓存更新、缓存降级、 4、 拓展:布隆过滤器、keys, scan、redis快原因、redis...

Global site tag (gtag.js) - Google Analytics