[ 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

相关推荐
云游几秒前
Jaspersoft Studio community edition 7.0.3的应用
java·报表
帅气的你6 分钟前
Spring Boot 集成 AOP 实现日志记录与接口权限校验
java·spring boot
zhglhy26 分钟前
Spring Data Slice使用指南
java·spring
win x38 分钟前
Redis 主从复制
java·数据库·redis
周末吃鱼44 分钟前
MySQL CTE:SQL查询新模式
数据库·sql·mysql
木风小助理1 小时前
解读 SQL 累加计算:从传统方法到窗口函数
大数据·数据库·sql
weixin_423995001 小时前
unity 处理图片:截图,下载,保存
java·unity·游戏引擎
帅气的你1 小时前
从零封装一个通用的 API 接口返回类:统一前后端交互格式
java·设计模式
qq_178057071 小时前
基于minio实现的分片上传-支持断点续传
java
高山上有一只小老虎1 小时前
灵异背包?
java·算法