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支持的键值数据类型如下:

  1. 字符串类型
  2. 散列类型
  3. 列表类型
  4. 集合类型
  5. 有序集合类型

这种字典类型的存储结构与常见的 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的优势

总结一下:

  1. 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
  2. 丰富的数据类型 – Redis支持二进制的字符串、列表、哈希值、集合和有序集合等数据类型操作。
  3. 丰富的特性 – Redis还支持 发布/订阅, 通知, key 过期等等特性。
  4. 内存存储与持久化,数据可靠不丢失
  5. 简单稳定

Redis 入门之Redis简介的更多相关文章

  1. Redis入门实例(Redis+Sprint+maven创建工程)

    一.>创建一个maven工程应用和相关配置:Redis_study,创建工程应用过程略 1.>配置pom.xml:文件内容如下 <project xmlns="http:/ ...

  2. Redis入门笔记-redis内部数据结构(01)

    redis是一个轻量级的Nodsql数据库,使用kev-value的形式存储数据,在redis的世界里,没有整数.浮点数等概念,大多数情况下数据以字符串形式展现,偶尔会出现Long类型数据的场景. 一 ...

  3. 安装redis入门

    redis官网:redis.io redis版本用的是redis-3.2.2 $ wget http://download.redis.io/releases/redis-3.2.2.tar.gz $ ...

  4. redis入门(一)

    目录 redis入门(一) 前言 特性 速度快 简单稳定 丰富的功能 历史 历史版本 安装与启动 安装 数据类型与内部编码 数据结构 内部编码 常用API与使用场景 常用命令 字符串 列表 哈希 集合 ...

  5. redis入门(二)

    目录 redis入门(二) 前言 持久化 RDB AOF 持久化文件加载 高可用 哨兵 流程 安装部署 配置技巧 集群 原理 集群搭建 参考文档 redis入门(二) 前言 在redis入门(一)简单 ...

  6. redis入门(三)

    目录 redis入门(三) 目录 前言 事务 原理 Lua脚本 安装 脚本命令 集群搭建工具 redis-trib.rb redis官方集群搭建 集群横向扩展 故障转移 redis管理 参考文档 re ...

  7. Redis入门指南之一(简介)

    1. 简介 Redis是一个开源的.高性能的.基于键值对的缓存与存储系统,通过提供多种键值数据类型来适应不同的场景下的缓存与存储需求.同时Redis的诸多高级功能使其可以胜任消息队列.任务队列等不同的 ...

  8. Redis入门很简单之一【简介与环境搭建】

    Redis入门很简单之一[简介与环境搭建] 博客分类: NoSQL/Redis/MongoDB redisnosqlmemcached缓存中间件  [Redis简介] <一>. NoSQL ...

  9. redis从入门到放弃 -> 简介&概念

    一.redis简介 Redis是一款开源的.高性能的键-值存储.它常被称作是一款数据结构服务器. 当值支持的主要数据类型为:字符串(strings)类型,括哈希(hashes).列表(lists).集 ...

随机推荐

  1. POJ 1252 Euro Efficiency(完全背包, 找零问题, 二次DP)

    Description On January 1st 2002, The Netherlands, and several other European countries abandoned the ...

  2. list中的比较

    一说到list的的确不知道写些什么.....我觉得别人总结的比我写的还要好很多. 我擅长记录自己的误区. |--List:元素是有序的(怎么存的就怎么取出来,顺序不会乱),元素可以重复(角标1上有个3 ...

  3. thinkphp5 Windows下用Composer引入官方GitHub扩展包

    很多新手,比如说我,写代码就是在windows下,所以总会遇到很多不方便的地方,比如说GitHub上面的代码更新了,要是你在linux,只要几行命令就可以搞定更新了,在windows下面,你需要用到C ...

  4. 【linux系列】linux防火墙的关闭开启

    即时生效 开启:service iptables start 关闭:service iptables stop 重启后生效 开启:chkconfig iptables on 关闭:chkconfig ...

  5. ubuntu android studio kvm

    Android studio 启动模拟器失败: Cannot launch AVD in emulator.Output:emulator: ERROR: x86 emulation currentl ...

  6. log4j和commons- logging(好文整理转载)

    一 :为什么同时使用commons-logging和Log4j?为什么不仅使用其中之一? Commons-loggin的目的是为 “所有的Java日志实现”提供一个统一的接口,它自身的日志功能平常弱( ...

  7. 使用jhipster搭建微服务--简单demo

    简介 jhipster简单来说是一个基于nodejs+yeoman的java代码生成器.往大了说是基于java的一套微服务解决方案.请注意是一整套的微服务解决方案.jhipster在整个程序架构上都做 ...

  8. 【BZOJ2815】[ZJOI2012]灾难 拓扑排序+LCA

    [BZOJ2815][ZJOI2012]灾难 题目描述 阿米巴是小强的好朋友. 阿米巴和小强在草原上捉蚂蚱.小强突然想,果蚂蚱被他们捉灭绝了,那么吃蚂蚱的小鸟就会饿死,而捕食小鸟的猛禽也会跟着灭绝,从 ...

  9. 【Android】ImageMap,图片地图

    https://github.com/CFutureTeam/android-image-map package com.*.imagemap; import *.imagemap.ImageMap; ...

  10. java如何使用base64生成图片文件

    import org.apache.commons.codec.binary.Base64; public static void decodeFile(String base64Str,File f ...