Redis概述

1 概述

Redis 是开源、高性能的key-value数据库。

Redis很像memcached,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘上进行保存。

Redis适合的场景主要局限在较小数据量的高性能操作和运算上。

   

2 优点

  • 异常快 - 每秒可执行大约110000次的设置(SET)操作,81000次的读取/获取(GET)操作
  • 支持丰富的数据类型 - Redis支持开发人员常用的大多数数据类型,例如列表,集合,排序集和散列等;
  • 支持事务,且操作具有原子性 - 所有Redis操作都是原子操作,这确保如果两个客户端并发访问,Redis服务器能接收更新的值;
  • 多实用工具 - Redis是一个多实用工具,可用于多种用例,如:缓存,消息队列(Redis本地支持发布/订阅),应用程序中的任何短期数据,例如,web应用程序中的会话,网页命中计数等;
  • 单进程单线程 - Redis采用队列技术将并发访问变成串行访问,消除了传统数据库并行控制的开销;
  • 支持读写分离、主从复制

   

3 相对于memcached的优势

  • redis支持丰富的数据类型,memcached所有的值均是简单的字符串
  • redis单个value的最大限制是1GB, memcached只能保存1MB的数据
  • redis自己构建了虚拟内存机制,比系统的虚拟内存块
  • redis可以持久化其数据

   

4 Redis支持的数据类型

  • Strings
  • Lists
  • Sets
  • Sorted Set
  • Hashes

   

5 虚拟内存

当value很大时,可以使用虚拟内存,节约内存。

当key也很大时,可以将key-value变成一个value,存在虚拟内存中。

   

6 数据分片

数据分片模型把每个节点当成独立的master,对业务进行分片存储。包括范围分区和哈希分区。

优点:容量大;处理能力强。

缺点:不支持涉及多个key的操作或事务;数据处理复杂。

   

7 管道技术

Redis是一种基于客户端-服务端模型以及请求/响应协议的TCP服务。这意味着通常情况下一个请求会遵循以下步骤:

客户端向服务端发送一个查询请求,并监听Socket返回,通常是以阻塞模式,等待服务端响应。

服务端处理命令,并将结果返回给客户端。

使用Redis 管道技术可以在服务端未响应时,客户端可以继续向服务端发送请求,并最终一次性读取所有服务端的响应。

优势是提高了 redis 服务的性能。

   

8 回收策略

  • volatile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰
  • volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰
  • volatile-random:从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰
  • allkeys-lru:从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰
  • allkeys-random:从数据集(server.db[i].dict)中任意选择数据淘汰
  • no-enviction:禁止驱逐数据

   

9 发布订阅

Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。

Redis 客户端可以订阅任意数量的频道。

下图展示了频道 channel1,以及订阅这个频道的三个客户端 —— client2 、 client5 和 client1 之间的关系:

当有新消息通过 PUBLISH 命令发送给频道 channel1 时, 这个消息就会被发送给订阅它的三个客户端:

   

10 适用场景

10.1 会话缓存(Session Cache)

用Redis缓存会话相比其他存储的优势在于:Redis提供持久化。当维护一个不是严格要求一致性的缓存时,如果用户的购物车信息全部丢失,大部分人都会不高兴的

10.2 全页缓存(FPC)

除基本的会话token之外,Redis还提供很简便的FPC平台。回到一致性问题,即使重启了Redis实例,因为有磁盘的持久化,用户也不会看到页面加载速度的下降,这是一个极大改进,能帮助你以最快速度加载你曾浏览过的页面。

10.3 队列

Reids在内存存储引擎领域的一大优点是提供 list 和 set 操作,这使得Redis能作为一个很好的消息队列平台来使用。Redis作为队列使用的操作,就类似于本地程序语言(如Python)对 list 的 push/pop 操作。

10.4 排行榜/计数器

Redis在内存中对数字进行递增或递减的操作实现的非常好。集合(Set)和有序集合(Sorted Set)也使得我们在执行这些操作的时候变的非常简单,Redis只是正好提供了这两种数据结构。

10.5 发布/订阅

发布/订阅的使用场景确实非常多。我已看见人们在社交网络连接中使用,还可作为基于发布/订阅的脚本触发器,甚至用Redis的发布/订阅功能来建立聊天系统。

   

posted @ 2017-04-19 11:43  D调的华丽呢  阅读(210)  评论(0编辑  收藏  举报