Redis客户端Redisson使用示例

这篇具有很好参考价值的文章主要介绍了Redis客户端Redisson使用示例。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Redis客户端Redisson使用示例

  1. Redisson作为Java连接Redis的客户端,提供了连接、操作Redis的方法,还提供分布式锁、红锁等并发工具。Redisson除了提供同步接口外,还提供了异步(Async)、反射式(Reactive)和RxJava2标准的接口。Redisson会序列化Java对象然后保存到redis,所以通过redis命令行设置的值,Redisson来获取值会报错。
  2. 引入maven依赖包
<!--redisson-->
<dependency>
    <groupId>org.redisson</groupId>
    <artifactId>redisson</artifactId>
    <version>3.16.0</version>
</dependency>
  1. Redisson初始化连接
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
import org.redisson.Redisson;
import org.redisson.api.*;
import org.redisson.client.RedisClient;
import org.redisson.client.codec.StringCodec;
import org.redisson.codec.JsonJacksonCodec;
import org.redisson.config.Config;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.concurrent.TimeUnit;
import static org.junit.Assert.assertEquals;

@RunWith(Junit4.class)
public class RedissonCase {
    
    private RedissonClient redissonClient;
    private RedissonReactiveClient reactiveClient;
    private RedissonRxClient rxClient;
    
    @Before
    public void init() {
        //单节点配置
    	Config config = new Config();
        config.useSingleServer()
                .setAddress("redis://localhost:6379")
                .setPassword("123456")
                .setConnectionPoolSize(5)
                .setConnectionMinimumIdleSize(2)
                .setDatabase(0);
        redissonClient = Redisson.create(config);
        reactiveClient = Redisson.createReactive(config);
        rxClient = Redisson.createRx(config);    
    }    
    
    @After
    public void destroy(){
        redissonClient.shutdown();
        reactiveClient.shutdown();
        rxClient.shutdown();
    }
}
  1. 使用通用对象桶,可以存放任何类型对象
@Test
public void bucket() throws Exception {
    //同步
    RBucket<String> bucket = redissonClient.getBucket("name");
    bucket.set("郑禹");
    System.out.println(bucket.get());
    //异步
    RBucket<String> bucket2 = redissonClient.getBucket("name2");
    bucket2.setAsync("刘晓雪").get();
    bucket2.getAsync().thenAccept(System.out::println);
    //Reactive
    RBucketReactive<String> bucket3 = reactiveClient.getBucket("name3");
    bucket3.set("张佳慧").block();
    bucket3.get().subscribe(System.out::println);
    //RxJava2 没有读取到值
    RBucketRx<String> bucket4 = rxClient.getBucket("name4");
    bucket4.set("刘万敏").blockingSubscribe(System.out::println);
    Thread.sleep(1000 * 5);
}

执行结果:

郑禹
刘晓雪
张佳慧

  1. 清空桶可以给键设置过期时间,或者直接删除键。
@Test
public void clearBucket() {
    RBucket<String> bucket = redissonClient.getBucket("name2", new JsonJacksonCodec());
    bucket.set("刘晓雪", 60, TimeUnit.SECONDS);
    boolean deleteFlag = bucket.delete();
    assertEquals(true, deleteFlag);    
}
  1. 流操作
@Test
public void stream() throws Exception {
    RBinarySream stream = redissonClient.getBinaryStream("stream");
    stream.set("汪稳".getBytes());
    OutputStream outputStream = stream.getOutputStream();
    outputStream.write("和钱晨馨".getBytes());
    InputStream inputStream = stream.getInputStream();
    ByteArrayOutputStream result = new ByteArrayOutputStream();
    byte[] b = new byte[1024];
    int len;
    while((len=inputStream.read(b)) != -1) {
        result.write(b, 0, len);
    }
    System.out.println(result.toString());
}

执行结果:

汪稳和钱晨馨

  1. 原子整型示例,设置初始值10,先自增后返回。
@Test
public void atomicLong() {
    RAtomicLong atomicLong = redissonClient.getAtomicLong("atomicLong");
    atomicLong.set(10);
    atomicLong.incrementAndGet();
    System.out.println(atomicLong);
}

执行结果:

11

  1. 限流器,初始化最大流速,每秒生成5个令牌。
@Test
public void rateLimit() throws Exception {
    RRateLimiter rateLimiter = redissonClient.getRateLimiter("rateLimiter");
    rateLimiter.trySetRate(RateType.OVERALL, 5, 1, RateIntervalUnit.SECONDS);
    for (int i=0;i<10;i++) {
        new Thread(new Runnable() {
            int i = 0;
            
            @Override
            public void run() {
                while(true) {
                    rateLimiter.acquire(1);
                    System.out.println(Thread.currentThread() + "-" + System.currentTimeMillis() + "-" + i++);
                }
            }
        }).start();
    }
    Thread.sleep(1000 * 5);
}

执行结果:

Thread[Thread-1,5,main]-1683092928431-0
Thread[Thread-2,5,main]-1683092928434-0
Thread[Thread-4,5,main]-1683092928441-0
Thread[Thread-10,5,main]-1683092928441-0
Thread[Thread-8,5,main]-1683092928442-0
Thread[Thread-10,5,main]-1683092929434-1
Thread[Thread-8,5,main]-1683092929434-1
Thread[Thread-4,5,main]-1683092929434-1
Thread[Thread-10,5,main]-1683092929437-2
Thread[Thread-4,5,main]-1683092929437-2
Thread[Thread-10,5,main]-1683092930449-3
Thread[Thread-1,5,main]-1683092930450-1
Thread[Thread-7,5,main]-1683092930450-0
Thread[Thread-8,5,main]-1683092930450-2
Thread[Thread-2,5,main]-1683092930449-1
Thread[Thread-8,5,main]-1683092931469-3
Thread[Thread-7,5,main]-1683092931471-1
Thread[Thread-5,5,main]-1683092931471-0
Thread[Thread-2,5,main]-1683092931472-2
Thread[Thread-1,5,main]-1683092931472-2
Thread[Thread-8,5,main]-1683092932458-4
Thread[Thread-1,5,main]-1683092932459-3
Thread[Thread-4,5,main]-1683092932461-3
Thread[Thread-5,5,main]-1683092932461-1
Thread[Thread-2,5,main]-1683092932461-3

  1. 列表操作
@Test
public void list() {
    RList<String> list = redissonClient.getList("list");
    list.add("big");
    list.add("宋茜");
    list.add("高圆圆");
    list.remove(1);
    System.out.println(list);
}

执行结果:

[big, 高圆圆]

  1. map字典操作
@Test
public void map() {
    RMap<String, String> map = redissonClient.getMap("map");
    map.put("name", "张飞");
    map.put("location", "南京");
    map.forEach((key, vlaue) -> {
       System.out.println("key=" + key + ",value=" + value); 
    });
}

执行结果:

key=name,value=张飞
key=location,value=南京

  1. 元素不可重复set集合
@Test
public void set(){
    RSet<String> set = redissonClient.getSet("set");
    set.add("汪稳");
    set.add("汪新建");
    set.forEach(System.out::println);
}
  1. 队列示例
@Test
public void queue() {
    RQueue<String> queue = redissonClient.getQueue("queue");
    queue.add("钱晨馨");
    queue.add("汪稳");
    System.out.println(queue.size() + ":" + queue.poll());
    queue.clear();
}

执行结果:

2:钱晨馨文章来源地址https://www.toymoban.com/news/detail-461979.html

  1. 可重入锁实现
@Test
public void lock throws InterruptedException {
    RLock lock = redissonClient.getLock("lock");
    for (int i=0;i<5;i++) {
        new Thread(()-> {
            lock.lock();
            lock.lock();
            try {
                System.out.println(Thread.currentThread() + "-" + System.currentTimeMillis() + "-" + "获取了锁");
                Thread.sleep(500);
            } catch (InterruptedException e) {
                e.printStackTrace();
            } finally {
                lock.unlock();
            }
        }).start();
    }
    Thread.sleep(5000);
}

到了这里,关于Redis客户端Redisson使用示例的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Redis的Java客户端-Java客户端以及SpringDataRedis的介绍与使用

    Spring Data Redis底层支持同时兼容Jedis和Lettuce两种不同的Redis客户端,可以根据需要任意选择使用其中的一种。这样既可以保留现有代码使用的Jedis方式,也可以通过使用基于Netty的高性能Lettuce客户端,提升应用的性能和吞吐量。 Jedis是一个传统的Java Redis客户端,使用BIO进行So

    2024年02月08日
    浏览(65)
  • 使用C++操作Redis客户端

    \\\"Who can say where the path will go?\\\"           前面我们花了很大的篇幅,讲解了redis中常见常使用的五种数据结构,以及五种数据结构的操作和redis命令。不过在日常开发中,我们的这些操作都是在redis为我们提供的客户端中的,就像使用mysql一样,很多时候不是在mysql-cli去编写s

    2024年02月10日
    浏览(47)
  • redis教程 二 redis客户端Jedis使用

    在Redis官网中提供了各种语言的客户端,地址:https://redis.io/docs/clients/ 其中Java客户端也包含很多但在开发中用的最多的还是Jedis,接下来就让我们以Jedis开始我们的快速实战。 入门案例详细步骤 案例分析: 创建工程: 创建一个maven管理的java项目 引入依赖: 在pom.xml文件下添

    2024年02月05日
    浏览(50)
  • Redis - Python 客户端基本使用指南

    参考:python 模块Redis模块,连接Redis数据库 Python 中的 Redis 客户端库允许开发者与 Redis 数据库进行交互。这些库允许在 Python 中连接到 Redis、执行命令以读取或写入数据,并处理 Redis 数据。 以下是一些常见的 Python Redis 客户端库: redis 库:是 Python 中最常用的 Redis 客户端库之

    2024年02月08日
    浏览(44)
  • Spring Boot 整合 Redis,使用 RedisTemplate 客户端

    1.1.1 添加依赖 redis 的依赖: 1.1.2 yml 配置文件 1.1.3 Config 配置文件 1.1.4 使用示例 注入 RedisTemplate,即可操作 Redis,简单示例如下: 1.2.1 RedisTemplate 简介 RedisTemplate 是 Spring Data Redis 项目的一部分,旨在简化在Java应用程序中使用 Redis 的过程。它提供了一组简单的方法,可以在

    2024年02月09日
    浏览(270)
  • docker--在Anaconda jupyter 容器中使用oracle数据源时,Oracle客户端安装配置及使用示例

    将instantclient-basic-linux.x64-11.2.0.4.0.zip解压至/home/jupyter/oracle/ 将instantclient-sqlplus-linux.x64-11.2.0.4.0.zip解压/home/jupyter/oracle/【可选,提供sqlplus命令】 复制【操作系统一般都有安装libaio.so】 cp /usr/lib64/libaio.so.1 /home/jupyter/oracle/instantclient_11_2/ ln -s /home/jupyter/oracle/instantclient_11_2/libcln

    2024年02月07日
    浏览(46)
  • 【实践篇】Redis最强Java客户端(四)之Ression分布式集合使用指南

    前两章我们了解了《【实践篇】Redis最强Java客户端(一)之Redisson入门介绍》和《【实践篇】Redis最强Java客户端(二)之Redisson基础概念》 本章第四章主要介绍Ression分布式集合使用指南。 上一章《Redisson 7种分布式锁使用指南》回顾。 本章我们介绍了在Redisson中实现的各种分布式集

    2024年02月09日
    浏览(50)
  • [Redis]Redis客户端

    Redis 给我们提供了三种客户端,分别是: 命令行客户端 图形化桌面客户端 编程客户端 在 Redis 安装完成之后,就有了 Redis 命令行客户端。即 Redis 安装完成后就自带了命令行客户端。 Redis 自带的命令行客户端就是 redis-cli。 option:选项 其中常见的options有: -h 127.0.0.1 :指定

    2024年02月06日
    浏览(54)
  • MFC CAsyncSocket类作为客户端示例

    之前写过CAsyncSocket类使用的博客;进一步看一下; VS新建一个MFC 对话框工程; 添加一个类,从CAsyncSocket继承,起个自己的名字; 对话框添加几个编辑框,按钮,静态控件; 为自己的CxxxAsyncSocket类添加重写的虚函数,OnConnect、OnReceive、OnSend; 自己的CAsyncSocket类的头文件, 自

    2024年01月16日
    浏览(41)
  • Spring Boot Starter Data Redis使用Lettuce客户端报错:NOAUTH Authentication required

    Spring Boot版本升级为:2.6.14 redis依赖: redis配置不变,还是带password的: 项目启动后,获取redis连接时,报错:NOAUTH Authentication required spring-boot-starer-data-redis支持使用Jedis和Lettuce作为redis客户端,如果配置不指定则默认使用Lettuce。 不管是Lettuce还是还是Jedis,核心是构建RedisCo

    2024年01月25日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包