spring4.0.9结合redis进行数据的缓存--续1
来源:互联网 发布:实用安卓pp推荐知乎 编辑:程序博客网 时间:2024/05/26 15:57
我继续改造我上一篇文章中提到的项目,这里需要实现几个目标:
一、redis集群(一主两从)的主从复制
二、读写分离
三、redis只做缓存(redis也会进行持久化),MySQL做持久化。
四、使用容灾部署实现高可用(哨兵sentinel)
一、redis集群(一主两从)的主从复制
我这里启动三台虚拟机,分别是:
1、192.168.100.131(主机)
2、192.168.100.132(从机1)
3、192.168.100.133(从机2)
启动三台机器,三台机器的的redis.conf 文件需要做一些配置,由于文件内容太长,
我这里简单写下我的主要配置
主机的redis.conf
bind 0.0.0.0 masterauth xujiandu slave-read-only yes requirepass xujiandu从机的redis.conf
slaveof 192.168.100.131 6379 requirepass xujiandu masterauth xujiandu
启动三台虚拟机,然后通过命令启动redis.server(指定配置好的redis.conf)
打开redis.cli
输入info Replication
如下所示,表示已经启动成功
启动完毕之后,我启动项目,我的项目会将我mysql的常用数据缓存的redis里面。
第一次使用命令keys * 查询的时候,我们看到里面并没有任何值,我启动完项目之后,实现了主从复制,如下图所示
二、读写分离
redis一般是用作内存数据库,一般不存在IO瓶颈,但是单台redis总是有极限,虽然磁盘io瓶颈少了,如果有persistent的需求,这样的话IO瓶颈,所以还是需要用redis cluster进行读写分离。只要主服务器之只能进行写,从服务器进行读。然后通过主从复制实现数据的最终一致性。我们在主服务器的redis.conf配置如下属性即可。
slave-read-only yes
加入该属性,从服务器写入的操作将会提示错误。
三、Redis只做缓存(redis也会进行持久化),MySQL做持久化。redis持久化方式有2中,分别是RDB,AOF。
1、RDB 持久化可以在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot)。
2、AOF 持久化记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集。 AOF 文件中的命令全部以 Redis 协议的格式来保存,新命令会被追加到文件的末尾。 Redis 还可以在后台对 AOF 文件进行重写(rewrite),使得 AOF 文件的体积不会超出保存数据集状态所需的实际大小。Redis 还可以同时使用 AOF 持久化和 RDB 持久化。 在这种情况下, 当 Redis 重启时, 它会优先使用 AOF 文件来还原数据集, 因为 AOF 文件保存的数据集通常比 RDB 文件所保存的数据集更完整。你甚至可以关闭持久化功能,让数据只在服务器运行时存在。
我这里2种方式都会使用那么需要配置配置一下redis.conf
RDB配置
1、设置数据保存到数据文件中的save规则
save 900 1save 300 10save 60 100002、文件名称
dbfilename dump.rdb #指定rdb保存到本地数据库文件名
AOF配置
appendonly yes appendfilename "appendonly.aof"appendfsync everysec配置好了之后。会在你是指定的目录下生成对应的dump.rdb和appendonly.aof
另外, redis的持久化是不可靠的,很有可能会丢失最后一次的数据。网上说了好几种数据库和redis同步的方案,
方案1、程序同时写Redis和MySQL
方案2、程序写MySQL, 使用Gearman调用MySQL的UDF,完成对Redis的写
方案3、程序写MySQL, 解析binlog,数据放入队列写Redis
方案4、程序写Redis,并将写放入MQ写MySQL
其实本质上都是需要保证的是Reids和MySQL的数据一致性。
方案2、3、4没有具体实践过,方案1存在缺点:用户如果直接操作数据库,不通过程序的话,那么数据是无法被写到redis里面的。
四、使用容灾部署实现高可用(哨兵sentinel)
我这里使用搭建集群的整体架构,使用主从结构+哨兵(sentinel)来进行容灾,先说说哨兵的作用
1、监控:监控主从是否正常
2、通知:出现问题时,可以通知相关人员
3、故障迁移:自动主从切换
4、统一的配置管理:连接者询问sentinel取得主从的地址
sentinel和主从关系入下图所示
下面是我对sentinel.conf的配置
主sentinel.conf
bind 0.0.0.0port 26379sentinel monitor mymaster 127.0.0.1 6379 2sentinel down-after-milliseconds mymaster 3000
从sentinel.conf
bind 0.0.0.0port 26379sentinel monitor mymaster 192.168.100.131 6379 2sentinel down-after-milliseconds mymaster 3000启动哨兵
进入你安装redis的目录输入 ./redis-sentinel /你所配置的sentinel的路径/sentinel.conf
启动三台虚拟机的redis服务,然后shutdown主节点。入下图所示
在哨兵将会进行投票,从2台丛机中选择一个升级为主机。
最后:现在我的项目已经从原来的:单机mysql演变成了如下图所示的架构
- spring4.0.9结合redis进行数据的缓存--续1
- spring4.0.9结合redis进行数据的缓存
- spring结合redis如何实现数据的缓存
- spring结合redis如何实现数据的缓存
- spring结合redis如何实现数据的缓存
- spring结合redis如何实现数据的缓存
- spring结合redis如何实现数据的缓存
- spring aop结合redis实现数据缓存
- 使用python 结合mysql和redis进行缓存设计
- 缓存数据redis的配置-
- 配置 Spring4.0 注解Cache+Redis缓存
- 配置 Spring4.0 注解Cache+Redis缓存
- 使用redis进行缓存
- Django之django-redis对数据进行简单缓存
- Redis之—— Spring4.0 注解Cache+Redis缓存
- spring + redis 实现数据的缓存
- spring + redis 实现数据的缓存
- redis分页数据的缓存策略
- 如何学好C/C++语言
- DBUtils简单使用
- Fortran基本用法小结
- javaweb之Servlet
- 简述Activity的生命周期
- spring4.0.9结合redis进行数据的缓存--续1
- commons-Configuration解析XML或者Properties
- IOS屏幕适配
- 数据库水平切分(拆库拆表)的实现原理解析(转)
- 分布式数据库拆表拆库的常用策略
- [09]表单元素(上)
- bootstrap fileinput 完整例子(有后台java版)
- wc2010 bzoj1758(点分治+二分+单调队列) TLE
- 项目管理工具--Maven