SpringBoot集成Redis的思路详解


Posted in Redis onOctober 16, 2021

SpringBoot集成Redis

1、概述

Redis是什么?

Redis(Remote Dictionary Server ),即远程字典服务。

是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

Redis能该干什么?

内存存储、持久化,内存是断电即失的,所以需要持久化(RDB、AOF)高效率、用于高速缓冲发布订阅系统地图信息分析计时器、计数器(eg:浏览量)… …

特性

多样的数据类型

持久化

集群

事务

2、测试Redis

SpringBoot操作数据,Spring-Data、 jbdc、redis… …

SpringData与SpringBoot齐名的项目!

说明:在SpringBoot2.x之后,原来使用的jedis被替换为lettuce

jedis:采用的直连,多个线程操作的话,是不安全的,如果想要避免不安全的,需使用jedis pool连接池!像BIO模式

lettuce:采用netty,实例可以再多个线程中进行共享,不存在线程不安全的情况!可以减少线程数据,更像NIO模式

SpringBoot集成Redis的思路详解

新建一个项目

SpringBoot集成Redis的思路详解

SpringBoot集成Redis的思路详解

注意:

SpringBoot集成Redis的思路详解

查看底层

SpringBoot集成Redis的思路详解

源码分析:

@Bean
@ConditionalOnMissingBean(  //如果未注入组件条件,我们自己可以定义一个redisTemplate来替换这个默认的
    name = {"redisTemplate"}
)
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) throws UnknownHostException {
    //默认的 RedisTemplate 没有过多的设置 redis 都是需要序列化的  !
    //两个泛型都是 Object  Object的类型,我们往后使用需要强制转换<String,String>
    RedisTemplate<Object, Object> template = new RedisTemplate();
    template.setConnectionFactory(redisConnectionFactory);
    return template;
}

@Bean
@ConditionalOnMissingBean  //由于String 是redis 中最常用的类型  所有说单独提出来一个bean!
public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory) throws UnknownHostException {
    StringRedisTemplate template = new StringRedisTemplate();
    template.setConnectionFactory(redisConnectionFactory);
    return template;
}

1、导入依赖

2、配置连接

# SpringBoot 所有的配置类 都有一个自动配置类  RedisAutoConfiguration
# 自动配置类都会绑定一个 properties 配置文件  RedisProperties
#配置 redis
spring.redis.host=127.0.0.1
spring.redis.port=6379

spring.redis

3、测试!

package com.kk;

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.RedisConnection;
import org.springframework.data.redis.core.RedisTemplate;

@SpringBootTest
class Redis01SpringbootApplicationTests {

    @Autowired
    private RedisTemplate redisTemplate;

    @Test
    void contextLoads() {
        /*
        redisTemplate
        opsForValue  操作字符串的  类似String
        opsForList  操作List  类似List
        opsForSet
        opsForHash
        opsForZSet
        opsForGeo
        opsForHyperLogLog

        除了基本的操作 ,我们常用的方法都可以直接通过redisTemplate 比如事务和基本的CRUD


         */


        //获取redis的连接对象
//        RedisConnection connection = redisTemplate.getConnectionFactory().getConnection();
//        connection.flushDb();
//        connection.flushAll();

        redisTemplate.opsForValue().set("kk1","kk2");
        System.out.println(redisTemplate.opsForValue().get("kk1"));

    }

}

SpringBoot集成Redis的思路详解

3、自定义redisTemplate

首先先建一个实体类,测试

User类

package com.kk.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.stereotype.Component;

import java.io.Serializable;

@Component
@Data
@AllArgsConstructor
@NoArgsConstructor
//在企业中,我们所有的pojo都会序列化
public class User implements Serializable {
    private String name;
    private int age;
}

测试:

@Test
public void test() throws JsonProcessingException {
    //真实的开发一般都使用json来传递对象
    User user = new User("kk", 17);
    String jsonUser = new ObjectMapper().writeValueAsString(user);//这样就变成了一个json对象了
    redisTemplate.opsForValue().set("user",jsonUser);
    System.out.println(redisTemplate.opsForValue().get("user"));
}
r = new ObjectMapper().writeValueAsString(user);//这样就变成了一个json对象了
redisTemplate.opsForValue().set(“user”,jsonUser);
System.out.println(redisTemplate.opsForValue().get(“user”));
}

==注意:如果不在User类中实现序列化,它会报错==

到此这篇关于SpringBoot集成Redis的文章就介绍到这了,更多相关SpringBoot集成Redis内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Redis 相关文章推荐
浅谈redis五大数据结构和使用场景
Apr 12 Redis
基于Redis位图实现用户签到功能
May 08 Redis
Java Socket实现Redis客户端的详细说明
May 26 Redis
SpringBoot 集成Redis 过程
Jun 02 Redis
Windows中Redis安装配置流程并实现远程访问功能
Jun 07 Redis
了解Redis常见应用场景
Jun 23 Redis
redis客户端实现高可用读写分离的方式详解
Jul 04 Redis
Redis如何实现分布式锁
Aug 23 Redis
Redis 持久化 RDB 与 AOF的执行过程
Nov 07 Redis
Redis中缓存穿透/击穿/雪崩问题和解决方法
Dec 04 Redis
Redis安装使用RedisJSON模块的方法
Mar 23 Redis
Redis入门基础常用操作命令整理
Jun 01 Redis
详解redis在微服务领域的贡献
详解Redis在SpringBoot工程中的综合应用
Oct 16 #Redis
Redis三种集群模式详解
浅谈Redis的keys命令到底有多慢
基于Redis结合SpringBoot的秒杀案例详解
Jedis操作Redis实现模拟验证码发送功能
Sep 25 #Redis
为什么RedisCluster设计成16384个槽
You might like
PHP Directory 函数的详解
2013/03/07 PHP
JavaScript 创建对象和构造类实现代码
2009/07/30 Javascript
浅谈Javascript事件模拟
2012/06/27 Javascript
Javascript对象中关于setTimeout和setInterval的this介绍
2012/07/21 Javascript
jQuery插件的写法分享
2013/06/12 Javascript
鼠标经过子元素触发mouseout,mouseover事件的解决方案
2015/07/26 Javascript
每天一篇javascript学习小结(String对象)
2015/11/18 Javascript
Bootstrap 模态框实例插件案例分析
2016/12/28 Javascript
angular和BootStrap3实现购物车功能
2017/01/25 Javascript
bootstrap table单元格新增行并编辑
2017/05/19 Javascript
ng-events类似ionic中Events的angular全局事件
2018/09/05 Javascript
Vue实现远程获取路由与页面刷新导致404错误的解决
2019/01/31 Javascript
layui使用button按钮 点击出现弹层 弹层中加载表单的实例
2019/09/04 Javascript
vue中更改数组中属性,在页面中不生效的解决方法
2019/10/30 Javascript
vue项目中使用bpmn为节点添加颜色的方法
2020/04/30 Javascript
JavaScript设计模式---单例模式详解【四种基本形式】
2020/05/16 Javascript
详解Node.JS模块 process
2020/08/31 Javascript
JS将指定的某个字符全部转换为其他字符实例代码
2020/10/13 Javascript
python检测服务器是否正常
2014/02/16 Python
PyQt5每天必学之工具提示功能
2018/04/19 Python
Python3使用正则表达式爬取内涵段子示例
2018/04/22 Python
python opencv3实现人脸识别(windows)
2018/05/25 Python
Pycharm无法使用已经安装Selenium的解决方法
2018/10/13 Python
pycharm 解除默认unittest模式的方法
2018/11/30 Python
11个Python3字典内置方法大全与示例汇总
2019/05/13 Python
Python提取PDF内容的方法(文本、图像、线条等)
2019/09/25 Python
Python 格式化输出_String Formatting_控制小数点位数的实例详解
2020/02/04 Python
如何使用Django Admin管理后台导入CSV
2020/11/06 Python
pycharm进入时每次都是insert模式的解决方式
2021/02/05 Python
WINDOWS域的具体实现方式是什么
2014/02/20 面试题
摄影实习自我鉴定
2013/09/20 职场文书
高中政治教学反思
2014/01/18 职场文书
幼儿园大班毕业教师寄语
2014/04/03 职场文书
2015年秋季校长开学典礼致辞
2015/07/29 职场文书
小学四年级班主任工作经验交流材料
2015/11/02 职场文书
Django 如何实现文件上传下载
2021/04/08 Python