从头开始学Redisson--------基础入门

一、前言

        之前用的Redis,都是用的原生的RedisTempale或者是StringRedisTemplate,各种API非常的难易记忆,每次用的时候还得去网上查询API文档,真是麻烦。所以我在想,能不能自己提供一个Redis的便捷工具。按道理,几乎每个公司都会有一套RedisService的实现,但是在我看来还是不够完美,功能不算是强大。无意间在网上看到了Redisson,号称是Redis正确使用姿势。于是我就去了Redisson官网学了一点,卧槽,这个玩意是真的方便!

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

二、在SpringBoot中快速集成

        Redisson是建立在Redis的基础之上的,所以需要在SpringBoot项目中引入Redis。配置Redis传送门:第二节 String典型场景。下面是快速集成Redisson的步骤。

       (1)导入依赖。这里提供了阿里云镜像仓库地址,不知道为什么,我直接走中央仓库导不上Redisson的包,所以从阿里云下载的依赖包。

<!-- https://mvnrepository.com/artifact/org.redisson/redisson -->
        <dependency>
            <groupId>org.redisson</groupId>
            <artifactId>redisson</artifactId>
            <version>3.8.2</version>
        </dependency>

    </dependencies>

    <repositories>
        <repository>
            <id>public</id>
            <name>aliyun nexus</name>
            <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
            <releases>
                <enabled>true</enabled>
            </releases>
        </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>public</id>
            <name>aliyun nexus</name>
            <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </pluginRepository>
    </pluginRepositories>

        (2)在SpringBoot中增加RedisClient配置类。我这里是单机部署的方法,集群配置方式以及更多属性的配置,可参考官方大佬文档:Redisson官方文档。配置这两步就TM结束了。下面就来操作安排一波。

package com.tyzhou.redisson;

import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;

@Configuration
@Component
public class RedissonConfig {
    private static final Logger LOGGER = LoggerFactory.getLogger(RedissonConfig.class);

    /**
     * https://github.com/redisson/redisson/wiki/
     */
    @Bean
    public RedissonClient redissonClient() {
        Config config = new Config();
        config.useSingleServer().setAddress("yourRedisUrl:port");                                   
                                      //.setPassword("yourRedisPwd");
        RedissonClient redisson = Redisson.create(config);
        return redisson;
    }
}

三、增删改查骚操作

        创建一个比较简单的Controller。User对象以及UserMapper自己生成一下,User有两三个简单的属性,UserMapper就是对User对象对应的数据库表进行的增删改查操作。

package com.tyzhou.redisson.controller;

import com.tyzhou.mail.mapper.MUserMapper;
import com.tyzhou.mail.modol.MUser;
import org.redisson.api.RBucket;
import org.redisson.api.RedissonClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping(value = "redisson")
public class BaseController {
    private static final Logger LOGGER = LoggerFactory.getLogger(BaseController.class);

    private static final String USER_BUCKET_KEY = "USER_BUCKET_KEY::";
    @Autowired
    private MUserMapper userMapper;

    @Autowired
    private RedissonClient redisson;
}

        每个Redisson对象实例都会有一个与之对应的Redis数据实例。Redisson的分布式RBucket对象是一种通用对象桶可以用来存放任类型的对象。

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

         先插入数据库,操作成功后,将MUser对象通过RBucket存放到Redis中。

         查询的时候,通过KEY找到桶。再通过get() 方法取出缓存在Redis中的 指定的KEY的VALUE。

         修改就是通过KEY找到这个桶RBucket,然后重新SET一下。

         删除更简单了,找到这个桶,调用delete相关方法即可。

    @PostMapping("/addUser")
    public Integer insert(@RequestBody MUser user) {
        user.setId(null);
        int res = userMapper.insertSelective(user);
        if (res > 0) {
            RBucket<MUser> bucket = redisson.getBucket(USER_BUCKET_KEY + user.getId());
            //塞入缓存
            bucket.set(user);
        }
        return user.getId();
    }

    @GetMapping("/getUser")
    public MUser insert(@RequestParam Integer userId) {

        RBucket<MUser> bucket = redisson.getBucket(USER_BUCKET_KEY + userId);
        if (bucket != null) {
            return bucket.get();
        }
        return null;
    }

      @PostMapping("/updateUser")
    public Integer update(@RequestBody MUser user) {

        int res = userMapper.updateByPrimaryKeySelective(user);
        if (res > 0) {
            RBucket<MUser> bucket = redisson.getBucket(USER_BUCKET_KEY + user.getId());
            //更新缓存
            bucket.set(user);
        }
        return user.getId();
    }

    @PostMapping("/deleteUser")
    public MUser delete(@RequestParam Long id) {

        int res = userMapper.deleteByPrimaryKey(id);
        MUser user = null;
        if (res > 0) {
            RBucket<MUser> bucket = redisson.getBucket(USER_BUCKET_KEY + id);
            //删除并获取
            user = bucket.getAndDelete();
        }
        return user;
    }

刻意练习

        (1)如果说在项目中引入Redisson,你认为它相对于Redis有什么优势?

你看我都这么努力的分享知识给你了,鼓励一下又何妨O(∩_∩)O

你的打赏是对我最好的支持!

                    

 

posted @ 2022-07-17 12:14  小大宇  阅读(208)  评论(0编辑  收藏  举报