Redis
下载/安装/启动
第一步:下载c语言的编译环境
yum install gcc-c++
创建一个redis目录 在/usr/local下面
mkdir /usr/local/redis
在redis的目录下 下载redis的安装包
如果不能使用wget指令 安装wget
yum -y install wget
解压安装包 到当前目录下
tar -zxvf redis-5.0.7.tar.gz
编译 进入到redis目录中 redis-5.0.7
make
安装 执行命令后,会生成一个bin目录
make PREFIX=/usr/local/redis install
启动redis
前端启动
cd bin 进入到bin目录下
./redis-server 启动后会展示redis数据库的图 默认的端口号6379
注意: 退出窗口,redis服务器也就停止了
后端启动
修改 redis.conf文件
第一处:放开可以远程访问redis的请求 bind 127.0.0.1 -----> # bind 127.0.0.1
第二处:放开可以远程访问redis的请求 protected-mode yes -----> protected-mode no
第三处:允许后端启动 daemonize no ----> daemonize yes
启动redis
在bin目录下
./redis-server redis.conf
查看redis是否启动成功
ps -ef | grep redis
使用redis客户端 登录进入测试redis数据库是否可用
进入redis客户端指令
./redis-cli
输入指令 ping 测试是否连接成功 如果成功展示“pong”
退出redis客户端指令
ctrl+c
关闭redis服务器
强制关闭
先查询redis的pid值
ps -ef | grep redis
redis-server 的pid值
使用指令 kill -9 redis的pid值
kill -9 xxxx
使用 客户端方式关闭
./redis-clif shutdown
代码演示
pom.xml文件
<!--redis的连接jar包-->
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.2.2</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.10.0</version>
<scope>compile</scope>
</dependency>jedis.properties文件
#详细的jedis配置
#最大活动对象数
redis.pool.maxTotal=1000
#最大能够保持idel状态的对象数
redis.pool.maxIdle=100
#最小能保持idel的对象数
redis.pool.minIdle=10
#当池内没有返回值对象时,最大等等待时间
redis.pool.maxWaitMills=10000
# 当调用borrow Object方法时,是否进行有效检查
redis.pool.testOnBorrow=true
# 当调用return Object方法时,是否进行有效性检查
redis.pool.testOnReturn=true
#空闲连接 检测线程 周期 毫秒数
redis.pool.timeBetweenEvictionRunsMillis=30000
#对于空闲连接 检测线程 每次检测的连接资源的个数 默认值为3
redis.pool.numTestPerEvictionRun=50
#redis服务器的ip
redis.ip=192.168.227.130
#端口号
redis.port=6379JedisPoolUtil工具类
//这个是redis
public class JedisPoolUtil {
//准备一个redis连接池对象 空的
private static JedisPool pool=null;
static {
//获取配置文件
InputStream is = JedisPoolUtil.class.getClassLoader().getResourceAsStream("jedis.properties");
Properties properties = new Properties();
try {
properties.load(is);
} catch (IOException e) {
e.printStackTrace();
}
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(Integer.parseInt(properties.getProperty("redis.pool.maxTotal")));
config.setMinIdle(Integer.parseInt(properties.getProperty("redis.pool.maxIdle")));
//初始化
pool = new JedisPool(config, properties.getProperty("redis.ip"), Integer.parseInt(properties.getProperty("redis.port")));
}
//对外提供获取redis的连接
public static Jedis getJedis(){
return pool.getResource();
}
}
接口层
//登录业务接口
public interface AdminService {
Admin queryRegister(String username,String password);
//登录效验查询 走redis json
ResultObject findAdminByRedis(Admin admin);
}
接口层实现类
@Service
public class AdminServiceImpl implements AdminService {
@Autowired
private AdminMapper adminMapper;
public Admin queryRegister(String username, String password) {
return adminMapper.queryRegister(username, password);
}
//再调用数据库的时候,做一个业务判断
/**
* 先查询redis数据库 如果redis数据库存在该信息,则不走mysql数据库
* 如果redis数据库中没有查询到信息,我们就走mysql数据库,同时会把查询到的信息存进redis中
*/
@Override
public ResultObject findAdminByRedis(Admin admin) {
//先从连接池中获取redis连接对象
Jedis jedis = JedisPoolUtil.getJedis();
String redisAdmin = jedis.get("admin");//存储 key值 hash
/**
* 一个admin 对应的map值
*/
Admin mysqlAdmin = null;
// 一个 admin 对应的map值
// field value
// login_name login_pwd
if (redisAdmin==null) {
mysqlAdmin = adminMapper.queryRegister(admin);
// ObjectMapper objectMapper = new ObjectMapper();
if (mysqlAdmin != null) {
ObjectMapper objectMapper = new ObjectMapper();
try {
redisAdmin = objectMapper.writeValueAsString(mysqlAdmin);
jedis.set("admin", redisAdmin);
} catch (JsonProcessingException e) {
e.printStackTrace();
} finally {
jedis.close();
}
return new ResultObject(200, "helloWorld", mysqlAdmin);
} else {
// 201表示没有查到信息 从mysql中也没有查到信息
return new ResultObject(201, "您的用户名和密码不匹配", null);
}
}else {
System.out.println("从redis中读取到admin信息");
System.out.println("-------"+redisAdmin);
}
// 200表示从redis查到信息
return new ResultObject(200,"helloQWorld",mysqlAdmin);
}
}
余下内容
Redis分布式缓存与本地缓存
Redis线程模型IO多路复用
SpringBoot整合Redis框架
Redis持久化机制和集群机制
Redis持久化原理与一致性原理
使用Redis进行二进制形式存储对象
SpringBoot整合Redis注解开发
Mysql与Redis的一致性解决方案 大概有三种解决方案
全量同步与增量同步实现的区别
RedisRDB持久化原理
RedisAOF持久化原理
Redis六大淘汰策略以及事务管理和过期以及key事件监听机制
Redi核心六大淘汰策略
Redis过期回调监听
Redis环境配置对key过期监听
Redis中事务策略Multi
Redis中的 Watch与Multi的区别
基于Redis实现分布式锁
Redis中为什么没有回滚事务
什么是分布式锁 以及应用场景
Redis实现分布式锁的原理
基于Redis实现获取锁代码原理
基于Redis实现释放锁代码原理
在使用分布式锁如果超时应该怎么解决
zk与Redis实现分布式锁的优缺点
测试基于Redis实现分布式锁的代码实现
RedisCluster集群原理
核心哨兵机制
Redis集群主从之分概念
Redis主从复制原理实现
传统一主多从复制存在的缺陷?
在Redis中配置一主多从关系
主从复制存在哪些问题?
哨兵集群架构的设计原理
master如何确定宕机进行重新选择
配置哨兵集群高可用代码实现
Redis缓存穿透概念与解决方案
Redis缓存击穿概念与解决方案
Redis缓存雪崩概念与解决方案
RedisCluster扩容与搜缩以及Jedis支持集群原理
RedisCluster快速实现扩容原理
RedisCluster快速实现卡槽扩容实现原理
master节点宕机之后重新实现
RedisCluster快速实现缩容
RedisCluster支持集群原理
Nginx
概述
Nginx是一款轻量级的web服务器/反向代理服务器以及电子邮件代理服务器
是一款开源免费的web服务器,配置简单易上手
并在BSD-like协议下发行,
由俄罗斯的一位工程师设计开发的,供俄国大型的入口网站以及搜索引擎使用的
特点是:【占用内存少】、【并发能力强 】
在市场上nginx的并发能力在同类产品中网页服务器中表现较优
Nginx是一款高性能的HTTP和反向代理web服务器
同时也是一个IMAP/POP3/SMTP代理服务器
nginx问世在2014年10月4日 发布nginx的第一个版本0.1.0
它的源代码以BSD许可证的形式发布的
由于它具有高稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名世界。
在俄罗斯的网站上已经使用了很多年
据Netcraft统计,2014年 在世界上最繁忙的网站中有11.4%使用nginx作为其服务器或者代理服务器
目前世界上互联网公司 360、百度、京东、新浪、网易、腾讯、淘宝等都在使用
中国市场上大概有70%的公司都在使用它。
原因就是他占用内存少、并发能力强
nginx是由内核和模块两部分组成
其中 ,内核的设计非常的微小和简洁,完成的工作也非常的简单
仅仅通过配置文件将客户端的请求映射到一个location block(location是nginx中的一个指令,用于url匹配)
而这个location中所配置的每个指令将会启动不同的模块完成相应的工作。
在连接高并发的情况下,nginx是Apache服务器的一款不错的替代品
Nginx既可以在内部直接支持Rails和PHP程序对外提供服务,也可以支持作为Http代理服务器对外提供服务
Nginx采用C语言进行编写,不论是系统资源开销还是cpu使用效率都比同类产品性能要好的多。
作用
nginx一般情况下主要是承担负载均衡作用,充当的是反向代理服务器的角色
Nginx相对于Apache服务器的优点
tomcat apache
高并发响应性能好 官方介绍 支持高达 50000/s个并发连接数的响应(静态文件)
内存和CPU占用率很低, 比apache服务器低(内存 1/5, cpu 1/10)
反向代理服务器性能强(可用于负载均衡) 做后期的性能优化
对后端服务器有较好的健康检查机制 (心跳机制)
配置代码简洁而且易上手
Nginx的工作原理
nginx是由内核 和 模块两部分组成。其中,内核的设计非常的微小和简洁,完成的工作也非常的简单
仅仅通过配置文件将客户端的请求映射到一个location block(location是nginx中的一个指令,用于url匹配)
而这个location中所配置的每个指令将会启动不同的模块完成相应的工作。
核心模块: HTTP模块 Event模块 Mail模块
基础模块: HTTP Access模块 HTTP fastCGL模块 HTTP Proxy模块 HTTP Rewrite模块
第三方模块: HTTP Request Hash模块 Notic模块 HTTP Access Key模块
nginx的高并发优势主要得益于内部采用epoll模型,相对于传统的服务器类型不一样(程序架构不同)
epoll模型是linux内核2.6才出现的,nginx采用epoll模型, 异步非阻塞
apache服务器内部采用的是select模型
epoll模型原理:
epoll模型 对于事件句柄的选择不是遍历所有事件通知而是事件响应的
也就是 句柄事件上来立马就选择出来,不需要遍历整个事件句柄链表,因此效率极高。
select模型原理:
select选择句柄的时候,是遍历所有的句柄,也就是句柄有事件响应时,
select需要遍历所有的句柄才能获取到哪些句柄上有事件通知,因此效率较低。
Nginx安装配置
开发步骤:
第一步:需要在 /usr/local 下面创建nginx目录
mkdir /usr/local/nginx
第二步: 下载 nginx的安装包
如果没有该命令 执行 yum -y install wget
第三步:解压安装包
tar -zxvf nginx-1.13.0.tar.gz
编译
进入到nginx-1.13.0目录中
找到一个名字叫做configure
执行编译指令
./configure ----编译
编译过程中出现的错误 三个错误
第一个错误: C compile cc is not found 错误
原因是因为:缺少编译环境 安装编译源码所需要的工具和库
执行命令
yum install gcc gcc-c++ ncurses-devel perl
第二个错误: the HTTP rewrite module requires th PCRE library
错误原因:缺少 HTTP rewrite module模块 禁用或者安装所需要的模块即可
如果选择安装的话:
执行指令
yum install pcre pcre-devel
第三个错误: the HTTP gzip module requires the zliblibrary 错误
错误原因:缺少 HTTP zlib类库 我们也是选择安装该模块
执行命令:
yum install zlib gzip zlib-devel
第四步:重新编译
在nginx-1.13.0目录中
执行命令
./configure
安装nginx
make & make install
默认安装到 /usr/local/nginx 下面
启动nginx服务
查看nginx的安装目录
cd /usr/local/nginx
conf 配置文件
html 网站的默认根目录
logs 日志
sbin 软件目录
启动nginx
cd sbin
执行命令
./nginx
查看nginx是否启动成功
ps -ef | grep nginx
在客户端上查看nginx是否启动成功
输入nginx对应的虚拟机的ip号即可查看
nginx默认端口号 80 如果启动成功 查看页面 Welcome to nginx!
nginx其他命令
停止nginx服务器
./nginx -s quit 退出
./nginx -s stop 停止
重载nginx服务器
./nginx -s reload ---->热部署
检查nginx配置文件的情况
./nginx -t
检查nginx环境
./configure
Nginx管理虚拟机
虚拟机概述
虚拟机使用的是特殊的软硬件技术,
它把一台运行在因特网上的服务器主机分成一台台“虚拟”的主机,每台虚拟主机都可以是一个独立的网站,
可以具有独立的域名,具有完整的Internet服务器功能(WWW FTP Emai等)
同一台主机上的虚拟机之间是完全独立的
从网站访问者来看,每一套虚拟主机和一台独立的主机是完全一样的。
利用虚拟主机,不用为每个运行的网站提供一台单独的Nginx服务器或单独运行一组nginx进程
虚拟主机提供了在同一台服务器、同一组nginx进程上运行多个网站的功能。
Nginx的基本配置
三种配置机制
基于域名的虚拟机配置
基于端口号的虚拟机配置
基于ip的虚拟机配置
主配置文件
nginx.conf 该文件在/usr/local/nginx/conf
主配置文件的结构
http{
# 配置一个虚拟机 配置服务器
server{
listen 80; #端口号;
server_name 192.168.68.129; #服务名称/域名名称/ip地址 ;
# 配置默认访问项目首页的地址
location /{
root html; #根目录
index index.html; #默认访问首页
}
}
server{
listen #端口号;
server_name #服务器名称;
location{
root view #根目录
index admin.html #默认访问首页
}
}
}Nginx的负载均衡
Nginx的三种配置
Nginx搭建tomcat集群
FASTDFS
MYCAT见客
shiro
dubbo
Zookeeper
消息队列RabbitMQ