SpringBoot组件系列02-内存数据库Redis

1.redis介绍

Redis相信大家应该都知道,已经出来很多年了,应用也非常广泛,在nosql这块市场份额挺高,依据自身是单线程的并且将数据存储在内存中,并支持分布式部署,被广泛应用在当前最流行的大数据应用中,主要解决高并发数据同步问题,分布式事务等大数据项目中常见问题。

2.maven需要的包

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

3.我自己写的redis工具类(附带解决静态方法调用外部注入问题)

@Component
public class RedisUtil {
    @Autowired
    StringRedisTemplate stringRedisTemplate;

    public static RedisUtil redisUtil;

    @PostConstruct
    public void init() {
        redisUtil = this;
    }

    /**
     * 设置redis字符串
     *
     * @param k        key
     * @param v        value
     * @param l        过期时间
     * @param timeUnit 时间类型
     */
    public static void setString(String k, String v, long l, TimeUnit timeUnit) {
        redisUtil.stringRedisTemplate.opsForValue().set(k, v, l, timeUnit);
    }

    /**
     * 设置redis字符串
     *
     * @param k key
     * @param v value
     */
    public static void setString(String k, String v) {
        redisUtil.stringRedisTemplate.opsForValue().set(k, v);
    }

    /**
     * 获取redis字符串
     *
     * @param k key
     * @return 返回键值
     */
    public static String getString(String k) {
        return redisUtil.stringRedisTemplate.opsForValue().get(k);
    }

    /**
     * 获取key的过期时间
     *
     * @param k key
     * @return
     */
    public static Long getExpire(String k) {
        return redisUtil.stringRedisTemplate.getExpire(k);
    }

    /**
     * 根据key获取过期时间并换算成指定单位
     *
     * @param k key
     * @return
     */
    public static Long getExpire(String k, TimeUnit timeUnit) {
        return redisUtil.stringRedisTemplate.getExpire(k, timeUnit);
    }

    /**
     * 根据key删除缓存
     *
     * @param k key
     */
    public static void delete(String k) {
        redisUtil.stringRedisTemplate.delete(k);
    }

    /**
     * 检查key是否存在
     *
     * @param k key
     * @return
     */
    public static boolean hasKey(String k) {
        return redisUtil.stringRedisTemplate.hasKey(k);
    }

    /**
     * 设置过期时间
     *
     * @param k        key
     * @param l        过期时间
     * @param timeUnit 过期时间单位
     * @return
     */
    public static boolean expire(String k, long l, TimeUnit timeUnit) {
        return redisUtil.stringRedisTemplate.expire(k, l, timeUnit);
    }

    /**
     * 设置指定时间过期
     *
     * @param k key
     * @param d date
     * @return
     */
    public static boolean expireAt(String k, Date d) {
        return redisUtil.stringRedisTemplate.expireAt(k, d);
    }

    /**
     * 将字符串添加到集合尾部
     *
     * @param k key
     * @param v value
     */
    public static void listPush(String k, String v) {
        redisUtil.stringRedisTemplate.opsForList().rightPush(k, v);
    }

    /**
     * 添加集合到redis
     *
     * @param k    key
     * @param list list
     */
    public static void listPushAll(String k, List<String> list) {
        redisUtil.stringRedisTemplate.opsForList().rightPushAll(k, list);
    }

    /**
     * 获取集合中单个元素
     *
     * @param k key
     * @param l index
     * @return
     */
    public static String listGet(String k, long l) {
        return redisUtil.stringRedisTemplate.opsForList().index(k, l);
    }

    /**
     * 获取集合的大小
     *
     * @param k key
     * @return
     */
    public static Long listSize(String k) {
        return redisUtil.stringRedisTemplate.opsForList().size(k);
    }

    /**
     * 获取集合所有元素
     *
     * @param k
     * @return
     */
    public static List<String> listAll(String k) {
        return redisUtil.stringRedisTemplate.opsForList().range(k, 0, -1);
    }
}

4.测试

@RestController
public class RedisController {

    /**
     * 设置数据到redis
     *
     * @return
     */
    @RequestMapping("/set")
    public Object redisSet() {
        String k = "test";
        String v = "测试";
        long time = 1;
        TimeUnit unit = TimeUnit.MINUTES;
        //设置一个字符串到redis中,过期时间为1分钟
        RedisUtil.setString(k, v, time, unit);
        Map<String, Object> resultMap = new HashMap<>();
        resultMap.put("key", k);
        resultMap.put("value", v);
        resultMap.put("time", unit.toSeconds(time) + "秒");
        return resultMap;
    }

    /**
     * 从redis中获取数据
     *
     * @return
     */
    @RequestMapping("/get")
    public Object redisGet() {
        String k = "test";
        //根据key从redis中获取字符串
        String v = RedisUtil.getString(k);
        Map<String, Object> resultMap = new HashMap<>();
        resultMap.put("key", k);
        resultMap.put("value", v);
        return resultMap;
    }

}

剩下就可以在浏览器中直接测试了,测试之前记得把redis客户端开启,详细源码可以参考我的码云项目:https://gitee.com/dongdingzhuo/boot.git
windows的redis绿色版客户端工具我直接放在项目中,可以直接用在这里插入图片描述
先用cd命令切换到redis客户端所在路径,然后启动客户端服务即可

发布了31 篇原创文章 · 获赞 15 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/dongdingzhuo/article/details/97259905