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分布式锁的这些坑
May 19 Redis
redis cluster支持pipeline的实现思路
Jun 23 Redis
浅谈Redis中的RDB快照
Jun 29 Redis
缓存替换策略及应用(以Redis、InnoDB为例)
Jul 25 Redis
Redis读写分离搭建的完整步骤
Sep 14 Redis
关于SpringBoot 使用 Redis 分布式锁解决并发问题
Nov 17 Redis
redis的list数据类型相关命令介绍及使用
Jan 18 Redis
高并发下Redis如何保持数据一致性(避免读后写)
Mar 18 Redis
redis调用二维码时的不断刷新排查分析
Apr 01 Redis
muduo TcpServer模块源码分析
Apr 26 Redis
详解Redis的三种常用的缓存读写策略步骤
May 06 Redis
Redis配置外网可访问(redis远程连接不上)的方法
Dec 24 Redis
详解redis在微服务领域的贡献
详解Redis在SpringBoot工程中的综合应用
Oct 16 #Redis
Redis三种集群模式详解
浅谈Redis的keys命令到底有多慢
基于Redis结合SpringBoot的秒杀案例详解
Jedis操作Redis实现模拟验证码发送功能
Sep 25 #Redis
为什么RedisCluster设计成16384个槽
You might like
php实现在服务器上创建目录的方法
2015/03/16 PHP
zen_cart实现支付前生成订单的方法
2016/05/06 PHP
非常实用的php验证码类
2016/05/15 PHP
DOM_window对象属性之--clipboardData对象操作代码
2011/02/03 Javascript
javascript定时保存表单数据的代码
2011/03/17 Javascript
Extjs EditorGridPanel中ComboBox列的显示问题
2011/07/04 Javascript
动态加载script文件的两种方法
2013/08/15 Javascript
JavaScript拆分字符串时产生空字符的解决方案
2014/09/26 Javascript
jQuery购物网页经典制作案例
2016/08/19 Javascript
jQuery动态改变多行文本框高度的方法
2016/09/07 Javascript
浅谈Node.js:理解stream
2016/12/08 Javascript
使用vue.js实现联动效果的示例代码
2017/01/10 Javascript
vue上传图片组件编写代码
2017/07/26 Javascript
ionic3实战教程之随机布局瀑布流的实现方法
2017/12/28 Javascript
vue scroller返回页面记住滚动位置的实例代码
2018/01/29 Javascript
js前端如何写一个精确的倒计时代码
2019/10/25 Javascript
解决Antd Table表头加Icon和气泡提示的坑
2020/11/17 Javascript
python中map()与zip()操作方法
2016/02/27 Python
Mac中Python 3环境下安装scrapy的方法教程
2017/10/26 Python
机器学习的框架偏向于Python的13个原因
2017/12/07 Python
python爬虫正则表达式之处理换行符
2018/06/08 Python
Python装饰器限制函数运行时间超时则退出执行
2019/04/09 Python
python处理大日志文件
2019/07/23 Python
Windows系统下pycharm中的pip换源
2020/02/23 Python
python中adb有什么功能
2020/06/07 Python
使用Python爬虫爬取小红书完完整整的全过程
2021/01/19 Python
CSS3 网页下拉菜单代码解释 中文翻译
2010/02/27 HTML / CSS
非常漂亮的CSS3百叶窗焦点图动画
2016/02/24 HTML / CSS
AmazeUI 缩略图的实现示例
2020/08/18 HTML / CSS
英国领先的电动可调床制造商:Laybrook
2019/12/26 全球购物
啤酒节策划方案
2014/05/28 职场文书
节能环保家庭事迹材料
2014/08/27 职场文书
2014党员整改措施思想汇报
2014/10/07 职场文书
人民调解协议书范本
2014/10/11 职场文书
MySQL CHAR和VARCHAR该如何选择
2021/05/31 MySQL
python入门学习关于for else的特殊特性讲解
2021/11/20 Python