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 IP地址的绑定的实现
May 08 Redis
基于Redis延迟队列的实现代码
May 13 Redis
解析高可用Redis服务架构分析与搭建方案
Jun 20 Redis
Redis入门教程详解
Aug 30 Redis
基于Redis结合SpringBoot的秒杀案例详解
Oct 05 Redis
Redis三种集群模式详解
Oct 05 Redis
Redis调用Lua脚本及使用场景快速掌握
Mar 16 Redis
源码分析Redis中 set 和 sorted set 的使用方法
Mar 22 Redis
sentinel支持的redis高可用集群配置详解
Apr 01 Redis
使用Redis做预定库存缓存功能
Apr 02 Redis
解决 redis 无法远程连接
May 15 Redis
Redis基本数据类型Zset有序集合常用操作
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实现的MySQL通用查询程序
2007/03/11 PHP
php读取txt文件组成SQL并插入数据库的代码(原创自Zjmainstay)
2012/07/31 PHP
windows环境下php配置memcache的具体操作步骤
2013/06/09 PHP
PHP使用递归按层级查找数据的方法
2019/11/10 PHP
把input初始值不写value的具体实现方法
2013/07/04 Javascript
jQuery之选项卡的简单实现
2014/02/28 Javascript
基于Jquery+div+css实现弹出登录窗口(代码超简单)
2015/10/27 Javascript
javascript实现uploadify上传格式以及个数限制
2015/11/23 Javascript
详解js中的apply与call的用法
2016/07/30 Javascript
详解jQuery的表单验证插件--Validation
2016/12/21 Javascript
ExtJs的Ext.Ajax.request实现waitMsg等待提示效果
2017/06/14 Javascript
一个简易的js图片轮播效果
2017/07/22 Javascript
结合Vue控制字符和字节的显示个数的示例
2018/05/17 Javascript
详解Vue源码之数据的代理访问
2018/12/11 Javascript
vue-dplayer 视频播放器实例代码
2019/11/08 Javascript
webpack中的模式(mode)使用详解
2020/02/20 Javascript
jQuery 选择方法及$(this)用法实例分析
2020/05/19 jQuery
[02:36]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Magma 选手采访
2021/03/11 DOTA
python实现多线程抓取知乎用户
2016/12/12 Python
python+opencv实现的简单人脸识别代码示例
2017/11/14 Python
Pandas的read_csv函数参数分析详解
2019/07/02 Python
python按修改时间顺序排列文件的实例代码
2019/07/25 Python
python argparse模块通过后台传递参数实例
2020/04/20 Python
Pytorch数据拼接与拆分操作实现图解
2020/04/30 Python
python实现爱奇艺登陆密码RSA加密的方法示例详解
2020/05/27 Python
weblogic面试题
2016/03/07 面试题
土木工程应届生自荐信
2013/09/24 职场文书
自动化专业本科毕业生求职信
2013/10/20 职场文书
警察思想汇报
2014/01/04 职场文书
蛋糕店的商业计划书范文
2014/01/27 职场文书
函授毕业个人自我评价
2014/02/20 职场文书
中学生操行评语大全
2014/04/24 职场文书
农村党支部书记党群众路线四风问题整改措施
2014/09/26 职场文书
机关班子查摆问题及整改措施
2014/10/28 职场文书
小学主题班会教案
2015/08/17 职场文书
windows server 2012安装FTP并配置被动模式指定开放端口
2022/06/10 Servers