zoukankan      html  css  js  c++  java
  • 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

        

  • 相关阅读:
    面试题3(百思教育面试软件开发岗位笔试题)
    python开发工具安装
    涉及 委托事件 程序运行越来越慢
    整理收藏
    数据库作业创建
    剑指offer-面试题37:序列化二叉树及二叉树的基本操作和测试
    剑指offer-面试题41:数据流中的中位数
    快速排序及其优化
    冒泡排序算法及相应的优化
    leetcode问题:缺失数字
  • 原文地址:https://www.cnblogs.com/scar1et/p/11926139.html
Copyright © 2011-2022 走看看