Redis简介

简介

Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部分场合可以对关系数据库起到很好的补充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,使用很方便。

Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这使得Redis可执行单层树复制。存盘可以有意无意的对数据进行写操作。由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。同步对读取操作的可扩展性和数据冗余很有帮助。

Redis 官网:http://redis.io/

官网地址:https://redis.io/

中文官网地址:http://www.redis.cn

下载地址:https://download.redis.io/releases/

特点功能

以下是 Redis 的主要功能:

  • 读写性能优异, Redis 能读的速度是 110000 次/s,写的速度是 81000 次/s。
  • 支持数据持久化,支持 AOF 和 RDB 两种持久化方式。
  • 支持事务,Redis 的所有操作都是原子性的,同时 Redis 还支持对几个操作合并后的原子性执行。
  • 数据结构丰富,除了支持 string 类型的 value 外还支持 hash、set、zset、list 等数据结构。
  • 支持主从复制,主机会自动将数据同步到从机,可以进行读写分离。

高性能 :

        假如用户第一次访问数据库中的某些数据的话,这个过程是比较慢,毕竟是从硬盘中读取的。但是,如果说,用户访问的数据属于高频数据并且不会经常改变的话,那么我们就可以很放心地将该用户访问的数据存在缓存中。

高并发:

        一般像 MySQL 这类的数据库的 QPS 大概都在 1w 左右(4 核 8g) ,但是使用 Redis 缓存之后很容易达到 10w+,甚至最高能达到 30w+(就单机 redis 的情况,redis 集群的话会更高)。

QPS(Query Per Second):

        服务器每秒可以执行的查询次数;所以,直接操作缓存能够承受的数据库请求数量是远远大于直接访问数据库的,所以我们可以考虑把数据库中的部分数据转移到缓存中去,这样用户的一部分请求会直接到缓存这里而不用经过数据库。进而,我们也就提高的系统整体的并发。

发展背景

2008年,意大利的一家创业公司Merzia推出了一款基于MySql的网站实时统计系统LLOOGG,然而没过多久该公司的创始人Salvatore Sanfilippo便对MySql的性能感到失望,于是他决定亲力为LLOOGG量身定做一个数据库,并于2009年开发完成,这个数据库就是Redis。

不过Salvatore Sanfilippo并不满足只将Redis用于LLOOGG这一款产品,而是希望更多的人使用它,于是在同一年Salvatore Sanfilippo将Redis开源发布。并开始和Redis的另一名主要的代码贡献者Pieter Noordhuis一起继续着Redis的开发,直到今天。

Salvatore Sanfilippo自己也没有想到,短短的几年时间,Redis就拥有了庞大的用户群体。Hacker News在2012年发布一份数据库的使用情况调查,结果显示有近12%的公司在使用Redis。国内如新浪微博、街旁网、知乎网、国外如GitHub、Stack、Overflow、Flickr等都是Redis的用户。

VmWare公司从2010年开始赞助Redis的开发,Salvatore Sanfilippo和Pieter Noordhuis也分别在3月和5月加入VMware,全职开发Redis。

‍Redis 作者

Salvatore Sanfilippo (antirez),男,意大利人,出生并居住在西西里岛,个人网站 Salvatore Sanfilippo aka antirez 。早年为系统管理员,关注计算机安全领域,于 1999 年发明了 idle scan 扫描技术,该技术现在在 nmap 扫描器上也有实现。2004 年~2006 年期间在做嵌入式方面的工作,并为此写了名为 Jim 的Tcl 解释器 、《Tcl Wise:Guide to the Tcl programming language》一书以及《Tcl the Misunderstood》文档。(Redis 的事件处理器就重写自 Jim 的事件循环,而 Redis 的测试套件也使用 Tcl 语言来写的)。除此之外,他在2006 还写了 Hping —— 一个 TCP/IP 包分析器。之后开始接触 web ,在 2007 年和另一个朋友共同创建了 http://LLOOGG.com,并因为解决这个网站的负载问题而在 2009 年 2 月 26 日发明了 Redis。这位便是redis的作者,他叫Salvatore Sanfilippo,来自意大利的西西里岛,现在居住在卡塔尼亚。目前供职于Pivotal公司。

他使用的网名是antirez,如果你有兴趣,可以去他的博客逛逛,地址是List of posts - <antirez>,当然也可以去follow他的github,地址是antirez (Salvatore Sanfilippo) · GitHub

应用场景

  • 内存数据库(登录信息、购物车信息、用户浏览记录等)
  • 缓存服务器(商品数据、广告数据等等)(最多使用)
  • 解决分布式集群架构中的Session分离问题(Session共享)
  • 任务队列。(秒杀、抢购、12306等等)
  • 支持发布订阅的消息模式
  • 应用排行榜
  • 网站访问统计
  • 数据过期处理(可以精确到毫秒)

计数器 

        可以对 String 进行自增自减运算,从而实现计数器功能。Redis 这种内存型数据库的读写性能非常高,很适合存储频繁读写的计数量。

缓存

        将热点数据放到内存中,设置内存的最大使用量以及淘汰策略来保证缓存的命中率。

会话缓存 

        可以使用 Redis 来统一存储多台应用服务器的会话信息。当应用服务器不再存储用户的会话信息,也就不再具有状态,一个用户可以请求任意一个应用服务器,从而更容易实现高可用性以及可伸缩性。

全页缓存(FPC) 

除基本的会话 token 之外,Redis 还提供很简便的 FPC 平台。以 Magento 为例,Magento 提供一个插件来使用 Redis 作为全页缓存后端。此外,对 WordPress 的用户来说,Pantheon 有一个非常好的插件 wp-redis,这个插件能帮助你以最快速度加载你曾浏览过的页面。

查找表

        例如 DNS 记录就很适合使用 Redis 进行存储。查找表和缓存类似,也是利用了Redis快速的查找特性。但是查找表的内容不能失效,而缓存的内容可以失效,因为缓存不作为可靠的数据来源。

消息队列(发布/订阅功能) 

        List 是一个双向链表,可以通过 lpush 和 rpop 写入和读取消息。不过最好使用 Kafka、RabbitMQ 等消息中间件。

分布式锁实现

        在分布式场景下,无法使用单机环境下的锁来对多个节点上的进程进行同步。可以使用 Redis 自带的 SETNX 命令实现分布式锁,除此之外,还可以使用官方提供的 RedLock 分布式锁实现。

其它

         Set 可以实现交集、并集等操作,从而实现共同好友等功能。ZSet可以实现有序性操作,从而实现排行榜等功能。

关于缓存

        缓存原指CPU上的一种高速存储器,它先于内存与CPU交换数据,速度很快。现在泛指:存储在计算机上的原始数据的复制集,便于快速访问。

        在互联网技术中,缓存是系统快速响应的关键技术之一,以空间换时间的一种技术(艺术)

        在大型网站中从浏览器到网络,再到应用服务器,再到数据库,通过在各个层面应用缓存技术,大大提升了系统性能和用户体验。

分类

客户端缓存

客户端缓存如: 页面缓存 浏览器缓存 app缓存

网络端缓存如:web 代理缓存 (比如Nginx) 边缘缓存 如CDN

服务端缓存

数据库级缓存(mysql 在server层使用查询缓存机制 innodb 存储引擎中的buffer-pool用于缓存innodb索引以及数据块)

平台级缓存 (指定是带有缓存特性的应用框架,比如 GuavaCache 等,部署在应用服务器上也称为服务器本地缓存)

应用级缓存 (具有缓存功能的中间件产品)如redis Tair Memcached等,采用k/v键值对进行存储,利用集群支持高可用 高性能 高并发 高扩展 等特性

缓存的优势和代价

优势

提升用户体验

        用户体验(User Experience):用户在使用产品过程中建立起来的一种纯主观感受。缓存的使用可以提升系统的响应能力,大大提升了用户体验。

减轻服务器压力

        客户端缓存、网络端缓存减轻应用服务器压力。服务端缓存减轻数据库服务器的压力。

提升系统性能

        系统性能指标:响应时间、延迟时间、吞吐量、并发用户数和资源利用率等。

代价

额外的硬件支出

        缓存是一种软件系统中以空间换时间的技术,需要额外的磁盘空间和内存空间来存储数据,搭建缓存服务器集群需要额外的服务器 采用云服务器的缓存服务就不用额外的服务器了阿里云(Tair、Redis),百度云(Redis),提供缓存服务AWS亚马逊云服务:EVCache

高并发缓存失效

        在高并发场景下会出现缓存失效(缓存穿透、缓存雪崩、缓存击穿)造成瞬间数据库访问量增大,甚至崩溃缓存与数据库数据同步问题:导致数据不一致

        缓存与数据库无法做到数据的时时同步,Redis无法做到主从时时数据同步

缓存并发竞争

        多个redis的客户端同时对一个key进行set值得时候由于执行顺序引起的并发问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值