现在大多数开发人员都会听说过 Redis。Redis 是目前市场上最好的开源内存 NoSQL 数据库之一。它为前端以及后端服务(如键值查找,队列,哈希等)提供了非常多的帮助。

一、什么是 Redis?

根据 Redis 官方介绍,Redis 是一个开源(BSD许可),内存数据结构存储,用作数据库,缓存和消息代理,它支持字符串、哈希表、列表、集合、有序集合、位图、hyperloglogs 等数据类型。

二、Redis 与 Memcached

Redis 是一个数据结构服务器。作为键值数据存储,Redis 类似于 Memcached,但它比 Memcached 有两个主要优点:支持更多的数据类型以及持久化。

持久化使得你可以将 Redis 当做合法数据库进行操作,而不是一个不稳定的临时缓存。如果重新启动,Memcached 信息将丢失; 但 Redis 数据仍然存在。

Redis 支持存储多种类型数据。跟 Memcached 一样可以使用字符串。而且你还可以处理 hash(哈希),set(所有不同值的未排序),zset(所有不同值的排序)和 list(可能包括重复的排序)。

三、Redis 如何运作?

数据库将数据存储在磁盘或 SSD 上,而 Redis 的数据是驻留在内存中。由于无需访问磁盘,Redis 等内存数据存储避免了查找时间延迟,并且可以在几微秒内访问数据。Redis 提供多种数据结构、高可用性、地理空间、Lua 脚本、事务、磁盘持久性和群集支持,让实时互联网级应用程序的构建变得更加简单。

四、Redis 持久化

现在可以通过两种不同的方式实现持久性:一种称为快照,是一种半持久性模式,指定的时间间隔内生成数据集的时间点快照,以 RDB(Redis DataBase) 转储格式编写。从版本1.1开始,有更安全的替代方案 AOF(Append Only File),它的出现是为了弥补 RDB 的不足(数据的不一致性),采用日志的形式来记录每个写操作并追加在文件中。

五、RDB 和 AOF ,我应该用哪一个?

一般来说,如果想达到足以媲美 PostgreSQL 的数据安全性, 你应该同时使用 RDB 和 AOF 两种持久化功能。

AOF 默认情况下,Redis 每2秒将数据写入文件系统,根据需求设置时间。如果在默认设置下系统出现故障,则只会丢失几秒钟的数据。如果你可以承受数分钟以内的数据丢失, 那么你可以只使用 RDB 持久化。

有很多人会单独使用 AOF,但是我们并不鼓励这样,因为时常进行 RDB 快照非常方便于数据库备份,启动速度也较之快,还避免了AOF 引擎的 bug。

六、常见案例

缓存 - 由于其高性能,当读写操作量超过传统数据库的功能时,可以通过 Redis 进行解决。由于 Redis 能够轻松的将数据持久保存到磁盘和丰富数据类型,因此它是传统 Memcached 缓存解决方案的绝佳替代方案。

发布和订阅 - 从版本 2.0 开始,Redis 提供了使用发布/订阅消息传递范例分发数据的功能。

队列 - 像 Resque 这样的项目使用 Redis 作为排队后台作业的后端。

游戏排行榜- Redis 是寻求构建实时排行榜的游戏开发者的热门选择。可直接使用 Redis 有序集数据结构,此结构实现了元素的唯一性,同时又可维护按用户分数排序的列表。你也可以使用时间戳作为分数,使用有序集处理时间序列数据。

实时分析-Redis 可作为内存中数据存储,与流处理平台(例如 Apache Kafka)搭配使用,以亚毫秒级延迟提取、处理和分析实时数据。Redis 是实时分析使用案例的理想选择,例如社交媒体分析、广告投放、个性化。

七、示例 Redis 基本命令

下面我简单讲解 Redis-CLI 基本命令操作,默认情况下,Redis-CLI在端口 6379 上运行。

SET (设置密钥)

127.0.0.1:6379> SET foo "Hello World"
OK // 设置密钥

GET (获取密钥)

127.0.0.1:6379> GET foo
"Hello World" // 获取密钥

DEL (删除密钥)

127.0.0.1:6379> GET foo
"Hello World"
127.0.0.1:6379> DEL foo
(integer) 1 // 密钥刚被删除
127.0.0.1:6379> GET foo
(nil) // 密钥被删除,结果为nil。

SETEX (设置有效期限的密钥)

127.0.0.1:6379> SETEX foo 40 "I said, Hello World!"
OK //密钥已设置为40秒到期

TTL (密钥的剩余时间)

127.0.0.1:6379> TTL foo
(integer) 36 //36秒超时

PERSIST (密钥删除期限)

127.0.0.1:6379> PERSIST foo
(integer) 1 //将密钥转为持久化(密钥不会过期)

RENAME (重命名当前现有密钥)

127.0.0.1:6379> RENAME foo bar
OK // 将键'foo'重命名为 'bar'

FLUSHALL (清空到目前为止保存的所有内容)

127.0.0.1:6379> flushall
OK // 删库跑路

八、小结

Redis 有着极其丰富的数据类型和极高性能,性能上读的速度是110000次/s,写的速度是81000次/s 。但是 Redis 不是万能的,受到物理内存的限制,不能用作海量数据的高性能读写,因此 Redis 适合的场景主要局限在较小数据量的高性能操作和运算上。

为什么 Redis 为什么如此受欢迎的更多相关文章

  1. 企业做数据缓存是使用Memcached还是选Redis?

    企业是使用Memcached还是选Redis? 在构建一款现代且由数据库驱动的Web应用程序并希望使其拥有更为出色的性能表现时,这个问题总会时不时出现.并给每一位开发人员带来困扰.在考虑对应用程序的性 ...

  2. 为何Redis要比Memcached好用(转)

    转载链接:http://blog.csdn.net/renfufei/article/details/40598889 GitHub版本地址: https://github.com/cncounter ...

  3. java 客户端链接不上redis解决方案

    原文地址:http://blog.csdn.net/yingxiake/article/details/51472810 出现问题描述: 1.Could not get a resource from ...

  4. Redis内存数据库在Exchange会议室的应用

    本文论述了现有Exchange会议室应用现状和不足之处,并详细介绍了Redis内存数据库在Exchange会议室的应用,并给出了一种高性能的应用架构及采用关键技术和关键实现过程,最终实现大幅改进系统性 ...

  5. Memcached和Redis异同

    在考虑对应用程序的性能表现进行提升时,缓存机制往往是解决问题的重要起点,而Memcached与Redis则经常被作为初步方案来加以比较.这两套声名显赫的缓存引擎拥有着诸多相似之处,但它们同样也具备大量 ...

  6. 为什么Redis比Memcached易

    GitHub版本号地址: https://github.com/cncounter/translation/blob/master/tiemao_2014/Redis_beats_Memcached/ ...

  7. Redis是新兴的通用存储系统-为何Redis要比Memcached好用

    GitHub版本地址: https://github.com/cncounter/translation/blob/master/tiemao_2014/Redis_beats_Memcached/R ...

  8. 把leveldb嵌入到redis.实现真正的数据持久存储

    目前最新版RedisStorage 是基于 redis 2.6.2基础上,加上 leveldb存储引擎. 这个项目是源于 公司项目的passport 用户认证改造.公司一个项目运行了N年.积累了几千万 ...

  9. Redis系列四:redis支持的数据类型

    一.字符串<String> 1. 字符串类型:实际上可以是字符串(包括XML JSON),还有数字(整形 浮点数),二进制(图片 音频 视频),最大不能超过512MB 2. 设值命令: s ...

随机推荐

  1. SpringCloud(九):springcloud——链路追踪springcloud-sleuth

    Spring-Cloud-Sleuth是Spring Cloud的组成部分之一,为SpringCloud应用实现了一种分布式追踪解决方案,其兼容了Zipkin, HTrace和log-based追踪, ...

  2. swoole1--搭建echo服务器

    1.安装swoole :pecl install swoole,然后修改php.ini 开启swoole扩展:extension=swoole.so 2.写一个服务器Server.php 1 < ...

  3. MySQL 数据库查询数据,过滤重复数据保留一条数据---(MySQL中的row_number变相实现方法)

    转自: http://www.maomao365.com/?p=10564 摘要: 下文讲述MySQL数据库查询重复数据时,只保留一条数据的方法 实现思路: 在MySQL数据库中没有row_numbe ...

  4. MSSQL注入:显错注入及反弹注入

    前言: MSSQL注入攻击是最为复杂的数据库攻击技术,由于该数据库功能十分强大,存储过程以及函数语句十分丰富,这些灵活的语句造就了新颖独特的攻击思路. MSSQL的显错注入操作: 以联合查询为例: 猜 ...

  5. 洛谷 SP14932 LCA - Lowest Common Ancestor

    洛谷 SP14932 LCA - Lowest Common Ancestor 洛谷评测传送门 题目描述 A tree is an undirected graph in which any two ...

  6. Educational Codeforces Round 76 (Rated for Div. 2) C. Dominated Subarray 水题

    C. Dominated Subarray Let's call an array

  7. Keras保存模型并载入模型继续训练

    我们以MNIST手写数字识别为例 import numpy as np from keras.datasets import mnist from keras.utils import np_util ...

  8. 一起学react (1) 10分钟 让你dva从入门到精通

    前言 如果文章中有错误的地方的话 可以直接加我QQ:469373256 自己针对一些问题做的优化版本 目前刚启动 还不是很成熟 https://github.com/fangkyi03/fastkit ...

  9. 隐马尔可夫模型(HMM)及Viterbi算法

    HMM简介 对于算法爱好者来说,隐马尔可夫模型的大名那是如雷贯耳.那么,这个模型到底长什么样?具体的原理又是什么呢?有什么具体的应用场景呢?本文将会解答这些疑惑. 本文将通过具体形象的例子来引入该模型 ...

  10. c#汉字转拼音首字母全拼支持多音字

    1.首先在NuGet安装pingyinConverter 2.下载-安装-引用ChineseChar.dll到项目中 官网了解:http://www.microsoft.com/zh-cn/downl ...