Redis使用(8)javaSpring整合redis

订阅模式
subscribe channel 订阅频道
publish channel 内容,向频道发布什么内容
底层有pubsub_channel 字典结构 key为channel value为list 存储订阅者
pubsub——patter
缓存穿透与缓存击穿与缓存雪崩
当用户需要查询某个数据,redis缓存中没有,于是向mysql中查询,但是MySQL中也没有,本轮查询失败,当用户很多,给持久层数据库造成很大压力,此时成为缓存穿透。可用布隆过滤器来防止,布隆过滤器将所有可能查询的参数以hash存储,在控制层校验,不符合则丢弃本次请求,避免对底层系统的查询压力。
缓存击穿:是高频率访问某个key,当key过期瞬间会有高频率请求在缓存访问不到,而转去访问数据库,导致服务器宕机,而穿透是因为缓存中没有。可以用分布式锁,是每次只有一个线程能够访问到数据库
缓存雪崩:redis宕机或者redis中大量缓存数据失效导致缓存层失效,所有数据都直接访问数据库。导致数据库高峰压力宕机。
哨兵模式
至少三个哨兵,一个主服务器两个从服务器
每个哨兵都监视(除自己外)所有服务器
当一个哨兵向主服务器发送请求没有回应,该哨兵认为主服务器发生故障,被称为主观下线,当足够多的哨兵发现主服务宕机,会由一个哨兵发起投票,进行failover操作。选择票数高的服务器当选主服务器,这时成为客观下线。
主从配置
只需要配置从机,slaveof 地址 端口号,默认每台机器都是主机,redis默认只能被本地访问,需要修改配置文件。主机用于写,从机用于读。
info replication 查看本机信息
主机断开连接,从机数据不会丢失
主机重新连接即可继续存储数据,从机中原有数据不会丢失。
如果主机宕机 可以随意找一个从节点 slaveof no one,自己当主节点。
springboot整合
导入依赖 springboot-data-lectuce
java中用jedis 线程不安全
spring中lecttuce莱彻斯 线程安全
@Auto wired redistemplate命令
使用redistemplate操控。
默认有redis配置文件,也可以自己写 默认中为<object,object>但实际要用<String ,object>
redis的锁
乐观锁
watch key
监视key的状态
生命周期伴随事务,事务结束watch结束。
解锁 unwatch
redis的事务
单条命令保证原子性,redis的事务没有原子性。事务中的执行具有序列性
redis的事务:一次性、顺序性、排他性。
步骤:开启事务(multi)
命令入库(命令)
执行事务(exec) //或者放弃事务(discard)
事务队列中有语法错误,错误的命令抛出异常,其他命令正常执行。
java整合redis
1.引入maven

    <dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>3.3.0</version>
    </dependency>

2.创建jedis对象

    Jedis jedis = new Jedis("192.168.40.4",6379);
    //如果远程连接应设置redis的conf中NETWORK章节中bind 127.0.0.1改为bind 0.0.0.0
    jedis.select(0);//默认选择0号库
    //获取key
    Set<String> keys = jedis.keys("*");
    for(String key : keys){
    System.out.println("key="+key);
    }
    //删除key
    jedis.del("key1","key2"....);
    //判断是否存在
    jedis.exists(key);
    //设置超时时间
    jedis.expire("key",time);//秒
    jedis.pexpire("key",time);//毫秒
    //操作库相关
    jedis.flushDB();//清空库
    jedis.flushAll();//清空所有库
    //操作
    jedis.set("key","value");
    jedis.get("key");
    //.....
    jedis.close();//释放资源

Springboot整合redis

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务