首页 > 数据库 >Redisson 使用示例

Redisson 使用示例

时间:2024-10-30 16:34:13浏览次数:6  
标签:Redisson get 示例 System 使用 println operation out

Redisson 是一个 Java 的 Redis 客户端,基于 Redis 实现了许多分布式数据结构和功能,例如分布式锁、缓存、限流器、布隆过滤器等。

以下是一些常见的 Redisson 使用示例,来自ChatGPT,用于自学。

Redisson 提供了 RLock 接口用于实现分布式锁,适用于需要同步访问共享资源的分布式应用场景。

Redisson 提供了 RMap,可以在 Redis 中存储键值对,类似于 Java 的 Map,但支持分布式。

Redisson 支持布隆过滤器(RBloomFilter),可用于检测一个元素是否在集合中。

它适用于需要快速判断某元素是否存在于某集合的场景。

Redisson 提供了 RRateLimiter 接口,可用于实现限流功能,控制某一资源的访问速率。

Redisson 也支持发布/订阅模式的分布式消息队列,可以用于事件驱动的应用程序。

Redisson 提供的 RMapCache 支持自动过期和最大容量控制,可用于分布式缓存。

 

public static void main(String[] args) {
// Create a Config instance and configure Redis connection
Config config = new Config();
config.useSingleServer().setAddress("redis://" + REDIS_HOST + ":" + REDIS_PORT).setPassword(redisPassword);
// Create a RedissonClient instance
RedissonClient redissonClient = Redisson.create(config);

// use redissonClient to perform Redis operations
// Example1: get a distributed lock
RLock lock = redissonClient.getLock("myLock");
try {
// Attempt to add a lock and set the automatic expiration time of the lock to 10 seconds
if (lock.tryLock()) {
System.out.println("Successfully get lock, execute business logic");
Thread.sleep(5000); // Simulate task execution
} else {
System.out.println("Can not get lock, execute other logic");
}
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
// release lock
lock.unlock();
}

// Example2: get RMap object
RMap<String, String> map = redissonClient.getMap("myMap");
//put data into the map
map.put("name", "Alice");
map.put("city", "New York");
System.out.println("Name: " + map.get("name"));
System.out.println("City: " + map.get("city"));

// Example3: get RBloomFilter object
RBloomFilter<String> bloomFilter = redissonClient.getBloomFilter("myBloomFilter");
// initialize BloomFilter, set the expected number of elements to 10000 and the false positive probability to 0.01
bloomFilter.tryInit(10000, 0.01);
// add elements to BloomFilter
bloomFilter.add("Alice");
bloomFilter.add("Bob");
// check if elements exist in BloomFilter
System.out.println("Alice exist: " + bloomFilter.contains("Alice"));
System.out.println("Eve exist: " + bloomFilter.contains("Eve"));

// Example4:get RateLimiter object
RRateLimiter rateLimiter = redissonClient.getRateLimiter("myRateLimiter");
// set the rate limit to 5 permits per second
rateLimiter.trySetRate(RateType.OVERALL, 5, 1, RateIntervalUnit.SECONDS);
for (int i = 0; i < 10; i++) {
// try to acquire a permit
if (rateLimiter.tryAcquire()) {
System.out.println("the " + i + " operation is allowed");
} else {
System.out.println("the " + i + " operation was limited in current");
}
}

// Example5: get Topic object
RTopic topic = redissonClient.getTopic("myTopic");
// subscribe to a message
topic.addListener(String.class, new MessageListener<String>() {
@Override
public void onMessage(CharSequence channel, String message) {
System.out.println("Received message:" + message);
}
});
// publish message to the topic
topic.publish("Hello, Redis!");

// Example6: get RMapCache object
RMapCache<String, String> cache = redissonClient.getMapCache("myCache");
// put data into the cache
cache.put("key1", "value1", 10, TimeUnit.SECONDS); // Expires in 10 seconds
System.out.println("Key1: " + cache.get("key1"));
// Delay access for a few seconds and verify expiration time
try {
Thread.sleep(11000); // Delay 11s
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
System.out.println("Key1 after 11 seconds: " + cache.get("key1")); // out put null(Expired)

// close RedissonClient
redissonClient.shutdown();
}

> Task :RedissonExample.main()

Successfully get lock, execute business logic
Name: Alice
City: New York
Alice exist: true
Eve exist: false
the 0 operation is allowed
the 1 operation is allowed
the 2 operation is allowed
the 3 operation is allowed
the 4 operation is allowed
the 5 operation is allowed
the 6 operation is allowed
the 7 operation is allowed
the 8 operation is allowed
the 9 operation is allowed
Received message:Hello, Redis!
Key1: value1
Key1 after 11 seconds: null

标签:Redisson,get,示例,System,使用,println,operation,out
From: https://www.cnblogs.com/wangwy/p/18516056

相关文章

  • js文件切片上传组件resumable.js使用
    接到一个媒体文件切片上传的需求,写demo记录下。前端<fieldset><legend>videopreview</legend><div><videoid="video-preview"controlsmutedheight="112px"width="200px"></video><inputtype="......
  • 如何使用腾讯云CVM搭建出海电商平台
    引言:2024年已经有太多的企业开始了迈出国门,在出海贸易当中进行试水。但由于政策、文化等诸多方面的不同,更多的企业在做低成本的尝试,以避免一次性投入过大带来的损失。因此,越来越多的企业和个人,开始学习电商平台的相关知识,了解电商平台的相关业务,一些开发者们也开始通过了解开源......
  • H7-TOOL自制Flash读写保护算法系列,为兆易创新GD32E23X制作使能和解除算法,支持在线烧录
    说明:很多IC厂家仅发布了内部Flash算法文件,并没有提供读写保护算法文件,也就是选项字节算法文件,需要我们制作。实际上当前已经发布的TOOL版本,已经自制很多了。但是依然有些厂家还没自制,所以陆续开始为这些厂家提供读写保护支持。近期已经自制了STM32H7全系列,N32G003,N32G031,  S......
  • java Date类使用讲解
    怀旧网个人博客地址:怀旧网,博客详情:javaDate类使用讲解1.Date类的概述:​java.util.Date类,表示一个日期和时间,内部精确到毫秒2.Date类中的构造方法:​publicDate():创建当前系统时间对应的日期对象​publicDate(longdate):创建以标准基准时间为基准指定偏移毫秒数,对应时......
  • 使用AWS Snowball迁移大量数据上云
    在数字化转型的浪潮中,越来越多的企业意识到云计算带来的灵活性和高效性。然而,面对庞大的数据量,数据迁移常常成为一个棘手的问题。AWSSnowball服务为企业提供了一种高效、安全的数据迁移解决方案,助力企业顺利上云。下面就让九河云来给大家说一下AWSSnowball这款产品吧。AWSS......
  • 使用 FastGPT 工作流搭建 GitHub Issues 自动总结机器人
    如今任何项目开发节奏都很快,及时掌握项目动态是很重要滴,GitHubIssues一般都是开发者和用户反馈问题的主要渠道。然而,随着Issue数量的增加,及时跟进每一个问题会变得越来越困难。为了解决这个痛点,我们开发了一个自动化Issue总结机器人,它的功能很简单:自动获取项目最新的Gi......
  • vue2使用vue3语法
    CompositionAPICompositionAPI将是Vue3的核心功能,它具有许多更改和性能改进。我们也可以在Vue2中通过npm插件@vue/composition-api使用它。安装yarnadd@vue/composition-api之后,在入口文件main.js中使用它。importVuefrom'vue'importVueCompositionAPI......
  • 使用rsync批量部署
    使用rsync批量部署......
  • 『QEmu』使用 QIOChannel 进行 unix socket 通信
    在QEmu中使用常规的read(...)、recv(...)或者write(...)、send(...)进行堵塞式IO读写有时候会无法得到预期的结果,这是因为QEmu使用基于glib事件循环的事件循环,所有的读写操作都应该统一在QEmu的框架中进行。QEmu的内部API较为复杂,存在多种不同封装级别的IO读写......
  • 后台管理系统的通用权限解决方案(八)认证机制介绍、JWT介绍与jjwt框架的使用
    文章目录1认证机制介绍1.1HTTPBasicAuth1.2Cookie-SessionAuth1.3OAuth1.4TokenAuth2JWT2.1JWT介绍2.2JWT的数据结构2.2.1JWT头2.2.2JWT有效载荷2.2.3JWT签名3jjwt3.1jjwt介绍3.2jjwt案例1认证机制介绍1.1HTTPBasicAuthHTTPBasicAuth......