[ Redis ] SpringBoot集成使用Redis(补充)

目录

[四. springBoot 集成使用 redis](#四. springBoot 集成使用 redis)

[(1). 概述](#(1). 概述)

[(2). 搭建](#(2). 搭建)

[1. 添加 redis 依赖](#1. 添加 redis 依赖)

[2. 配置连接 redis](#2. 配置连接 redis)

[3. 注入 RedisTemplate](#3. 注入 RedisTemplate)

[4. 测试](#4. 测试)

[5. 后端测试redis](#5. 后端测试redis)


四. springBoot 集成使用 redis

(1). 概述

Jedis 是 Redis 官方推出的一款面向 Java 的客户端,提供了很多接口供 Java 语言调用。可以在 Redis 官网下载.

Spring-data-redis 是 spring 大家族的一部分 ,提供了在 srping 应用中通过简单的配置访问 redis 服务,对 reids 底层开发包(Jedis, JRedis, and RJC)进行了高度封装,RedisTemplate 提供了 redis 各种操作.

spring-data-redis 针对 Redis 提供了如下功能:

1.连接池自动管理,提供了一个高度封装的"RedisTemplate"类.

2.针对 jedis 客户端中大量 api 进行了归类封装,将同一类型操作封装为operation 接口.

ValueOperations:简单 K-V 操作

SetOperations:set 类型数据操作

ZSetOperations:zset 类型数据操作

HashOperations:针对 map 类型的数据操作

ListOperations:针对 list 类型的数据操作

3.将事务操作封装,有容器控制。

4.针对数据的"序列化/反序列化",提供了多种可选择策略(RedisSerializer)

JdkSerializationRedisSerializer:POJO 对象的存取场景,使用 JDK 本身序列化机制.

StringRedisSerializer:Key 或者 value 为字符串的场景,根据指定的charset 对数据的字节序列编码成 string,是"new String(bytes, charset)"和 "string.getBytes(charset)"的直接封装。是最轻量级和高效的策略。

JacksonJsonRedisSerializer:jackson-json 工具提供了 javabean 与 json之间的转换能力,可以将 pojo 实例序列化成 json 格式存储在 redis 中,也可以将 json 格式的数据转换成 pojo 实例。

(2). 搭建

1. 添加 redis 依赖

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-data-redis</artifactId>

</dependency>

2. 配置连接 redis

spring:

redis:

host: 192.168.31.100

port: 6379

password: 111

database: 0

pool:

max-active: 8 # 连接池最大连接数(使用负值表示没有限制)

max-wait: -1ms # 连接池最大阻塞等待时间(使用负值表示没有限制)

max-idle: 8 # 连接池中的最大空闲连接

min-idle: 0 # 连接池中的最小空闲连接

timeout: 5000ms # 连接超时时间(毫秒)

3. 注入 RedisTemplate

@Autowired

RedisTemplate redisTemplate;

4. 测试

redisTemplate.opsForValue().set("name", "aa");

redisTemplate.opsForValue().set("users", users,10*1000, TimeUnit.MILLISECONDS);

redisTemplate.hasKey("name");

redisTemplate.opsForValue().get("name");

redisTemplate.delete("users");序列化键值

redisTemplate.setKeySerializer(new StringRedisSerializer());

redisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer<User>(User.class));

需要被 Redis 缓存的类,必须实现序列化接口

5. 后端测试redis

将上述命令转为后端的方法

java 复制代码
package com.ffyc.news.web;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.ffyc.news.model.Menu;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.HashOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.concurrent.TimeUnit;

@RestController
@RequestMapping(path = "/redistest")
public class RedisTest {
    @Autowired
    private RedisTemplate redisTemplate;

    @GetMapping(path = "testhash")
    public  void testHash(){
        HashOperations hashOperations = redisTemplate.opsForHash();
                       hashOperations.put("newsid1","dz",10);//点赞
                       hashOperations.put("newsid1","fw",20);//访问
                       hashOperations.put("newsid1","sc",5);//收藏
        System.out.println(hashOperations.get("newsid","sc"));


    }

    @GetMapping(path = "/teststring")
    public  void  testString(){
        //序列化,也可以添加配置类进行序列化 省去每次都添加序列化代码
        //redisTemplate.setKeySerializer(new StringRedisSerializer());//key键进行序列化
        //redisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer<Object>(Object.class));//value值进行序列化

        System.out.println(redisTemplate.delete("age"));//删除key键
        System.out.println(redisTemplate.hasKey("a"));//判断键key是否存在

        //获取String类型操作方法,  ValueOperations封装操作String类型的方法
        ValueOperations valueOperations = redisTemplate.opsForValue();
                        valueOperations.set("k","kk");
        System.out.println(valueOperations.get("k"));

        valueOperations.set("count",0);
        valueOperations.increment("count");
        valueOperations.increment("count");
        valueOperations.increment("count");//自增
        valueOperations.decrement("count");//自减
        System.out.println(valueOperations.get("count"));

        Menu menu = new Menu();
                menu.setId(1);
                menu.setName("新闻管理");
        valueOperations.set("menu",menu,10, TimeUnit.MINUTES);//(键,对象,失效时间,时间单位)


    }
}

注意: 添加redis序列化 避免redis中的数据格式与Java传输的数据格式不一致,操作失败

java 复制代码
package com.ffyc.news.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;
//redis序列化键值
@Configuration
public class RedisConfig {

    /**
     * 序列化键,值
     * @param connectionFactory
     * @return
     */
    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(connectionFactory);
        //序列化策略
        Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<Object>(Object.class);
        StringRedisSerializer redisSerializer = new StringRedisSerializer();
        //key序列化为普通的
        redisTemplate.setKeySerializer(redisSerializer);//key 单一的字符串
        redisTemplate.setHashKeySerializer(redisSerializer);
        //将String,Hash结构值都序列化为json字符串
        redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);//value {}
        redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);

        return redisTemplate;
    }
}

如果开机redis没有启动,需要自己打开. 地址如下

D:\development\redis

相关推荐
無限進步D9 小时前
Java 运行原理
java·开发语言·入门
難釋懷9 小时前
安装Canal
java
是苏浙9 小时前
JDK17新增特性
java·开发语言
不光头强9 小时前
spring cloud知识总结
后端·spring·spring cloud
Mike117.9 小时前
GBase 8a 日期边界写法和时间窗口取数偏差
数据库
SPC的存折10 小时前
1、Redis数据库基础
linux·运维·服务器·数据库·redis·缓存
阿里加多12 小时前
第 4 章:Go 线程模型——GMP 深度解析
java·开发语言·后端·golang
likerhood12 小时前
java中`==`和`.equals()`区别
java·开发语言·python
小小李程序员12 小时前
Langchain4j工具调用获取不到ThreadLocal
java·后端·ai
zs宝来了13 小时前
AQS详解
java·开发语言·jvm