Redisson简单学习


Redisson项目官方地址 https://github.com/redisson/redisson

简述

Redisson 不只是一个 Java Redis 客户端,可以处理java.util.List, java.util.Map, java.util.Set, java.util.concurrent.locks.Lock 等对象

每个 Redis 服务器实例最多可处理 1TB 内存。

基于 Netty 框架。 Redis 2.8+ 和 JDK 1.6+ 兼容性。 特别快

这里主要介绍一下,常见几种数据类型的使用

Redisson分布式对象

key

每个 Redisson 对象都绑定到一个 Redis 键(即对象名称),且可以通过 getName 方法读取。

RBucket<Long> rBucket = redisson.getBucket("bucket");
rBucket.getName()   

-----------------------------
输出  bucket

allkeys

所有和redis 键相关的操作都被抽象到 Rkeys 接口中:

RKeys keys = redisson.getKeys();

//常见api
Iterable<String> allKeys = keys.getKeys();   //获取keys的迭代器

long count = keys.count()    //获取总key的数量

long removeKeys = keys.delete("key1","key2","key3");   //移除key的数量

RBucket

可用作任意类型对象的通用容器:

作用:桶存储单个对象,提供了原子替换功能,可在高并发场景下进行更新操作

相关接口

public interface RBucket<V> extends RExpirable, RBucketAsync<V> {
 
    void set(V var1);  //设置桶存储的对象
    void set(V var1, long var2, TimeUnit var4);  //设置桶存储的对象,设置操作的超时时间var2
 
    boolean trySet(V var1);  //尝试设置桶的新值
    boolean trySet(V var1, long var2, TimeUnit var4);  //尝试设置桶的新值,设置超时时间var2
 
    boolean compareAndSet(V var1, V var2); //原子替换桶的新值为var2
 
    long size();       //桶存储对象的大小
 
    V get();           //返回桶存储的对象
    V getAndDelete();  //返回并删除桶存储的对象
 
    V getAndSet(V var1);//返回桶的旧值,设置新值
    V getAndSet(V var1, long var2, TimeUnit var4);  //返回桶的旧值,设置新值,设置操作的超时时间var2

RBitSet

redisson提供的操作 redis位运算的对象。

RBitSet bitSet = redisson.getBitSet("bitset");

bitSet.set(1, true);
bitSet.set(2, true);
bitSet.set(3, true);
bitSet.set(4, false);
bitSet.set(5, false);
bitSet.set(6, true);

bitSet.cardinality()   // 输出4,即可以统计true的个数,这个可以用来常见的打卡操作,高峰期用redis做key,每天一位,打卡了存1
  
  
bitSet.clear(1);   //清除
bitSet.xor("anotherBitset");     //和另一个对象异或

AtomicLong

原子类型的Long,可做为分布式 id 生成器,提供原子操作

下面方法基本见名知意

public interface RAtomicLong extends RExpirable, RAtomicLongAsync {

    long getAndDecrement();      //获取当前值,并减 1

    long addAndGet(long delta);  // 添加 并取值  
 
    boolean compareAndSet(long expect, long update);   //以cas线程安全方式修改, 只有当预期值和当前值相等,才会修改成功
 
    long decrementAndGet();  //先减1然后取值

    long get();       

    long getAndDelete();
    
    long getAndAdd(long delta);

    long getAndSet(long newValue);

    long incrementAndGet();

    long getAndIncrement();

    void set(long newValue);

}

同样的还有RAtomicDouble

下面看两个比较有意思的数据类型

RHyperLogLog

说道这个类型,我们来说一下Page Views(PV) 和 User View(UV), 通常一个网站在统计浏览量的时候统计的是PV,但是想微信公众号这类是统计的UV, 如果瞬间阅读量激增,还是考虑放缓存里。

这种可以不用展示谁阅读了,完全可以用 HyperLogLog, 添加过程中可以自动去重。 但是会有一定误差

这里以一个文章为key,不断的增加UserId

RHyperLogLog rHyperLogLog = redisson.getHyperLogLog("name");

rHyperLogLog.add(userId1);
rHyperLogLog.add(userId2);

rHyperLogLog.count()   //统计数量    这里是2

这个是热点微博、文章峰值阅读的利器

布隆过滤器 BloomFilter

布隆过滤器是用多个hash函数,将内容存储到哈希表里,原理可以自行了解下。

可以快速判断出某个值存不存在,如果返回false,那么一定不存在。 如果返回true,可能存在。

应用场景:

  1. 推送去重

  2. 应对缓存击穿,假设我有 1亿 条用户数据,现在查询用户要去数据库中查,效率低而且数据库压力大,所以我们会把请 求首先在 Redis 中布隆过滤器中处理(活跃用户存在 Redis 中),过滤器中没有的用户,肯定是不存在的,过滤器中有的,再去数据库中查询。

RBloomFilter<SomeObject> bloomFilter = redisson.getBloomFilter("bloom");
// initialize bloom filter with 
// expectedInsertions = 55000000
// falseProbability = 0.03
bloomFilter.tryInit(55000000L, 0.03);         //预期数量总数,  误差率
bloomFilter.add(new SomeObject("field1Value", "field2Value"));
bloomFilter.add(new SomeObject("field5Value", "field8Value"));
bloomFilter.contains(new SomeObject("field1Value", "field8Value"));

误差率越低,要求的hash函数越多。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Redisson 是一个基于 Redis 的 Java 驻内存数据网格和分布式锁的开源客户端。它提供了许多简单易用的功能,可以方便地操作 Redis 数据库。 以下是 Redisson简单使用步骤: 1. 引入 Redisson 依赖:在 Maven 项目中,在 pom.xml 文件中添加以下依赖: ```xml <dependency> <groupId>org.redisson</groupId> <artifactId>redisson</artifactId> <version>3.15.5</version> </dependency> ``` 2. 创建 Redisson 客户端:使用 RedissonClient 接口创建一个 Redisson 客户端实例,连接到 Redis 服务器。例如,可以使用 Redisson.create() 方法创建一个默认配置的 Redisson 客户端实例: ```java import org.redisson.Redisson; import org.redisson.api.RedissonClient; import org.redisson.config.Config; public class RedissonExample { public static void main(String[] args) { // 创建配置对象 Config config = new Config(); config.useSingleServer().setAddress("redis://127.0.0.1:6379"); // 创建Redisson客户端 RedissonClient redisson = Redisson.create(config); // 关闭Redisson客户端 redisson.shutdown(); } } ``` 3. 使用 Redisson 客户端操作 Redis 数据库:通过 RedissonClient 实例,可以使用各种方法来操作 Redis 数据库。例如,可以使用 RMap、RLock 等接口来进行数据的增删改查、分布式锁的获取和释放等操作。 ```java import org.redisson.api.RMap; import org.redisson.api.RLock; public class RedissonExample { public static void main(String[] args) { // ... // 获取一个 Map 对象,并进行操作 RMap<String, String> map = redisson.getMap("myMap"); map.put("key1", "value1"); map.put("key2", "value2"); System.out.println(map.get("key1")); // 输出: value1 // 获取一个分布式锁,并进行操作 RLock lock = redisson.getLock("myLock"); lock.lock(); try { // 执行需要加锁的代码块 System.out.println("Locked"); } finally { lock.unlock(); } // ... } } ``` 以上是 Redisson简单使用示例。根据具体需求,你可以使用 Redisson 提供的丰富功能来操作 Redis 数据库,如分布式集合、分布式对象、分布式服务等。你可以参考 Redisson 的官方文档和示例代码来深入了解更多功能和用法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值