首页 > 数据库 >Redisson 介绍及使用

Redisson 介绍及使用

时间:2023-11-12 21:56:43浏览次数:40  
标签:缓存 redis Redis 介绍 Redisson 使用 public 分布式

目录

一、介绍

Redisson是一个在Redis的基础上实现的Java驻内存数据网格(In-Memory Data Grid)。它不仅提供了一系列的分布式的Java常用对象,还提供了许多分布式服务。

其中包括(BitSet, Set, Multimap, SortedSet, Map, List, Queue, BlockingQueue, Deque, BlockingDeque, Semaphore, Lock, AtomicLong, CountDownLatch, Publish / Subscribe, Bloom filter, Remote service, Spring cache, Executor service, Live Object service, Scheduler service) Redisson提供了使用Redis的最简单和最便捷的方法。

Redisson的宗旨是促进使用者对Redis的关注分离(Separation of Concern),从而让使用者能够将精力更集中地放在处理业务逻辑上。

一个基于Redis实现的分布式工具,有基本分布式对象和高级又抽象的分布式服务,为每个试图再造分布式轮子的程序员带来了大部分分布式问题的解决办法。

Redisson和Jedis、Lettuce有什么区别?

Redisson和它俩的区别就像一个用鼠标操作图形化界面,一个用命令行操作文件。Redisson是更高层的抽象,Jedis和Lettuce是Redis命令的封装。

  • Jedis是Redis官方推出的用于通过Java连接Redis客户端的一个工具包,提供了Redis的各种命令支持

  • Lettuce是一种可扩展的线程安全的 Redis 客户端,通讯框架基于Netty,支持高级的 Redis 特性,比如哨兵,集群,管道,自动重新连接和Redis数据模型。Spring Boot 2.x 开始 Lettuce 已取代 Jedis 成为首选 Redis 的客户端。

  • Redisson是架设在Redis基础上,通讯基于Netty的综合的、新型的中间件,企业级开发中使用Redis的最佳范本。

Jedis把Redis命令封装好,Lettuce则进一步有了更丰富的Api,也支持集群等模式。但是两者也都点到为止,只给了你操作Redis数据库的脚手架,而Redisson则是基于Redis、Lua和Netty建立起了成熟的分布式解决方案,甚至redis官方都推荐的一种工具集。

二、作用

分布式对象:分布式对象简单来说就是存储在Redis中的Java对象。

Redisson允许你在分布式环境中创建Java对象,并将它们存储在Redis中。这样,不同的Java应用程序或服务就能够共享和访问这些对象,实现数据共享和数据同步。

分布式集合:简单来说就是将集合放在Redis中,并且可以多个客户端对集合进行操作。

Redisson支持常见的分布式数据结构,如List、Set、Map、Queue等,使得多个Java应用程序可以并发地访问和修改这些集合。

分布式锁:通过Redisson,你可以轻松地实现分布式锁,确保在分布式环境中的并发操作的正确性和一致性。

缓存:通过Redisson能够轻松的基于redis实现项目中的缓存。

三、使用示例

1、maven依赖

<!-- 原生,本章使用-->
<dependency>
    <groupId>org.redisson</groupId>
    <artifactId>redisson</artifactId>
    <version>3.13.6</version>
</dependency>

<!-- 另一种Spring集成starter,本章未使用 -->
<dependency>
    <groupId>org.redisson</groupId>
    <artifactId>redisson-spring-boot-starter</artifactId>
    <version>3.13.6</version>
</dependency>

2、配置类

@Configuration
public class RedissionConfig {
    @Value("${spring.redis.host}")
    private String redisHost;

    @Value("${spring.redis.password}")
    private String password;

    private int port = 6379;

    @Bean
    public RedissonClient getRedisson() {
        Config config = new Config();
        config.useSingleServer().
                setAddress("redis://" + redisHost + ":" + port).
                setPassword(password);
        config.setCodec(new JsonJacksonCodec());
        return Redisson.create(config);
    }
}

3、使用分布式锁

@Resource
private RedissonClient redissonClient;

RLock rLock = redissonClient.getLock(lockName);
try {
    boolean isLocked = rLock.tryLock(expireTime, TimeUnit.MILLISECONDS);
    if (isLocked) {
        // TODO
                }
    } catch (Exception e) {
            rLock.unlock();
    }

4、使用分布式对象

@Test
public void get(){
    //获得一个RBucket实现类,参数是redis数据库中的key值
    RBucket<User> bucket = redissonClient.getBucket("user:1" );
    User user = bucket.get();
    System.out.println(user);
}

5、使用分布式集合

@Test
public void list(){
    //在redis中创建一个key为testList的list
    RList<String> list = redissonClient.getList("testList");
    /*
    注意:只要执行了add操作,就已经在redis中存入该数据了,并不需要另外的其他操作
    */
    list.add("one");
    list.add("two");
    list.add("three");
}

6、redisson 缓存

Redisson依照Spring Cache标准提供了基于Redis的Spring缓存实现。 每个缓存(Cache)实例都提供了了两个重要的可配置参数:过期时间(ttl)和最长空闲时间(maxIdleTime),如果这两个参数都未指定或值为0,那么实例管理的数据将永久保存。

使用Redisson实现缓存的一般步骤为:

添加依赖

除了之前引入的Redisson的依赖,还添加SpringCache的依赖

<!--这里是SpringCache的启动依赖-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-cache</artifactId>
</dependency>

<dependency>
    <groupId>org.redisson</groupId>
    <artifactId>redisson-spring-boot-starter</artifactId>
    <version>3.16.1</version>
</dependency>

启动类添加注解

在项目启动类添加@EnableCaching注解

配置缓存管理器

在配置类中配置一个缓存管理器

@Configuration
public class RedissonConfiguration {

    @Bean
    public RedissonClient redissonClient() {
        Config config = new Config();
        config.useSingleServer().setAddress("redis://127.0.0.1:6379");
        config.setCodec(new JsonJacksonCodec());
        return Redisson.create(config);
    }

    //这里是一个缓存管理器
    @Bean
    public CacheManager cacheManager(RedissonClient redissonClient){
        /*
        为Redisson的缓存管理器设置参数:
            1.缓存数据12分钟过期。
            2.最长空闲时间为10分钟。
        */
        CacheConfig conf = new CacheConfig(12 * 60 * 1000, 10 * 60 * 1000);
        HashMap<String, CacheConfig> map = new HashMap<>();
        map.put("userCache",conf);
        RedissonSpringCacheManager manager = new RedissonSpringCacheManager(redissonClient,map);
        return manager;
    }
}

使用缓存

这里是模拟通过id查询用户的Service方法。

通过@Cacheable注解使方法启用缓存。

@Cacheable(value = "userCache",key = "#id",cacheManager = "cacheManager")
public User queryById(Integer id) {
    return userMapper.selectById(id);
}

参考:

https://blog.csdn.net/black_pp/article/details/131836775

https://zhuanlan.zhihu.com/p/550725196

标签:缓存,redis,Redis,介绍,Redisson,使用,public,分布式
From: https://www.cnblogs.com/linhuaming/p/17827949.html

相关文章

  • excel对比两个文档,判断范围内的取值是否在另一个列表内存在(vlookup函数的使用)
    背景:sheet1表为原始数据:sheet2表为新的数据副本,目标是查询sheet2列表中是否存在sheet1表的数据,并且标记出来,且获取sheet2列表的一些数据至sheet1列表中,补充D与E两列的数据情况: 一、vlookup函数介绍:作用:垂直查找(按列号查找)函数说明:vlookup(lookup_value,table_array,col_......
  • Feign的使用
    1.http客户端FeignRestTemplate方式调用存在的问题2.Feign的介绍3.定义使用Feign客户端  总结 ......
  • MediatR基本使用
    MediatR可以在进程内实现消息通信。一、安装MediatR程序包管理控制台执行以下代码:dotnetaddpackageMediatR--version12.1.1二、注册MediatR服务services.AddMediatR(cfg=>{cfg.RegisterServicesFromAssembly(Assembly.GetExecutingAssembly());});三、发送消......
  • 使用vue路由
    1.安装vue-router对应版本号为233344使用以下命令[email protected]或者[email protected].在main.js里面使用vue-routerimportVuefrom'vue'importAppfrom'./App.vue'importVueRouterfrom'vue-router'Vue.config.product......
  • 数字IC后端使用的各类文件及解释
    最后修改日期:2023/11/121.HDL综合(使用SDC)这里以SynopsysDesignCompiler(SDC)为例解释。工艺是SMIC130。1.1.TCL(ToolCommandLanguage)配置文件(.tcl)使用TCL对SDC过程进行配置。1.1.1.SDC参数配置下面展示了一些对SDC进行配置的tcl语句。setDC_S_DESIGN<TOP......
  • AHF安装以及使用
    AHF简介1.AHF的诞生就是为了与时俱进,让DBA们收集系统日志以及故障日志更加快捷,同时让Oracle也能够快速定位问题并提供对应的解决方案,号称是每个DBA必备工具。2.AHF现在默认绑定在DB12+以及GRID12+的RU中,同时最新的版本也可以通过patch:30166242获取,其对应RU与AHF版本历史如下:......
  • python3使用pymsql操作mysql数据库
    操作系统:Windows10_x64python版本:3.9.2pymysql版本:1.0.2MySQL版本:5.7.38 之前写过一篇关于python操作mysql数据库的文章:https://www.cnblogs.com/MikeZhang/p/pythonOptMysql20170703.html当时是基于python2.7和mysql5.5来整理的,但目前python2.7已经不再维护,主......
  • Vue使用vuex刷新页面后state数据丢失
    使用 createPersistedState做持久化安装:npminstallvuex-persistedstate--save使用:importVuefrom'vue';importVuexfrom'vuex';importcreatePersistedStatefrom'vuex-persistedstate'importnavCollapsefrom'./modules/navCol......
  • openGauss学习笔记-121 openGauss 数据库管理-设置密态等值查询-使用JDBC操作密态数据
    openGauss学习笔记-121openGauss数据库管理-设置密态等值查询-使用JDBC操作密态数据库121.1连接密态数据库连接密态数据库需要使用驱动包gsjdbc4.jar,具体JDBC连接参数参考基于JDBC开发章节介绍。JDBC支持密态数据库相关操作,需要设置enable_ce=1,示例如下。publicstaticConne......
  • 如何在“radio”输入字段中使用“required”属性
    内容来自DOChttps://q.houxu6.top/?s=如何在“radio”输入字段中使用“required”属性我只是想知道如何正确使用HTML5中的新输入属性"required"来处理单选按钮。每个单选按钮字段是否都需要像下面这样的属性,或者只有一个字段有该属性就足够了?<inputtype="radio"name="colo......