SpringBoot集成Redis - 基于RedisTemplate+Lettuce数据类封装

arcstack约 783 字大约 3 分钟

SpringBoot集成Redis - 基于RedisTemplate+Lettuce数据类封装

前两篇文章介绍了SpringBoot基于RedisTemplate的数据操作,那么如何对这些操作进行封装呢?本文主要介绍基于RedisTemplate的封装。@pdai

知识准备

需要对封装的场景有理解。@pdai

有了RedisTemplate为什么还要进一步封装?

RedisTemplate中的操作和方法众多,为了程序保持方法使用的一致性,屏蔽一些无关的方法以及对使用的方法进一步封装。 PS:同样的类似思路也体现在很多场景中,比如Tomcat Request利用外观模式改造

实现案例

本文主要展示基于RedisTemplate的部分简单封装的示例。@pdai

RedisService封装

RedisService接口类

    package tech.pdai.springboot.redis.lettuce.enclosure.service;

    import org.springframework.data.redis.core.RedisCallback;

    import java.util.Collection;
    import java.util.Set;

    /** * Redis Service. * * @author pdai */
    public interface IRedisService<T> {

        void set(String key, T value);

        void set(String key, T value, long time);

        T get(String key);

        void delete(String key);

        void delete(Collection<String> keys);

        boolean expire(String key, long time);

        Long getExpire(String key);

        boolean hasKey(String key);

        Long increment(String key, long delta);

        Long decrement(String key, long delta);

        void addSet(String key, T value);

        Set<T> getSet(String key);

        void deleteSet(String key, T value);

        T execute(RedisCallback<T> redisCallback);
    }

RedisService的实现类

    package tech.pdai.springboot.redis.lettuce.enclosure.service.impl;

    import org.springframework.data.redis.core.RedisCallback;
    import org.springframework.data.redis.core.RedisTemplate;
    import org.springframework.stereotype.Service;
    import tech.pdai.springboot.redis.lettuce.enclosure.service.IRedisService;

    import javax.annotation.Resource;
    import java.util.Collection;
    import java.util.Set;
    import java.util.concurrent.TimeUnit;

    /** * @author pdai */
    @Service
    public class RedisServiceImpl<T> implements IRedisService<T> {

        @Resource
        private RedisTemplate<String, T> redisTemplate;

        @Override
        public void set(String key, T value, long time) {
            redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS);
        }

        @Override
        public void set(String key, T value) {
            redisTemplate.opsForValue().set(key, value);
        }

        @Override
        public T get(String key) {
            return redisTemplate.opsForValue().get(key);
        }

        @Override
        public void delete(String key) {
            redisTemplate.delete(key);
        }

        @Override
        public void delete(Collection<String> keys) {
            redisTemplate.delete(keys);
        }

        @Override
        public boolean expire(String key, long time) {
            return redisTemplate.expire(key, time, TimeUnit.SECONDS);
        }

        @Override
        public Long getExpire(String key) {
            return redisTemplate.getExpire(key, TimeUnit.SECONDS);
        }

        @Override
        public boolean hasKey(String key) {
            return redisTemplate.hasKey(key);
        }

        @Override
        public Long increment(String key, long delta) {
            return redisTemplate.opsForValue().increment(key, delta);
        }

        @Override
        public Long decrement(String key, long delta) {
            return redisTemplate.opsForValue().increment(key, -delta);
        }

        @Override
        public void addSet(String key, T value) {
            redisTemplate.opsForSet().add(key, value);
        }

        @Override
        public Set<T> getSet(String key) {
            return redisTemplate.opsForSet().members(key);
        }

        @Override
        public void deleteSet(String key, T value) {
            redisTemplate.opsForSet().remove(key, value);
        }

        @Override
        public T execute(RedisCallback<T> redisCallback) {
            return redisTemplate.execute(redisCallback);
        }

    }

RedisService的调用

UserController类中调用RedisService

    package tech.pdai.springboot.redis.lettuce.enclosure.controller;


    import io.swagger.annotations.ApiOperation;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.PostMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    import tech.pdai.springboot.redis.lettuce.enclosure.entity.User;
    import tech.pdai.springboot.redis.lettuce.enclosure.entity.response.ResponseResult;
    import tech.pdai.springboot.redis.lettuce.enclosure.service.IRedisService;

    /** * @author pdai */
    @RestController
    @RequestMapping("/user")
    public class UserController {

        @Autowired
        private IRedisService<User> redisService;

        /** * @param user user param * @return user */
        @ApiOperation("Add")
        @PostMapping("add")
        public ResponseResult<User> add(User user) {
            redisService.set(String.valueOf(user.getId()), user);
            return ResponseResult.success(redisService.get(String.valueOf(user.getId())));
        }

        /** * @return user list */
        @ApiOperation("Find")
        @GetMapping("find/{userId}")
        public ResponseResult<User> edit(@PathVariable("userId") String userId) {
            return ResponseResult.success(redisService.get(userId));
        }

    }

示例源码

https://github.com/realpdai/tech-pdai-spring-demos

上次编辑于:
贡献者: javatodo