栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Redisson--------基础入门

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Redisson--------基础入门

一、前言

之前用的Redis,都是用的原生的RedisTempale或者是StringRedisTemplate,各种API非常的难易记忆,每次用的时候还得去网上查询API文档,而Redisson的宗旨是促进使用者对Redis的关注分离(Separation of Concern),从而让使用者能够将精力更集中地放在处理业务逻辑上。这里放上redisson的github链接,先说明,redisson除了开源版本,还有付费的pro版本,以后介绍的某些高级功能,如果是pro版本的,会标出

二、在SpringBoot中快速集成

Redisson是建立在Redis的基础之上的,所以需要在SpringBoot项目中引入Redis。

  • 导入依赖


    org.redisson
    redisson-spring-boot-starter
    3.16.3



-----------------------------------------------------------------



    org.redisson
    redisson
    3.16.3

  • 在SpringBoot中配置。官方文档给出了基于配置类和基于配置文件的形式,还有基于集群,基于主从,基于单节点模式的配置方式都不一样,我这里给出基于配置文件的单节点模式,其他形式参考官方文档。
  1. redisson.yml文件
singleServerConfig:
  idleConnectionTimeout: 10000  #连接空闲超时,单位:毫秒 默认:10000
  connectTimeout: 10000  #连接超时,单位:毫秒。默认:10000
  timeout: 3000 #命令等待超时,单位:毫秒 默认:3000
  retryAttempts: 3 #命令失败重试次数
  retryInterval: 1500 #命令重试发送时间间隔,单位:毫秒
 # lockWatchdogTimeout: 30000 #监控锁的看门狗超时,单位:毫秒  该参数只适用于分布式锁的加锁请求中未明确使用leaseTimeout参数的情况。如果该看门口未使用lockWatchdogTimeout去重新调整一个分布式锁的lockWatchdogTimeout超时,那么这个锁将变为失效状态。这个参数可以用来避免由Redisson客户端节点宕机或其他原因造成死锁的情况。
  password: null
  clientName: null #客户端名称
  subscriptionsPerConnection: 5 #单个连接最大订阅数量
  address: "redis://xxx.xxx.xxx.xxx:6379"
  subscriptionConnectionMinimumIdleSize: 1 #从节点发布和订阅连接的最小空闲连接数
  subscriptionConnectionPoolSize: 50 #从节点发布和订阅连接池大小
  # 集群模式下不支持该选项
  database: 2
  dnsMonitoringInterval: 5000 #DNS监控间隔,单位:毫秒 在启用该功能以后,Redisson将会监测DNS的变化情况
  sslEnableEndpointIdentification: true #启用SSL终端识别,默认为true
threads: 0 #线程池数量 默认值: 当前处理核数量 * 2
nettyThreads: 0 #Netty线程池数量 默认值: 当前处理核数量 * 2 ,这个线程池数量是在一个Redisson实例内,被其创建的所有分布式数据类型和服务,以及底层客户端所一同共享的线程池里保存的线程数量。
codec: #编码 默认值:org.redisson.codec.JsonJacksonCodec,Redisson的对象编码类是用于将对象进行序列化和反序列化,以实现对该对象在Redis里的读取和存储
  ! {}
"transportMode": #传输模式 默认:TransportMode.NIO linux系统下可以使用RPOLL,性能高
  "NIO"
  1. RedisConfig
@Configuration
public class RedissonConfig {
    @Bean(destroyMethod="shutdown")
    public RedissonClient getRedissonClient() throws IOException {
        ResourceLoader loader = new DefaultResourceLoader();
        Resource resource = loader.getResource("redisson.yml");
        Config config = Config.fromYAML(resource.getInputStream());
        return Redisson.create(config);
    }
}
三、增删改查操作

每个Redisson对象实例都会有一个与之对应的Redis数据实例。Redisson的分布式RBucket对象是一种通用对象桶可以用来存放任类型的对象。先来写新增和查询。先通过redisson对象通过getBucket方法,在Redis中创建一个字符串类型的对象。这个对象的引用就是下面的bucket,它可以存放任意的Cityr对象实体。RBucket桶的神奇功能是:可直接存储City对象,省略了我们的City对象转为JSON字符串的过程。RBucket对象可以视为Redis中的 String类型,每个RBucket对象对应着一个值。

  • 新增:将City对象通过RBucket存放到Redis中。
  • 查询的时候,通过KEY找到桶。再通过get() 方法取出缓存在Redis中的 指定的KEY的VALUE。
  • 修改就是通过KEY找到这个桶RBucket,然后重新SET一下。
  • 删除更简单了,找到这个桶,调用delete相关方法即可。
@Controller
@RequestMapping("redisson")
public class RedissonController {
    @Autowired
    RedissonClient redissonClient;
    @ResponseBody
    @GetMapping("get/{id}")
    public City get(@PathVariable Long id){
        RBucket city = redissonClient.getBucket("city"+id.toString());
        return city.get();
    }
    @ResponseBody
    @DeleteMapping("delete/{id}")
    public String delete(@PathVariable Long id){
        RBucket bucket = redissonClient.getBucket("city" + id.toString());
        Optional optionalCity=Optional.ofNullable(bucket.getAndDelete());
        return optionalCity.toString();
    }
    @ResponseBody
    @PutMapping("update")
    public String update(@RequestBody City city){
        RBucket bucket = redissonClient.getBucket("city"+city.getId().toString());
        //更新缓存
        if (bucket!=null)
        {
             bucket.set(city);
             return "ok";
        }
        else return "error";
    }
    @ResponseBody
    @PostMapping("add")
    public String add(@RequestBody City city){
        RBucket bucket = redissonClient.getBucket("city"+city.getId().toString());
        try {
            bucket.set(city);
            return "ok";
        } catch (Exception e) {
            e.printStackTrace();
            return "error";
        }
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/299352.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号