首页 > 编程笔记

Spring Boot集成Redis

与关系型数据库一样,Spring Boot 也提供了对 NoSQL 数据库的集成扩展,如对 Redis 数据库的操作。通过默认配置即可使用RedisTemplate 模板类操作非关系型数据库。

集成Redis

Redis 可以作为缓存、消息中间件或多类型的 key-value 数据库。作为非关系型数据库,Redis 支持多种类型的存储方式,包括 String(字符串)、List(列表)、Hash(哈希)、Set(集合)和Sorted Set(有序集合)等。

Spring Boot 为 Redis 提供了基本的自动配置,依赖于 spring-boot-starter-data-redis 包。该包提供了自动配置的RedisConnectionFactory、StringRedisTemplate 和 Redis-Template 实例。如果不配置,则默认连接 localhost:6379 服务器。

StringRedisTemplate 继承自 RedisTemplate,默认采用 String 的序列化策略。如果使用 RedisTemplate,则可以实现自己的序列化方式。

连接 Redis 可以使用 Lettuce 或 Jedis 客户端。Spring Boot 默认使用 Lettuce 客户端。因为 Lettuce 的连接是基于 Netty 的,所以多线程是安全的。

RedisTemplate 提供了以下 5 种数据结构的操作方法:

Redis操作示例

下面给出一个集成了 Redis 操作的简单示例。

(1)在 application.yml 配置文件中添加配置,代码如下:

spring:
  redis:
    host: localhost
    port: 6379
    password: redistest
    timeout: 1000
    lettuce:
      pool:
        max-active: 10   //①
        max-wait: 1000   //②
        max-idle: 2  //③
        min-idle: 0  //④


(2)在 Controller 类中注入 StringRedisTemplate 实例,代码如下:
@RestController
@RequestMapping("/hi")
public class HiController {
    //自动注入StringRedisTemplate
    @Autowired
    private StringRedisTemplate stringRedisTemplate;
    @GetMapping("/redis/add")
    public String redisAdd(int id) {
        //Redis set操作
        stringRedisTemplate.opsForValue().set("redis_test_"+id, "redistest!");
        return "1";
    }
    @GetMapping("/redis/query")
    public String redisQuery(int id) {
        //Redis get操作
        String val = stringRedisTemplate.opsForValue().get("redis_test_"+id);
        return val;
    }
    @GetMapping("/redis/delete")
    public String redisDelete(int id) {
        //Redis delete操作
        stringRedisTemplate.delete("redis_test_"+id);
        return "1";
    }
}

优秀文章