springboot2.7 redis配置与操作

参考地址:https://www.codenong.com/cs107128098/

一、pom.xml中添加依赖

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

二、application.properties 配置

spring.redis.host=172.16.3.122
spring.redis.port=6379
spring.redis.database=0
spring.redis.password=password

三、解决springboot插入数据后客户端软件查看乱码问题

添加配置文件:RedisConfig

package com.example.demo.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

/**
 * 加该配置的作用在于解决springboot存入redis后产生乱码问题
 * Redis默认序列化规则导致的。RedisTemplate默认的所有序列化规则都是JDKSerializer,而StringRedisTemplate默认的序列化规则是StringRedisSerializer。
 */
@Configuration
public class RedisConfig {
    @Bean
    RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {

        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
        // 设置值(value)的序列化采用Jackson2JsonRedisSerializer。
        redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
        // 设置键(key)的序列化采用StringRedisSerializer。
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());

        redisTemplate.afterPropertiesSet();
        return redisTemplate;
    }
}

四、springboot  操作redis

首先在类中注入RedisTemplate
@Autowired
private RedisTemplate redisTemplate;

1、字符串操作

redisTemplate.boundValueOps(“name”).set(“itcast”);
// 取值
String str = (String) redisTemplate.boundValueOps(“name”).get();

2、set类型操作

//存入值
redisTemplate.boundSetOps(“nameset”).add(“曹操”);
redisTemplate.boundSetOps(“nameset”).add(“刘备”);
redisTemplate.boundSetOps(“nameset”).add(“孙权”);

//提取值
Set members = redisTemplate.boundSetOps(“nameset”).members(); //set类型取出的值没有顺序

//删除集合中的某一个值
redisTemplate.boundSetOps(“nameset”).remove(“孙权”);

//删除整个集合
redisTemplate.delete(“nameset”);

3、list类型操作

//右压栈:后添加的对象排在后边
redisTemplate.boundListOps(“namelist1”).rightPush(“刘备”);
redisTemplate.boundListOps(“namelist1”).rightPush(“关羽”);
redisTemplate.boundListOps(“namelist1”).rightPush(“张飞”);

//显示右压栈集合
List list = redisTemplate.boundListOps(“namelist1”).range(0, 10); /*获取索引为0-10的元素,如果要获取集合中所有的元素,则使用range(0,-1)
运行结果:
[刘备, 关羽, 张飞]
*/

//左压栈:后添加的对象排在前边
redisTemplate.boundListOps(“namelist2”).leftPush(“刘备”);
redisTemplate.boundListOps(“namelist2”).leftPush(“关羽”);
redisTemplate.boundListOps(“namelist2”).leftPush(“张飞”);

//显示左压栈集合
List list = redisTemplate.boundListOps(“namelist2”).range(0, 10);
/*运行结果:
[张飞, 关羽, 刘备]
*/

//查询集合某个元素
String s = (String)redisTemplate.boundListOps(“namelist1”).index(1);

//移除集合某个元素
redisTemplate.boundListOps(“namelist1”).remove(1, “关羽”);  //按顺序移除集合中的一个"关羽"

4、Hash类操作

//存入值
redisTemplate.boundHashOps(“namehash”).put(“a”, “唐僧”);
redisTemplate.boundHashOps(“namehash”).put(“b”, “悟空”);
redisTemplate.boundHashOps(“namehash”).put(“c”, “八戒”);
redisTemplate.boundHashOps(“namehash”).put(“d”, “沙僧”);

//提取所有的KEY
Set s = redisTemplate.boundHashOps(“namehash”).keys();
/*运行结果:
[a, b, c, d]
*/

//提取所有的值
List values = redisTemplate.boundHashOps(“namehash”).values();
/*
运行结果:
[唐僧, 悟空, 八戒, 沙僧]
*/

//根据KEY提取值
Object object = redisTemplate.boundHashOps(“namehash”).get(“b”);
/*
运行结果:
悟空
*/

//根据KEY移除值
redisTemplate.boundHashOps(“namehash”).delete(“c”);

5、ZSet类型操作

//存值 ,指定分值
redisTemplate.boundZSetOps(“namezset”).add(“曹操”,100000);
redisTemplate.boundZSetOps(“namezset”).add(“孙权”,0);
redisTemplate.boundZSetOps(“namezset”).add(“刘备”,1000);

//查询,由低到高
//由低到高排序
Set namezset = redisTemplate.boundZSetOps(“namezset”).range(0,‐1);

//查询,由高到低,土豪榜前10
//由高到底排序(土豪榜)
Set namezset =redisTemplate.boundZSetOps(“namezset”).reverseRange(0,9);

//增加分数
redisTemplate.boundZSetOps(“namezset”).incrementScore(“孙权”,2000);

//查询值和分数
Set namezset = redisTemplate.boundZSetOps(“namezset”).reverseRangeWithScores(0, ‐1);
for(ZSetOperations.TypedTuple typedTuple:namezset){
System.out.print(“姓名:”+typedTuple.getValue());
System.out.println(“金币:”+typedTuple.getScore());
}

过期时间设置

//存值
redisTemplate.boundValueOps(“name”).set(“itcast”);

//设置过期时间
redisTemplate.boundValueOps(“name”).expire(10,TimeUnit.SECONDS);

 

posted @ 2023-08-02 11:50  远洪  阅读(1150)  评论(0)    收藏  举报