zoukankan      html  css  js  c++  java
  • redis 学习

    在Java程序中使用redis

    Jedis

    在Java代码中使用redis,引用redis包,使用一个 Jedis 类 ,这个类是可以和 redis数据库直接交互的。

    JedisPool JedisPoolConfig

    使用流水线技术,访问redis,提供读写效率

    在spring中使用redis

    1  因为要使用到连接池,所以需要对连接池进行配置,配置对象 JedisPoolConfig  ,配置空闲数,连接数,最大等待时间

    2  连接工厂RedisConnectionFactory接口,4个实现类 JedisConnectionFactory , JredisConnectionFactory ,  LettuceConnectionFactory  , SrpConnectionFactory 。连接工程配置端口和主机,jedispoolconfig,密码。

    普通的方法,不能将对象保存到redis中,需要我们提供序列化方案,将对象序列化和反序列化。spring提供了封装方案,RedisSerializer 接口,它有实现类

    3  RedisTemplate对象,拥有两个属性keySerializer , valueSerializer ,键序列器,值序列器,配置RedisPlate对象 需要引用 连接工厂 ,或者键值序列化器,也可以使用默认的序列化器。

    redis 6 中操作数据类型

    string list set  hash zset HyperLogLog基数

    spring-data-redis对 有序集合的封装

    TypedTuple 接口 ,一个内部接口,是ZSetOperations接口的内部接口。这个接口定义了两个方法 getValue getScore

    默认的实现类DefaultTypedTuple 

    RedisZSetCommods下的内部类Range ,对范围进行了封装

    redis常用的技术

    事务操作

    mutil  开启事务

    watch key1 [] 监听key1键,被监听的键在事务操作前执行,会触发事务回滚

    unwatch key1[]

    exec 执行事务

    discard 回滚

    在spring中使用redis事务,需要 借助 SessionCallBack 接口

     

    watch监听原理,CAS技术

    流水线pipelined

    redisTemplate.executePipelined(callback)

    发布/订阅

    超时命令,如果redis的键超时了,redis不会收回它,而是标识它

    哨兵模式

    Java代码中使用哨兵,使用哨兵线程池 JedisSentinelPool 对象

    spring代码中 使用哨兵,使用哨兵配置对象 JedisSentinelConfiguration 对象,它要传给连接工厂

    redis和数据库整合,缓存整合

    redis和数据库读操作

    数据缓存往往会在redis设置超时时间,redis上的数据超时后,就不能从redis上读取超时的数据,只能从数据库读取,再缓存到redis。

    redis和数据库写操作

    写操作要考虑到一致性问题。

    写操作时,谨慎点,从数据库读取数据,然后更新数据,再写入redis缓存。

    使用spring机制整合redis缓存

    缓存管理组件  CacheManager

    spring3.1内置了5个缓存管理器

    SimpleCacheManager 最为简单的缓存管理组件

    NoOpCacheManager

    ConcurrentMapCacheManager

    CompositeCacheManager

    EhCacheCacheManager Ehcache最为流行的缓存供应商,Java领域最为广泛的缓存。

     

    redis和spring整合的缓存管理器

    spring3.2

    RedisCacheManager 需要redis服务器的缓存组件,要引用  RedisTemplate 对象, 设置超时时间,缓存名称,缓存名称是后面注解,如@Cacheable的name属性。

     

     

    在配置类上开启缓存 @EnableCaching

     

    @Cacheable:对请求参数和结果缓存,下次用同一个参数请求,就不再调用方法,直接从缓存中拿出数据 一般在缓存中查询数据,如果缓存没有,那么就会执行方法,然后缓存

    @CacheEvict:清空缓存

    @CachePut:更新缓存,在方法执行完毕之后,同时更新缓存中的对应的数据。方法一定会执行。

    keyGenerator 缓存数据标记数据的主键生成策略 serialize 缓存数据,数据的序列化策略

     

    @Caching 一个分组  @CacheConfig   复杂的配置

     

    Cacheable属性introduce
    value / cacheNames 缓存组件的名字,便于cachemanager识别cache
    key 缓存数据使用的key, 缓存数据采用key-value的方式,default method_arg
    keyGenerator key keyGenerator二选一
    cacheManager / cacheResolver  
    condition 符合条件的情况下才缓存
    unless 与condition相反

    不适用缓存的方法

    使用缓存的前提,高命中率,如果一个方法是模糊查询,那么它每次根据请求的参数不同,结果都会不同,那么该方法的命中率低,不适合使用缓存。

    自调用失效问题

    和事务一样,自调用的方法会使缓存失效

  • 相关阅读:
    TS的一些小东西
    关于Vue懒加载问题
    react子传父
    MYSQL存储过程以及结果集
    MYSQL视图 事务 游标 索引及其使用
    MYSQL数据库的修复方法MAC
    MYSQL用户授权以及SQL语句
    MySQL数据库基础知识
    JavaScript对象
    JavaScript控制语句
  • 原文地址:https://www.cnblogs.com/lin7155/p/13757457.html
Copyright © 2011-2022 走看看