SpringBoot集成Redis以及常用操作

SpringBoot集成Redis以及常用操作

1、引入依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-redis</artifactId>
            <version>1.4.1.RELEASE</version>
        </dependency>

2、application.yml配置

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/cms?useUnicode=true&characterEncoding=utf8&useSSL=true&serverTimezone=UTC
    username: root
    password: 123456
  redis:
    host: 192.168.21.139
    port: 6379
    password: 123456
    jedis:
      pool:
        max-active: 20
        max-idle: 8
        min-idle: 0
        max-wait: 2000

3、单元测试

package com.chengya.demo;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.connection.RedisListCommands;
import org.springframework.data.redis.core.*;

import java.time.Duration;
import java.util.*;
import java.util.concurrent.TimeUnit;


@SpringBootTest
public class DemoApplicationTests {
    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    @Test
    void redisKeyTest() {
        // 查找指定格式的key,比如查找所有以"test"结尾的key
        Set<String> keys = stringRedisTemplate.keys("*test");
        // 设置key的过期时间,比如设置key在10小时后过期
        stringRedisTemplate.expire("key_01",10,TimeUnit.HOURS);
        stringRedisTemplate.expire("key_01",Duration.ofHours(10));
        // 设置key在指定的时间过期
        stringRedisTemplate.expireAt("key_01",new Date());
        // 查看key的剩余过期时间,单位分钟
        Long expireSeconds = stringRedisTemplate.getExpire("key_01",TimeUnit.SECONDS);
        // 删除指定的key
        stringRedisTemplate.delete("key_01");
        // 批量删除指定的key
        List<String> keyList = Arrays.asList("key_01","key_02");
        stringRedisTemplate.delete(keyList);
        // 重命名key
        stringRedisTemplate.rename("old_key","new_key");
        // 如果新的key不存在,则重命名
        stringRedisTemplate.renameIfAbsent("old_key","new_key");
        // 返回任意的key
        String key = stringRedisTemplate.randomKey();
    }

    @Test
    void redisStringTest() {
        ValueOperations<String,String> valueOperations = stringRedisTemplate.opsForValue();
        // 设置key的值
        valueOperations.set("string_01","value_01");
        // 将值追加到指定key值的末尾
        valueOperations.append("string_01","_value_02");
        // 获取key的值
        String str01 = valueOperations.get("string_01");
        // 设置key-value,并且设置超时时间为1000毫秒
        valueOperations.set("string_01","value_01",1000,TimeUnit.MILLISECONDS);
        // 设置key-value,并且设置超时时间为1000毫秒
        valueOperations.set("string_01","value_01",Duration.ofMillis(1000));
    }

    @Test
    void redisHashMapTest() {
        HashOperations<String,String,String> hashOperations = stringRedisTemplate.opsForHash();
        Map<String,String> map = new HashMap<>();
        map.put("field_01","value_01");
        map.put("field_02","value_02");
        map.put("field_03","value_03");
        // 把整个map放进redis
        hashOperations.putAll("hashMap_01",map);
        // 为指定的map设置字段
        hashOperations.put("hashMap_01","field_04","value_04");
        // 如果map的字段不存在,则设置字段的值
        hashOperations.putIfAbsent("hashMap_01","field_05","value_05");
        // 删除map的部分字段
        hashOperations.delete("hashMap_01","field_01","field_02");
        // 返回哈希表中指定key的值
        hashOperations.get("hashMap_01","field_04");
        // 返回哈希表的所有key
        Set<String> keys = hashOperations.keys("hashMap_01");
        // 返回哈希表的所有value
        List<String> values = hashOperations.values("hashMap_01");
        // 返回哈希表的所有键值对
        Map<String,String> redisMap = hashOperations.entries("hashMap_01");
        // 判断哈希表中是否存在指定的key
        hashOperations.hasKey("hashMap_01","field_01");
        // 返回哈希表中的任意一对键值对
        Map.Entry<String,String> entry = hashOperations.randomEntry("hashMap_01");
        // 返回哈希表中的任意三对键值对
        hashOperations.randomEntries("hashMap_01",3);
        // 返回哈希表中的任意一个key
        hashOperations.randomKey("hashMap_01");
        // 返回哈希表中的任意三个key
        hashOperations.randomKeys("hashMap_01",3);
    }

    /**
     * Redis列表是有序的
     */
    @Test
    void redisListTest() {
        ListOperations<String,String> listOperations = stringRedisTemplate.opsForList();
        // 将多个值放入list
        listOperations.leftPushAll("list_01","value_01","value_02","value_03");
        // 将整个集合放入list
        List<String> list = Arrays.asList("value_04","value_05","value_06");
        listOperations.leftPushAll("list_01",list);
        // 向list添加一个元素
        listOperations.leftPush("list_01","value_07");
        listOperations.rightPushAll("list_01","value_18","value_17");
        listOperations.rightPushAll("list_01",list);
        listOperations.rightPush("list_01","value_19");
        // 截取list,这将改变list的大小
        listOperations.trim("list_01",0,4);
        // 返回list指定区间内的元素集
        listOperations.range("list_01",0,4);
        // 返回list的大小
        listOperations.size("list_01");
        // 返回list指定索引位置的元素
        listOperations.index("list_01",2);
        // 返回指定元素的索引位置
        listOperations.indexOf("list_01","value_02");
        // 弹出list的第一个元素
        listOperations.leftPop("list_01");
        // 弹出list的最后一个元素
        listOperations.rightPop("list_01");
        // 弹出list的第一个元素,并设置超时时间为1000毫秒
        listOperations.leftPop("list_01",1000, TimeUnit.MILLISECONDS);
        // 弹出list的最后一个元素,并设置超时时间为1000毫秒
        listOperations.rightPop("list_01",1000,TimeUnit.MILLISECONDS);
        // 从list头部弹出三个元素
        listOperations.leftPop("list_01",3);
        // 从list尾部弹出三个元素
        listOperations.rightPop("list_01",3);
        // 将list_01的头部元素移动到list_02的头部
        listOperations.move(ListOperations.MoveFrom.fromHead("list_01"),ListOperations.MoveTo.toHead("list_02"));
        // 将list_01的头部元素移动到list_02的头部,并设置超时时间为2秒
        listOperations.move(ListOperations.MoveFrom.fromHead("list_01"),ListOperations.MoveTo.toHead("list_02"), Duration.ofSeconds(2));
        // 将list_01的头部元素移动到list_02的尾部
        listOperations.move("list_01", RedisListCommands.Direction.LEFT,"list_02", RedisListCommands.Direction.RIGHT);
        // 移除指定的元素,可能有多个相同元素,将顺序匹配到的前count个元素移除
        listOperations.remove("list_01",2,"value_03");
        // 设置指定索引位置的元素
        listOperations.set("list_01",2,"value_02");
    }

    /**
     * Redis集合是无序的
     */
    @Test
    void redisSetTest() {
        SetOperations<String,String> setOperations = stringRedisTemplate.opsForSet();
        // 向集合中添加成员
        setOperations.add("set_01","element_01","element_02","element_03");
        // 判断element_01是否为集合set_01的成员
        Boolean isMember = setOperations.isMember("set_01","element_01");
        // 判断element_01,element_02是否为集合set_01的成员
        Map<Object, Boolean> isMemberMap = setOperations.isMember("set_01","element_01","element_02");
        // 获取set集合
        Set<String> set = setOperations.members("set_01");
        // 返回集合中的任意一个成员
        String randomValue = setOperations.randomMember("set_01");
        // 返回集合中的任意count个成员
        List<String> randomSet = setOperations.randomMembers("set_01",3);
        // 随机地弹出集合中的一个成员
        String popValue = setOperations.pop("set_01");
        // 随机地弹出集合中的多个成员
        List<String> popValues = setOperations.pop("set_01",3);
        // 将集合set_01中的元素element_01移动到集合set_02
        Boolean isMove = setOperations.move("set_01","element_01","set_02");
        // 返回集合的差集,即set_01里面有的,set_02里面没有的
        Set<String> otherKeys = new HashSet<>();
        otherKeys.add("set_02");
        otherKeys.add("set_03");
        otherKeys.add("set_04");
        Set<String> diffSet = setOperations.difference("set_01","set_02");
        // 返回集合的差集,即set_01里面有的,set_02里面没有的,并且将差集存为destination_set
        setOperations.differenceAndStore("set_01","set_02","destination_set");
        // 返回集合的差集,即set_01集合里面有的,其他集合里面没有的
        Set<String> diffElements = setOperations.difference("set_01",otherKeys);
        // 返回集合的差集,即set_01集合里面有的,其他集合里面没有的,并且将差集存为destination_set
        setOperations.differenceAndStore("set_01",otherKeys,"destination_set");
        // 返回集合的交集
        Set<String> interSet = setOperations.intersect("set_01","set_02");
        Set<String> interOtherSet = setOperations.intersect("set_01",otherKeys);
        Set<String> interOthers = setOperations.intersect(otherKeys);
        // 返回集合的交集,并将交集存为destination_set
        setOperations.intersectAndStore("set_01","set_02","destination_set");
        setOperations.intersectAndStore("set_01",otherKeys,"destination_set");
        setOperations.intersectAndStore(otherKeys,"destination_set");
        // 返回集合的并集
        Set<String> unionSet = setOperations.union("set_01","set_02");
        Set<String> unionOtherSet = setOperations.union("set_01",otherKeys);
        Set<String> unionOthers = setOperations.union(otherKeys);
        // 返回集合的并集,并将并集存为destination_set
        setOperations.unionAndStore("set_01","set_02","destination");
        setOperations.unionAndStore("set_01",otherKeys,"destination");
        setOperations.unionAndStore(otherKeys,"destination");
    }

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Spring Boot 是一个流行的 Java Web 开发框架,它提供了很多集成的方式来方便地操作 Redis。 要使用 Spring Boot 操作 Redis,你需要先在 `pom.xml` 文件中添加 Redis 相关的依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> ``` 在 Spring Boot 的配置文件中,你需要配置 Redis 的连接信息: ```properties spring.redis.host=127.0.0.1 spring.redis.port=6379 ``` 在 Java 代码中,你可以通过 `RedisTemplate` 对象来进行 Redis 操作。例如,要向 Redis 中写入数据,可以使用以下代码: ```java @Autowired private RedisTemplate<String, String> redisTemplate; public void writeToRedis(String key, String value) { redisTemplate.opsForValue().set(key, value); } ``` 除了常规的操作,还可以使用 Spring Boot 提供的 Redis 注解,如 `@Cacheable`、`@CachePut`、`@CacheEvict` 等来进行缓存操作。 总之,Spring Boot 提供了很多便捷的方式来操作 Redis,让开发人员能够更加轻松地使用 Redis 的功能。 ### 回答2: Spring Boot是一个开发框架,可以帮助开发者快速搭建基于Java的应用程序。它对很多常用的组件和工具提供了简化配置和集成的支持,其中就包括了对Redis操作。 在Spring Boot中,我们可以通过添加Redis的依赖来集成Redis。在pom.xml文件中,我们需要添加以下依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> ``` 接下来,我们需要在application.properties或application.yml文件中配置Redis的连接信息,包括host、port和password等。如下所示: ```properties spring.redis.host=127.0.0.1 spring.redis.port=6379 spring.redis.password= ``` 配置完成后,我们就可以使用RedisTemplate类来操作Redis了。RedisTemplate类是Spring提供的用于操作Redis的工具类,它对常用操作进行了封装,提供了一些便捷的方法。 接下来,我们可以在Spring Boot的组件中使用注解@Autowired来注入RedisTemplate实例,然后就可以使用RedisTemplate提供的方法来进行操作,如下所示: ```java @Autowired private RedisTemplate<String, Object> redisTemplate; public void set(String key, Object value) { redisTemplate.opsForValue().set(key, value); } public Object get(String key) { return redisTemplate.opsForValue().get(key); } public void delete(String key) { redisTemplate.delete(key); } ``` 上述代码中,set方法可以用于将数据存储到Redis中,get方法用于从Redis中获取数据,delete方法用于删除指定的数据。 通过以上方式,我们可以在Spring Boot中方便地操作Redis。当然,除了RedisTemplate外,还有其他的一些工具类和注解可以用于操作Redis,具体使用方法可以参考官方文档或参考相关的教程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值