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 sentinel 频繁主备切换的问题
Apr 12 Redis
redis连接被拒绝的解决方案
Apr 12 Redis
redis内存空间效率问题的深入探究
May 17 Redis
Windows下redis下载、redis安装及使用教程
Jun 02 Redis
关于redisson缓存序列化几枚大坑说明
Aug 04 Redis
Redis+Lua脚本实现计数器接口防刷功能(升级版)
Feb 12 Redis
Redis中有序集合的内部实现方式的详细介绍
Mar 16 Redis
sentinel支持的redis高可用集群配置详解
Apr 01 Redis
浅谈Redis 中的过期删除策略和内存淘汰机制
Apr 03 Redis
redis复制有可能碰到的问题汇总
Apr 03 Redis
Redis唯一ID生成器的实现
Jul 07 Redis
Redis过期数据是否会被立马删除
Jul 23 Redis
详解redis在微服务领域的贡献
详解Redis在SpringBoot工程中的综合应用
Oct 16 #Redis
Redis三种集群模式详解
浅谈Redis的keys命令到底有多慢
基于Redis结合SpringBoot的秒杀案例详解
Jedis操作Redis实现模拟验证码发送功能
Sep 25 #Redis
为什么RedisCluster设计成16384个槽
You might like
网友原创的PHP模板类代码
2008/09/07 PHP
PHP语言中global和$GLOBALS[]的分析 之二
2012/02/02 PHP
PHP转换文件夹下所有文件编码的实现代码
2013/06/06 PHP
修改destoon会员公司的伪静态中的com目录的方法
2014/08/21 PHP
yii2安装详细流程
2018/05/23 PHP
php原生数据库分页的代码实例
2019/02/18 PHP
JS option location 页面跳转实现代码
2008/12/27 Javascript
MC Dialog js弹出层 完美兼容多浏览器(5.6更新)
2010/05/06 Javascript
原生JS实现表单checkbook获取已选择的值
2013/07/21 Javascript
原生javascript获取元素样式
2014/12/31 Javascript
对js中回调函数的一些看法
2016/08/29 Javascript
jQuery插件扩展操作入门示例
2017/01/16 Javascript
如何使用angularJs
2017/05/08 Javascript
javascript实现循环广告条效果
2017/12/12 Javascript
Windows下Node爬虫神器Puppeteer安装记
2019/01/09 Javascript
js图数据结构处理 迪杰斯特拉算法代码实例
2019/09/11 Javascript
jquery弹窗时禁止body滚动条滚动的例子
2019/09/21 jQuery
vue实现购物车结算功能
2020/06/18 Javascript
ES11屡试不爽的新特性,你用上了几个
2020/10/21 Javascript
js实现滚动条自动滚动
2020/12/13 Javascript
[04:52]DOTA2亚洲邀请赛附加赛 TOP10精彩集锦
2015/01/29 DOTA
python服务器与android客户端socket通信实例
2014/11/12 Python
Python 的字典(Dict)是如何存储的
2019/07/05 Python
python利用datetime模块计算程序运行时间问题
2020/02/20 Python
PyTorch在Windows环境搭建的方法步骤
2020/05/12 Python
一篇文章带你搞定Ubuntu中打开Pycharm总是卡顿崩溃
2020/11/02 Python
美国家用电器和电子产品商店:Abt
2016/09/06 全球购物
澳大利亚二手奢侈品网站:Modsie
2019/09/23 全球购物
2014年幼儿园植树节活动方案
2014/03/02 职场文书
岗位聘任书范文
2014/03/29 职场文书
村党的群众路线教育实践活动工作总结
2014/10/25 职场文书
2015年办公室人员工作总结
2015/05/15 职场文书
不同意离婚上诉状
2015/05/23 职场文书
数据结构课程设计心得体会
2016/01/15 职场文书
用Python制作灯光秀短视频的思路详解
2021/04/13 Python
MySQL 重命名表的操作方法及注意事项
2021/05/21 MySQL