redis的使用(下)
Jedis的使用?
Jedis就是redis提供的Java客户端工具(在Java代码中,直接通过jedis就可以操作redis数据库)
加载jedis依赖
连接redis服务器(创建jedis对象;相当于jdbc的connection、mybatis的sqlsession)
通过jedis对象中的方法完成redis的操作(jedis对象中的方法名和redis中的命令名是一样)
把jedis封装成工具类:获取jedis对象;关闭jedis对象
序列化:
把Java对象转换成字节数据/json串
通过commons-lang3提供的工具类/json解析工具
反序列化
把字节数组/json串转换为Java对象
redis作为缓存服务器
A:缓存
缓存就是一个内存区域
缓存:把sql语句执行之后的结果存储在内存中;如果发送同样的sql语句获取数据,就直接从缓存中获取数据,而不去操作数据库
缓存中不适应存储笔记重要的事务:比如财务
缓存:是为了提高检索效率
程序一旦执行了增删改操作,就会把缓存清空==》防止脏读
mybaitis中提供了缓存支持
一级缓存:sqlSession级别的缓存:用同一个sqlSession对象,执行多次相同的查询操作,第一次从数据库中获取数据,后面的多次从缓存中读取数据
一次缓存是默认开启的
二级缓存:sqlSessionFactory级别的缓存:用同一个sqlSessionFactory对象,获取到多个sqlSession,这多个sqlSession执行相同的查询操作,第一次从数据库中获取数据,后面的多次从缓存中获取数据
1):要使用二级缓存,需要开启
在mapper文件中指定要使用二级缓存
2):sqlSession必须关闭掉,数据才会被缓存下拉
3):一旦执行了增删改操作,缓存会被清空(flush)
4):redis实现缓存
mybatis默认是用缓存类PerpetualCache作缓存处理
mybatis支持自定义缓存:可以写一个像PertualCache一样的类,作为mybatis的缓存类;在自定义缓存类中,操作redis完成缓存的处理
为什么要使用redis作为mybatis的缓存工具?
1):redis可以做到持久化
2):redis支持集群环境:可以搭建专门的缓存服务器集群
步骤:
1):写一个缓存类,需要实现mybatis提供的缓存接口Cache
2):实现里面的方法
对比着PerpetualCache完成:把PerpetualCache放入到map中的数据,用redis完成
3):把自定义的缓存类应用到映射文件中:
redis集群环境下的session
负载均衡集群环境,session数据会丢失
解决这个问题:
1):session replication(session 复制)
TomcatA创建一个session,使用完毕之后,把session复制到tomcatB和tomcatC
问题:内存的浪费,网络资源的浪费
2):借助于cookie解决
问题:安全的问题;cookie存储的数据是有限制的;中文的处理
3):nginx的负载策略设置为IP粘着
问题:有可能会造成数据丢失;有可能会造成负载不均衡
3):借助于非关系数据库
告诉集群中的所有的tomcat,session使用的时候,先到redis中获取;如果没有获取到自己创建;使用完毕之后,把session放入到redis中
配置思路:
1):把redis管理的tomcat的session的jar包放入到tomcat的lib目录下
2):在tomcat的context.xml中配置:告诉tomcat要到哪个redis服务器中读取数据
3):重新启动所有的tomcat
4):测试:方法nginx
具体配置:
redis的持久化机制
redis可以自动持久化:自动把内存中的数据写入到磁盘文件;自动把磁盘文件中的内容恢复到内容。
redis的持久化机制有两种:
A:RDB机制
Snapshoting(全本快照)
默认的机制
Snapshoting:全本快照:要做持久化,九八内存中的所有数据都写入到磁盘文件中,把磁盘文件中的原本内容替换掉
持久化时机:
1):关闭服务的时候
2):程序员可以通过命令:主动持久化bgsave
3):redis配置文件中配置的有持久化时机
B:AOF机制
AppendOnlyFile:以日志的方式作增量备份(把对redis进行增删改操作的命令以日志的方式追加到日志文件中)
AOF机制,要使用需要开启
如果开启了AOF机制,AOF机制和RDB机制同时存在;但是在恢复数据的时候,通过AOF机制恢复数据
AOF的持久化时机:
AOF使用中面对的一个问题?
日志文件中有可能会存在对于恢复数据来说,没有任何意义的命令
要解决这个问题,可以通过日志重做完成:根据内存中现有数据完成的日志文件的重做
RDB机制切换为AOF机制,会造成数据丢失
为什么会丢?RDB机制已经恢复了数据,此时新开机的AOF机制里面日志文件是空白,所以会造成数据丢失。
怎么解决:热切换,在RDB机制正常使用的时候,通过命令把AOF机制启用
config set appendonly yes