千家信息网

redis缓存服务器

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,一、 redis介绍redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、 list(链表)、 set(集合)、 zse
千家信息网最后更新 2026年10月31日redis缓存服务器

一、 redis介绍
redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括
string(字符串)、 list(链表)、 set(集合)、 zset(sorted set --有序集合)和hash(哈希类型) 。 与memcached
一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘
或者把修改操作写入追加的记录文件,并且在此基础上实现master-slave(主从)同步。
Redis是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类key/value
存储的不足,在部分场合可以对关系数据库起到很好的补充作用。它提供了Java, C/C++, C#,
PHP, JavaScript, Perl, Object-C, Python, Ruby等客户端,使用很方便。
如果简单地比较Redis与Memcached的区别, 基本上有以下3点:
1、 Redis不仅仅支持简单的k/v类型的数据,同时还提供list, set, zset, hash等数据结构的存储。
2、 Redis支持数据的备份,即master-slave模式的数据备份。
3、 Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行
使用。
在Redis中,并不是所有的数据都一直存储在内存中的。这是和Memcached相比一个最大的区别。
Redis只会缓存所有的key的信息,如果Redis发现内存的使用量超过了某一个阀值,将触发swap
的操作, Redis根据"swappability = age*log(size_in_memory)"计算出哪些key对应的value需要swap
到磁盘。然后再将这些key对应的value持久化到磁盘中,同时在内存中清除。这种特性使得Redis
可以保持超过其机器本身内存大小的数据。当然,机器本身的内存必须要能够保持所有的key,
因为这些数据是不会进行swap操作的。
当从Redis中读取数据的时候,如果读取的key对应的value不在内存中, 那么Redis就需要从swap
文件中加载相应数据,然后再返回给请求方。
memcached和redis的比较
1、 网络IO模型
Memcached是多线程,非阻塞IO复用的网络模型,分为监听主线程和worker子线程,监听线程监
听网络连接,接受请求后,将连接描述字pipe 传递给worker线程,进行读写IO, 网络层使用
libevent封装的事件库,多线程模型可以发挥多核作用。
Redis使用单线程的IO复用模型,自己封装了一个简单的AeEvent事件处理框架,主要实现了epoll、
kqueue和select,对于单纯只有IO操作来说,单线程可以将速度优势发挥到最大,但是Redis也提
供了一些简单的计算功能,比如排序、聚合等,对于这些操作,单线程模型实际会严重影响整体
吞吐量, CPU计算过程中,整个IO调度都是被阻塞住的。
2、 内存管理方面
Memcached使用预分配的内存池的方式,使用slab和大小不同的chunk来管理内存, value根据大
小选择合适的chunk存储。 Redis使用现场申请内存的方式来存储数据。
3、 存储方式及其它方面
Memcached基本只支持简单的key-value存储,不支持持久化和复制等功能, Redis除key/value之外,
还支持list,set,sortedset,hash等众多数据结构
二、 如何保持session会话
目前,为了使web能适应大规模的访问,需要实现应用的集群部署。集群最有效的方案就是负载
均衡,而实现负载均衡用户每一个请求都有可能被分配到不固定的服务器上,这样我们首先要解
决session的统一来保证无论用户的请求被转发到哪个服务器上都能保证用户的正常使用,即需
要实现session的共享机制。
在集群系统下实现session统一的有如下几种方案:
1、 请求精确定位: sessionsticky,例如基于访问ip的hash策略, 即当前用户的请求都集中定位
到一台服务器中,这样单台服务器保存了用户的session登录信息,如果宕机,则等同于单点部
署,会丢失, 会话不复制。
2、 session复制共享: sessionreplication,如tomcat自带session共享, 主要是指集群环境下,
多台应用服务器之间同步session,使session保持一致,对外透明。 如果其中一台服务器发生
故障,根据负载均衡的原理, 调度器会遍历寻找可用节点,分发请求,由于session已同步,故
能保证用户的session信息不会丢失, 会话复制,。
此方案的不足之处:
必须在同一种中间件之间完成(如:tomcat-tomcat之间).
session复制带来的性能损失会快速增加.特别是当session中保存了较大的对象,而且对象变化
较快时, 性能下降更加显著, 会消耗系统性能。 这种特性使得web应用的水平扩展受到了限制。
Session内容通过广播同步给成员,会造成网络流量瓶颈,即便是内网瓶颈。 在大并发下表现并
不好
3、 基于cache DB缓存的session共享
基于memcache/redis缓存的 session 共享
即使用cacheDB存取session信息,应用服务器接受新请求将session信息保存在cache DB中,当
应用服务器发生故障时, 调度器会遍历寻找可用节点,分发请求,当应用服务器发现session不
在本机内存时,则去cache DB中查找,如果找到则复制到本机,这样实现session共享和高可用。
三、 nginx+tomcat+redis实现负载均衡、 session共享
1、实验环境
主机 操作系统 IP地址
Nginx 192.168.1.10
Tomcat-1 192.168.1.20
Tomcat-2 Centos7.2 192.168.1.30
Mysql 192.168.1.40
Redis 192.168.1.80
2、实验拓扑

在这个图中, nginx做为反向代理,实现静动分离,将客户动态请求根据权重随机分配给两台tomcat
服务器, redis做为两台tomcat的共享session数据服务器, mysql做为两台tomcat的后端数据库。
3、 nginx安装配置
使用Nginx作为Tomcat的负载平衡器, Tomcat的会话Session数据存储在Redis,能够实现零宕机的
7x24效果。因为将会话存储在Redis中,因此Nginx就不必配置成stick粘贴某个Tomcat方式,这样
才能真正实现后台多个Tomcat负载平衡。

(1) 安装nginx
安装nginx依赖包
yum -y install openssl-devel pcre-devel zlib-devel
编译安装nginx

链接nginx命令目录
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
(2)配置nginx反向代理: 反向代理+负载均衡+健康探测, nginx.conf文件内容:

Vim  /usr/local/nginx/conf/nginx.conf  添加20 添加upstream backend_tomcat {server 192.168.1.20:8080 weight=1 max_fails=2 fail_timeout=10s;server 192.168.1.30:8080 weight=1 max_fails=2 fail_timeout=10s;}24添加proxy_connect_timeout 75;proxy_send_timeout 75;proxy_read_timeout 75;proxy_buffer_size 4k;proxy_buffers 4 32k;proxy_busy_buffers_size 64k;proxy_temp_file_write_size 64k;48 添加location / {           # root   html;            # index  index.jsp index.html index.htm;             proxy_pass http://backend_tomcat;proxy_redirect off;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;        }

50添加

(2) 开启nginx并查看端口


4、安装部署tomcat应用程序服务器(两台都是)
(1)安装tomcat并开启,查看端口

20 tar zxf apache-tomcat-8.5.35.tar.gz
将解压生成的文件夹移动到/usr/local/下,并改名为tomcat

   21  mv apache-tomcat-8.5.35 /usr/local/tomcat   22 /usr/local/tomcat/bin/startup.sh   23 netstat -anpt |grep  8080

浏览器测试

好了,大家可以看到访成功。说明我们的tomcat安装完成,下面我们来修改配置文件
(2)设置默认虚拟主机
vim /usr/local/tomcat/conf/server.xml 150添加


(3)创建所需目录和网页

   30  mkdir -p /web/webapp1   31  vim /web/webapp1/index.jsp


<%@page language="java" import="java.util.*" pageEncoding="UTF-8"%>

tomcat-1   

Session serviced by tomcat

<% session.setAttribute("abc","abc");%>
Session ID<%=session.getId() %>
Created on<%= session.getCreationTime() %>

(4)重启tomcat

(5)浏览器测试

验证健康检查的方法可以关掉一台tomcat主机,用客户端浏览器测试访问。从上面的结果能看出两次访问, nginx把访问请求分别分发给了后端的tomcat-1和tomcat-2,客户端的访问请求实现了负载均衡,但sessionid并不一样。 所以,到这里我们准备工作就全部完成了,下面我们来配置tomcat通过redis实现会话保持。

5、 安装redis
(1)编译安装redis

   23  rz   24  tar zxf redis-4.0.14.tar.gz    25  mv redis-4.0.14 /usr/local/redis   26  cd /usr/local/redis/   27  make && make install

(2)切换到utils目录下,执行redis初始化脚本install_server.sh

   29  cd utils/   30  ./install_server.sh    31  netstat  -anput | grep redis

通过上面的安装过程,我们可以看出redis初始化后redis配置文件为
/etc/redis/6379.conf,日志文件为/var/log/redis_6379.log,数据文件dump.rdb存
放到/var/lib/redis/6379目录下,启动脚本为/etc/init.d/redis_6379。
现在我们要使用systemd,所以在 /etc/systems/system 下创建一个单位文件名字
为 redis_6379.service。
(3)修改 /etc/redis/6379.conf
bind 0.0.0.0 70修改
requirepass 123.com 501去注释设置密码
(4)重启一下redis并看端口

/etc/init.d/redis_6379 restart
netstat -anput | grep redis
(5)redis测试

6、 配置tomcat session redis同步 (两台tomcat都是)
(1)下载tomcat-redis-session-manager相应的jar包,下载完成后拷贝到$TOMCAT_HOME/lib中

(2)修改/usr/local/tomcat/conf/context.xml 倒数第二行添加

    去注释

(3)重启tomcat

(4)redis重启

(5)浏览器测试


可以看出,分别访问了不同的tomcat,但是得到的session却是相同的,说明达到了集群的目的。
(6)redis测试

  1. tomcat连接数据库
    <1> mv /usr/local/tomcat/webapps/ROOT/ /web/webapp1/


192.168.1.80 作为mysql数据库服务器
(1)mysql配置


mysql -u root -p 123
grant all on . to javauser@'192.168.1.%' identified by 'javapasswd';
create database javatest;
use javatest;
create table testdata(id int not null auto_increment primary key,foo varchar(25),bar int);
insert into testdata(foo,bar) values ('hello','123456'),('ok','654321'),('xgp','1123645');
select * from testdata;
(2)tomcat配置(两台都是)
进入配置教程

<1>/usr/local/tomcat/conf/context.xml 倒数第二行添加


<2>创建所需目录和网页

  55  cd /web/webapp1/   56  mkdir WEB-INF   57  vim WEB-INF/web.xml  添加   MySQL Test App        DB Connection      jdbc/TestDB      javax.sql.DataSource      Container  

<3>创建test.jsp网页
vim /web/webapp1/test.jsp 修改

<%@ page language="java" import="java.sql.*" pageEncoding="GB2312"%>MySQL-1connect MySQL
<%String driverClass="com.mysql.jdbc.Driver";String url="jdbc:mysql://192.168.1.80:3306/javatest";String username = "javauser";String password = "javapasswd";Class.forName(driverClass);Connection conn=DriverManager.getConnection(url, username, password);Statement stmt=conn.createStatement();ResultSet rs = stmt.executeQuery("select * from testdata");while(rs.next()){out.println("
foo:"+rs.getString(2)+"bar:"+rs.getString(3));}rs.close();stmt.close();conn.close();%>

<4>重启tomcat

40 /usr/local/tomcat/bin/shutdown.sh
41 /usr/local/tomcat/bin/startup.sh

(3)浏览器测试


数据 服务器 服务 内存 存储 配置 文件 线程 应用 支持 测试 均衡 用户 信息 数据库 模型 浏览器 目录 网络 集群 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 广东万易互联网科技有限公司惠州分公司 盈实互联网科技 美国互联网科技 华中科技大学互联网 云电互联网科技 卓越科技互联网 招聘 济南华为互联网科技产业总部基地 广西互联网科技孵化中心 互联网金融科技展 翼展科技 首家互联网医院 高科技互联网发展前景如何 四川慕妮娅互联网科技有限公司 山东有哪些互联网科技公司 21世纪互联网科技成就 广西科技产业互联网是什么 互联网科技新闻 互联网公司属于科技吗 银川新华互联网科技学校是国营吗 众联互联网络科技 互联网科技对化妆品行业 鑫亿盛互联网科技 北京互联网络科技有限公司 亿人帮互联网科技 互联网金融和金融科技 中盈科技互联网信息有限公司 成都互联网科技公司100强 互联网科技创新服务 成都铂石互联网科技做什么的 本届互联网博览会上的黑科技 福仕德教育科技互联网
0