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).集 ...
随机推荐
- python2.0_day21_bbs系统评论自动加载+文章创建
day20中我们已经实现了bbs系统的前端展示,后台admin管理,以及前端动态显示顶部\登录和评论的分级展示功能.其中评论的分级展示功能最为复杂.上一节中我们只是在文章明细页面中加了一个button ...
- Tomcat服务器的搭建
一.Tomcat服务器端口的配置 Tomcat的所有配置都放在conf文件夹之中,里面的server.xml文件是配置的核心文件. 如果想修改Tomcat服务器的启动端口,则可以在server.xml ...
- STM32学习之路之入门篇
2006年ARM公司推出了基于ARMV7架构的cortex系列的标准体系结构,以满足各种技术得不同性能要求,包含了A,R,M三个分工明确的系列 其中A系列面向复杂的尖端应用程序,用于运行开放式的复杂操 ...
- ios 图片处理( 1.按比例缩放 2.指定宽度按比例缩放
本文转载至 http://blog.sina.com.cn/s/blog_6f29e81f0101tat6.html //按比例缩放,size 是你要把图显示到 多大区域 CGSizeMake(300 ...
- jquery获取父级元素、子级元素、兄弟元素的方法
jQuery.parent(expr) 找父亲节点,可以传入expr进行过滤,比如$("span").parent()或者$("span").parent(&q ...
- Android英文文档翻译系列(2)——HandlerThread
public class HandlerThread extends Thread Class Overview Handy class for starting a new threa ...
- 【linux】Centos下登陆mysql报错#1045 - Access denied for user 'root'@'localhost' (using password: NO)
创建mysql 远程链接 grant all privileges on *.* to 'test'@"%" identified by "test666 with g ...
- JavaWeb温习之Session对象
1. Session简单介绍 在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下).因此,在需要保存用户数据时,服 ...
- CVE-2017-1000117命令注入验证
首先,我们来看第一个问题,就是ssh的一种操作. ssh -oProxyCommand=gnome-calculator xxx 问题的本质在于ssh会把//后的host那么部分带-号的按照参数指令去 ...
- 1.执行环境判断 window 或 self
window or self ? 在 underscore 的判断所处环境的代码中,似乎我们没有看到 window 对象的引用,其实,在浏览器环境下,self 保存的就是当前 window 对象的引用 ...