Redis(Remote Dictionary Server),即远程字典做事,Redis是一个key-value型的NoSQL数据库。

Redis的官网地址为redis.io,从2010年3月15日起,Redis的开拓事情由VMware主持,Redis的开拓由Pivotal资助。

一 Redis功能先容

与Memcached比较,Redis支持存储的value类型更多,包括string(字符串)、list(链表)、set(凑集)、zset(sorted set有序凑集)和hash(哈希类型)。
这些数据类型都支持push/pop、add/remove及取交集、并集和差集或更丰富的操作,而且这些操作都是原子性的。
在此根本上,Redis支持各种不同办法的排序。

ajax加jsp实现点赞手把手教你持久层Redis数据库设计让你轻松控制 Webpack

与Memcached一样,为了担保效率,数据都是缓存在内存中。
差异是Redis会周期性地把更新数据写入磁盘或写入追加的记录文件,并且在此根本上实现了Master-Slave(主从)同步。

Redis是一个高性能的key-value数据库,在很大程度补偿了Memcached这类key/value存储的不敷,在部分场合可以对关系数据库起到很好的补充浸染。

Redis供应了Java、C/C++、C#、PHP、JavaScript、Perl、Object-C、Python、Ruby、Erlang等客户端,利用非常方便。
Redis支持主从同步,数据可以从主理事器向任意数量的从做事器上同步,这使得Redis可以实行单层树复制。

存盘可以故意无意地对数据进行写操作。
由于完备实现了发布/订阅机制,使得从数据库在任何地方同步树时,都可以订阅一个频道并吸收主理事器完全的发布记录。
同步对读取操作的可扩展性和数据冗余很有好处。

Redis不是比较成熟的Memcached或者MySQL的替代品,是对付大型互联网运用在架构上很好的补充。
现在越来越多的互联网平台纷纭在做基于Redis的架构改造,如京东、淘宝、当当、唯品会、美团、新浪微博等。

下面大略公布一下源于新浪微博的Redis平台实际运用数据,供参考。

· 每天5000亿次读写操作。

· 超过18TB内存。

· 500多个做事器。

二 Redis运用处景

Redis的运用处景基于Redis自身的以下特点。

· Redis是内存数据库,读写速率非常快,因此Redis适宜做Cache(缓存),用于提高数据访问速率,减少关系数据库的压力。

· 关系数据库的Connection连接数非常有限(单机在几千以内),而Redis的单机并发连接可以达到几十万,因此适宜在高并发环境缓解关系数据库的压力。

· Redis中没有事务(Transaction)掌握,因此关键的交易数据读写仍旧须要关系数据库,非关键数据的读写可以转到Redis中。

· Redis数据之间没有关联关系,数据构造大略,数据拓展随意马虎,因此Redis适宜做大集群支配,数据承载量非常弘大。

· Redis中的数据类型大略,无法做构造化查询(SQL),因此不适宜有繁芜关系的数据读写。

Redis的实际运用非常广泛,下面大略列举几个常见的运用处景。

· 与关系数据库合营,做高速缓存。

· 全局计数器(如文章的阅读量、微博点赞数)。

· 利用zset类型存储排行榜数据。

· 利用list自然排序存储最新n个数据(新浪/Twitter用户列表)。

· HTTP Session数据存储。

· 分布式锁运用,防止超卖。

· 高并发环境全局ID获取(如天生唯一的订单编号)。

· 限流(int类型的incr方法,限定访问次数)。

· 利用hash构造做购物车存储。

· 行列步队(list供应了两个壅塞的弹出操作:blpop/brpop)。

· 防止缓存穿透和雪崩故障。

三 Redis下载与安装

Redis目标安装环境CentOS7,安装步骤如下。

(1)下载Redis安装包。

从 Redis 官 网 下 载 redis-5.0.10.tar.gz , 使 用 xftp 工 具 上 传到/usr/local目录下(如图5-1所示)。

(2)进入虚拟机local目录,解压Redis安装包。

图5-1 上传Redis安装包

(3)安装GCC编译环境。

(4)利用GCC编译Redis。

(5)安装Redis。

# make install

(6)检讨Redis安装信息。

进入cd /usr/local/bin目录,若显示如图5-2所示信息,表示Redis安装成功。

图5-2 Redis安装信息

(7)修正Redis配置文件。

进入Redis的安装目录cd /usr/local/redis,修正redis.conf的配置信息(如图5-3所示)。

图5-3 Redis配置文件

修正Redis启动模式如下。

(8)启动Redis做事。

直接实行下面的命令行,redis-server启动时须要访问redis.conf配置文件。

# /usr/local/bin/redis-server /usr/local/redis/redis.conf

# ps -ef | grep redis //redis启动后,检讨redis进程(如图5-4所示)

图5-4 启动Redis做事器

(9)客户端连接Redis做事器(如图5-5所示)。

图5-5 客户端连接Redis做事器

(10)利用Jedis访问测试。

四 案例:当当书城Redis实战

当当书城功能需求和物理表设计拜会4.8节。
本节在4.8节的根本上,引入Redis数据库对当当书城进行性能优化和功能完善。

1 Jedis连接Redis做事器

Jedis是连接Redis做事器最常用的客户端,在Java环境导入包jedis-2.6.1.jar和commons-pool2-2.4.2.jar,即可利用Jedis客户端连接Redis做事器。

参考代码类RedisUtil,利用连接池办法访问Redis,核心代码如下。

2 图书缓存和排序

传统的实现方法是从MySQL数据库中直接提取主页推举图书,但是当当书城用户量弘大,频繁的主页访问会给MySQL数据库带来巨大的压力。

如果把图书数据缓存到Redis数据库中,主页推举图书从Redis中提取,就会大大缓解MySQL数据库的压力。
操作步骤如下。

(1)定义监听器,在系统启动时装载所有图书数据。

(2)所有图书数据,在Redis中按照hash构造存储,主键是ISBN,值是json串。
从MySQL数据库中提取的图书实体工具,须要转换成json串。
实体与json串的互转方案,本书推举利用jackson来实现,这也是Spring框架优先推举的json转换方案。

(3)持久层利用Mybatis从MySQL中提取主页图书,装载到Redis中。

(4)用户访问书城主页时,从Redis中提取主页推举图书信息。

(5)从zset中提取所有主页图书的顺序,然后从hash中提取图书详情。

3 统计图书访问次数

用户在当当书城,通过搜索或主页推举找到图书后,单击进入图书详情页(如图5-6所示)。
图书详情信息从Redis中提取,性能远高于访问MySQL。
同时图书的每一次访问,都会被记录下来,这样热点图书排行就很随意马虎被统计出来了(如图5-7所示)。

图书访问次数统计的实现步骤如下。

(1)普通用户浏览图书时,统计访问次数。

图5-6 图书详情浏览

图5-7 图书访问次数统计

(2)BookRedis逻辑类中的getBookInfo()从Redis中读取图书详情。

(3)BookRedis逻辑类中的addBookPageView()方法,表示每次浏览图书时访问次数加1。

(4)管理员登录后,进入页面访问次数统计页。

(5)根据zset中的图书访问次数统计,显示排名在前100名的热门图书。

(6)视图层显示图书访问排名列表。

4 图书评论

用户浏览器图书时,可以查看评论信息,已登录的用户还可以评论点赞。
购买了图书的用户可以揭橥评论,如图5-8所示。

图书评论信息是非关键的业务数据(无须事务掌握),因此既可以放在MySQL数据库中,也可以放到Redis中。

本节讲解基于Redis的图书评论代码实现方案,操作步骤如下。

图5-8 图书评论与评论点赞

(1)从掌握器BookAction中进入图书评论页。

(2)从Redis中提取已有确当前图书评论信息。
在Redis中,一本书有多条评论,每本书的所有评论信息利用list构造存储,list的命名规则为“plisbn值”。

(3)已购买图书的用户,可以提交评论信息。

(4)图书评论数据直接写入Redis中。

5 图书评论点赞

如图5-8所示,用户在图书详情页浏览时,可以进行评论点赞。
评论点赞数据也存储在Redis数据库中。
评论点赞的操作步骤如下。

(1)在bookComment.jsp页面中利用AJAX提交点赞要求。

(2)在掌握器BookAction中处理点赞要求。

(3)Redis中的点赞逻辑处理。

五 Spring整合Redis管理HTTP Session

Web做事器集群中的Session如何同步是一个非常棘手的问题,有了Redis数据库后,把HTTP Session统一交给Redis管理,既可以办理集群中各个WebServer中Session的同步问题,还可以缓解Web Server的内存压力,又不用担心数据库连接的并发数量。
因此,将Web做事器集群中的Session统一交给Redis管理,目前是最佳办理方案。

Spring整合Redis实现HTTP Session管理的操作步骤如下。

(1)在pom.xml中配置干系包的依赖。

(2)配置Web.xml,增加过滤器。

(3)在Spring的配置文件中,整合Redis。

(4)图5-9所示为Redis中存储HTTP Session的key和value示例,这些数据都是由spring-session-data-redis自动写入的,无须干预。

图5-9 Redis中存储HTTP Session的key和value示例