SpringBoot 中使用Redis缓存

SpringBoot 中使用Redis缓存

在项目中我们访问数据通常的操作就是访问数据库的方式,但是如果访问量很大而且特别频繁会对数据库造成压力,甚至导致数据库直接崩溃。为了解决这类的问题,redis框架逐渐出现在我们的视野里

1.Redis特点

  •  Redis是一个高性能(支持并发11万读8万写)的key-value存储系统。
  • 支持丰富的存储value类型,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。
  • Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。
  • 虽然运行在内存,同时支持持久化。提供两种方式:1保存到数据文件.rdb安全性高,但对效率有影响。2保存对数据有影响的操作命令到.aof中,保存操作命令的频率可配置,比较灵活,效率高。
  • 支持订阅发布功能(subscribe/publish)
  • Redis 很大程度补偿了memcached这类key/value存储的不足,在部分场合可以对关系数据库起到很好的补充作用。它提供了Python,Ruby,Erlang,PHP客户端,使用很方便。

2.Redis数据结构介绍

Redis可以存储键与5种不同数据结构类型之间的映射,这5种数据结构类型分别为String(字符串)、List(列表)、Set(集合)、Hash(散列)和 Zset(有序集合)。

结构类型 结构存储的值 读写能力
String 可以是字符串、整数或者浮点数 对整个字符串或者字符串的其中一部分执行操作;对象和浮点数执行自增(increment)或者自减(decrement) 
List 一个链表,链表上的每个节点都包含了一个字符串 从链表的两端推入或者弹出元素;根据偏移量对链表进行修剪(trim);读取单个或者多个元素;根据值来查找或者移除元素 
Set 包含字符串的无序收集器(unorderedcollection),并且被包含的每个字符串都是独一无二的、各不相同  添加、获取、移除单个元素;检查一个元素是否存在于某个集合中;计算交集、并集、差集;从集合里卖弄随机获取元素 
Hash 包含键值对的无序散列表 添加、获取、移除单个键值对;获取所有键值对 
Zset 字符串成员(member)与浮点数分值(score)之间的有序映射,元素的排列顺序由分值的大小决定 添加、获取、删除单个元素;根据分值范围(range)或者成员来获取元素 

3.安装Redis

3.1 windows安装

https://laoniu.blog.csdn.net/article/details/111402929

3.2 linux安装

https://laoniu.blog.csdn.net/article/details/111402989

3.3 docker安装

https://laoniu.blog.csdn.net/article/details/110012616

4.SpringBoot中使用Redis

4.1 环境版本

  • 开发工具:Intellij IDEA 2020.2.3
  • springboot:2.3.7.RELEASE
  • jdk:1.8.0_211
  • maven: 3.6.3

4.2 项目结构

4.3 在pom.xml添加依赖

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

4.4 在application.yml新增配置

#redis配置
spring:
  redis:
    host: 127.0.0.1 #Redis服务器地址
    port: 6379  #Redis服务器连接端口
    database: 0 #Redis数据库索引(默认为0)
    jedis:
      pool:
        max-active: 50 #连接池最大连接数(使用负值表示没有限制)
        max-wait: 3000 #连接池最大阻塞等待时间(使用负值表示没有限制)
        max-idle: 2   #连接池中的最小空闲连接
        min-idle: 20  #连接池中的最大空闲连接
    timeout: 5000   #连接超时时间(毫秒)

4.5 编写操作redis的工具类 RedisUtil

package com.niu.springbootredis;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;


/**
 * @description: RedisUtils
 * @author: nxq email: niuxiangqian163@163.com
 * @createDate: 2020/12/19 12:28 下午
 * @updateUser: nxq email: niuxiangqian163@163.com
 * @updateDate: 2020/12/19 12:28 下午
 * @updateRemark:
 * @version: 1.0
 **/
@Component
public class RedisUtil {
    @Autowired
    private RedisTemplate<String, String> redisTemplate;

    /**
     * 读取缓存
     *
     * @param key
     * @return
     */
    public String get(final String key) {
        return redisTemplate.opsForValue().get(key);
    }

    /**
     * 写入缓存
     */
    public boolean set(final String key, String value) {
        boolean result = false;
        try {
            redisTemplate.opsForValue().set(key, value);
            result = true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }

    /**
     * 更新缓存
     */
    public boolean getAndSet(final String key, String value) {
        boolean result = false;
        try {
            redisTemplate.opsForValue().getAndSet(key, value);
            result = true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }

    /**
     * 删除缓存
     */
    public boolean delete(final String key) {
        boolean result = false;
        try {
            redisTemplate.delete(key);
            result = true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }

}

4.6 编写测试类进行测试 

package com.niu.springbootredis;

import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest
class SpringbootRedisApplicationTests {

    @Autowired
    private RedisUtil redisUtil;

    String key = "key";
    @Test
    public void testSet() {

        redisUtil.set(key, "aaa");
    }
    @Test
    public void testGet(){
        System.out.println(redisUtil.get(key));
    }

}

4.7 查看redis数据

执行下testSet方法 然后进入redis看是否插入成功,建议使用RedisDesktopManager可视化工具进行查看

5.总结

本篇是对springboot操作redis最简单的介绍,redis的功能作用远不止这些

代码已经推送至github: https://github.com/NiuXiangQian/springboot-redis

正文到此结束
评论插件初始化中...
Loading...