Redis 入门之Redis简介
Reids 是一个开源的高性能键值对数据库。它通过多种键值数据类型来适应不同场景下的存储需求,并借助许多高层级的接口使其可以胜任如缓存、队列系统等不同的角色。
1.Reids的诞生
Redis到底是在什么情况下诞生的,我们才能知道我们为什么要用它。现在就来简单说说它的历史。
两个时间点2008年和2009年。
2008年一家意大利的创业公司 Merzia的创始人Salvatore Sanfilippo 在推出一款基于 MySQL 的网站实习统计系统 LLOOGG时 发现 MySQL 的性能很让人失望,于是人家就自己亲自为自家产品量身定做了一个数据库就是Redis,并于2009年开发完成并开源发布。没想到其良好的性能吸引了大量的用户来使用 Redis,在一分数据库的使用情况调查表中,显示有近12%的公司在使用Redis。国内如新浪微博、街旁和知乎,国外如 GitHub、Stack Overflow等等都是Redis的用户。
2. 为什么用它(特性)
下面就说一下究竟它的优点是什么,吸引了如此庞大的用户 ???
2.1 存储结构
Redis 是 REmote DIctionary Server (远程字典服务器)的缩写,它以字典结构存储数据,并允许其他应用通过TCP 协议读写字典中的内容。
例如:
dict["key"] = "value"
中dict是一个字典结构变量,字符串"key"是键名,而"value"是键值,在字段中我们可以获取或设置键名对应的键值,也可以删除一个键。
数据类型
到目前为止Redis支持的键值数据类型如下:
- 字符串类型
- 散列类型
- 列表类型
- 集合类型
- 有序集合类型
这种字典类型的存储结构与常见的 MySQL 等关系数据库的二维表形式的存储结构有很大的差异。
例如:我们需要使用 model 变量 存储一篇文章的数据(包括标题、正文、阅读量和标签):
model["title"] = "language"
model["content"] = "Balabala"
model["view"] = 0
model["tags"] = ["PHP","Ruby","Node.js"]
如果我们需要把这片文章的数据存储到数据库中,并且要求可以通过标签检索出文章。如果使用关系数据库的存储,一般会将标题、正文和阅读量存储在一个表中,而将标签存储在另一个表中,然后再使用第三个表连接接文章和标签表。需要查询时海的将三个表进行连接,不是很直观。
而Redis 字典结构的存储方式和对多种简直数据类型的支持使得开发者可以将程序中的数据直接映射到Redis中。
使用Redis的另一个优势是其对不用的数据类型提供可非常方便的操作方式,如使用集合类型存储文章标签,Redis 可以对标签进行如交集、并集这样的集合运算。
2.2 内存存储与持久化
Redis 数据库中所有数据都存储在内存中。由于内存的读写速度快于硬盘,因此Redis在性能上对比其他基于硬盘存储的数据库有非常明显的优势,在一台普通的笔记本电脑上,Redis可以在一秒内读写超过十万个键值。
将数据存储在内存中也有问题,例如,程序推出后内存中的数据会丢失。不过Redis提供了对持久化的支持,即将可以内存中的数据异步写入到硬盘中,同时不影响继续提供服务。
2.3 功能丰富的多面手
Redis 虽然是作为数据库开发的,但是还有本多人将其用作缓存、队列系统等来使用。
Redis 可以为每个键设置生存时间(TimeToLive, TTL),生存时间到期后会自动被删除。这以功能配合出色的性能让Redis可以作为缓存系统来使用。
作为缓存系统,Redis 还可以限定数据占用的最大内存空间,子啊数据达到空间限制后可以以按照一定的规则自动淘汰不需要的键。
除此之外,Redis 的列表类型键可以用来实现队列,并可支持阻塞式读取,可以很容易得实现一个高性能的优先级对列。同时在更高层面上,Redis海支持"发布/订阅"的消息模式,可以基于此构建聊天室等系统。
2.4 简单稳定
例如: 在关系数据中要获取 model 表中 id为 1的记录title 的字段的值使用SQL语句实现:
SELECT title FROM model WHERE id = 1 LIMIT 1
使用Redis中要读取键名为 model:1 的散列类型键的 title字段的值,可以使用如下命令:
HGET model:1 title
其中HGET就是一个命令。Redis 提供了一百多个命令,但是常用的只有几十个而且非常容易记忆。
Redis提供了几十种不同变成语言的客户端库,这些库都很好的封装了Redis的命令,使得在程序中与 Redis 进行交互变得很容易。
Redis 使用C语言开发,代码量只有3万多行。这降低了用户通过修改 Redis源代码来之更适合自己项目需要的门槛。对与希望“榨干”数据库性能开发者而言,这无疑是一个很大的吸引力。
Reddis的开源使得Redis具有良好的开发分为和严谨的版本发布机制,这让Redis的稳定版本非常可靠。
Redis的优势
总结一下:
- 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
- 丰富的数据类型 – Redis支持二进制的字符串、列表、哈希值、集合和有序集合等数据类型操作。
- 丰富的特性 – Redis还支持 发布/订阅, 通知, key 过期等等特性。
- 内存存储与持久化,数据可靠不丢失
- 简单稳定
Redis 入门之Redis简介的更多相关文章
- Redis入门实例(Redis+Sprint+maven创建工程)
一.>创建一个maven工程应用和相关配置:Redis_study,创建工程应用过程略 1.>配置pom.xml:文件内容如下 <project xmlns="http:/ ...
- Redis入门笔记-redis内部数据结构(01)
redis是一个轻量级的Nodsql数据库,使用kev-value的形式存储数据,在redis的世界里,没有整数.浮点数等概念,大多数情况下数据以字符串形式展现,偶尔会出现Long类型数据的场景. 一 ...
- 安装redis入门
redis官网:redis.io redis版本用的是redis-3.2.2 $ wget http://download.redis.io/releases/redis-3.2.2.tar.gz $ ...
- redis入门(一)
目录 redis入门(一) 前言 特性 速度快 简单稳定 丰富的功能 历史 历史版本 安装与启动 安装 数据类型与内部编码 数据结构 内部编码 常用API与使用场景 常用命令 字符串 列表 哈希 集合 ...
- redis入门(二)
目录 redis入门(二) 前言 持久化 RDB AOF 持久化文件加载 高可用 哨兵 流程 安装部署 配置技巧 集群 原理 集群搭建 参考文档 redis入门(二) 前言 在redis入门(一)简单 ...
- redis入门(三)
目录 redis入门(三) 目录 前言 事务 原理 Lua脚本 安装 脚本命令 集群搭建工具 redis-trib.rb redis官方集群搭建 集群横向扩展 故障转移 redis管理 参考文档 re ...
- Redis入门指南之一(简介)
1. 简介 Redis是一个开源的.高性能的.基于键值对的缓存与存储系统,通过提供多种键值数据类型来适应不同的场景下的缓存与存储需求.同时Redis的诸多高级功能使其可以胜任消息队列.任务队列等不同的 ...
- Redis入门很简单之一【简介与环境搭建】
Redis入门很简单之一[简介与环境搭建] 博客分类: NoSQL/Redis/MongoDB redisnosqlmemcached缓存中间件 [Redis简介] <一>. NoSQL ...
- redis从入门到放弃 -> 简介&概念
一.redis简介 Redis是一款开源的.高性能的键-值存储.它常被称作是一款数据结构服务器. 当值支持的主要数据类型为:字符串(strings)类型,括哈希(hashes).列表(lists).集 ...
随机推荐
- Ext3.4--Gridpanel
Ext.onReady(function () { var sm = new Ext.grid.RowSelectionModel({singleSelect:true})//设置单选 //var s ...
- break、continue、return之间的区别与联系
今天在部署程序的时候,监控日志发现这个问题了.return的问题就这么总结哈. 在软件开发过程中,逻辑清晰是非常之重要的. 代码的规范也是非常重要的.往往细节决定成败.在编写代码的时候,一定要理解语言 ...
- Linux环境下$开头的相关变量的含义
$0 这个程式的执行名字$n 这个程式的第n个参数值,n=1..9$* 这个程式的所有参数,此选项参数可超过9个.$# 这个程式的参数个数$$ 这个程式的PID(脚本运行的当前进程ID号)$! 执行上 ...
- Dubbo(一) -- 初体验
Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,是阿里巴巴SOA服务化治理方案的核心框架. 一.Dubbo出现的背景 随着互联网的发展,网站应用的规模不断扩大,常规的 ...
- 编写一个读写倾斜测量数据.s3c文件格式的OSG插件osgdb_s3c
VS新建一个空的DLL工程 ReaderWriterS3C.cpp源文件 #include <osg/Notify> #include <osgDB/FileNameUtils> ...
- Unity导入FBX自动进行动画切分
手动处理动画分割 在导入FBX模型过程中,若带有动画呢,需要对它进行切分. 当然这个工作可以在Unity中完成. 比如: 这样手动来分割进行. 自动动画切分 这就需要代码了. 把代码保存成cs文件 ...
- cocos2d-x游戏引擎核心之十一——并发编程(消息通知中心)
[续] cocos2d-x游戏引擎核心之八——多线程 这里介绍cocos2d-x的一种消息/数据传递方式,内置的观察者模式,也称消息通知中心,CCNotificationCenter. 虽然引擎没有为 ...
- 你知道js当中for循环当中的bug吗,如何解决它
本来以为for循环可以很好的解决一切问题,直到今天遇到了这段代码,刷新了我对for循环的认识,话不多说,直接上代码 var arr = [];for(var i = 0;i<10;i++) { ...
- @synthesize obj=_obj的意义详解 @property和@synthesize
本文转载至 http://blog.csdn.net/ztp800201/article/details/9231969 http://hi.baidu.com/feng20068123/item/c ...
- Android 生成分享长图并且添加全图水印
转载自 : http://blog.csdn.net/gengqiquan/article/details/65938021 领导最近觉得携程的截屏生成长图分享效果比较好,所以我们也加了个:产品觉得分 ...