[ 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

相关推荐
倔强的石头_4 小时前
【金仓数据库】ksql 指南(三) —— 创建与管理表空间和模式
数据库
白帽子黑客罗哥4 小时前
Redis实战深度剖析:高并发场景下的架构设计与性能优化
redis·网络安全·性能优化·高并发·分布式锁·秒杀系统·缓存架构
兮动人4 小时前
Maven 多配置文件的使用
java·maven·maven 多配置文件的使用
毕设源码-钟学长5 小时前
【开题答辩全过程】以 餐健一体化管理系统为例,包含答辩的问题和答案
java·eclipse
williamdsy5 小时前
【清除 Mac DNS 缓存】Mac 电脑能访问外网却无法加载特定页面?你的 DNS 缓存“发霉”了!
macos·缓存
摇滚侠5 小时前
Spring Boot3零基础教程,整合 SSM,笔记52
java·spring boot·笔记
程序新视界5 小时前
详解MySQL两种存储引擎MyISAM和InnoDB的优缺点
数据库·后端·mysql
半路_出家ren6 小时前
设计一个学生管理系统的数据库
linux·数据库·sql·mysql·网络安全·数据库管理员
毕设源码-朱学姐6 小时前
【开题答辩全过程】以 查寝打卡系统为例,包含答辩的问题和答案
java·eclipse