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 20 Redis
Redis高级数据类型Hyperloglog、Bitmap的使用
May 24 Redis
浅谈Redis主从复制以及主从复制原理
May 29 Redis
Django使用redis配置缓存的方法
Jun 01 Redis
详解Redis基本命令与使用场景
Jun 01 Redis
redis实现的四种常见限流策略
Jun 18 Redis
在项目中使用redis做缓存的一些思路
Sep 14 Redis
浅谈Redis跟MySQL的双写问题解决方案
Feb 24 Redis
Grafana可视化监控系统结合SpringBoot使用
Apr 19 Redis
Redis基本数据类型哈希Hash常用操作命令
Jun 01 Redis
如何使用注解方式实现 Redis 分布式锁
Jul 23 Redis
基于Redission的分布式锁实战
Aug 14 Redis
详解redis在微服务领域的贡献
详解Redis在SpringBoot工程中的综合应用
Oct 16 #Redis
Redis三种集群模式详解
浅谈Redis的keys命令到底有多慢
基于Redis结合SpringBoot的秒杀案例详解
Jedis操作Redis实现模拟验证码发送功能
Sep 25 #Redis
为什么RedisCluster设计成16384个槽
You might like
php cli模式学习(PHP命令行模式)
2013/06/03 PHP
php将文件夹打包成zip文件的简单实现方法
2016/10/04 PHP
PHP检查网站是否宕机的方法示例
2017/07/24 PHP
原生javascript模仿win8等待提示圆圈进度条
2014/04/24 Javascript
jquery $.trim()方法使用介绍
2014/05/21 Javascript
window.location的重写及判断location是否被重写
2014/09/04 Javascript
jQuery中Ajax的get、post等方法详解
2015/01/20 Javascript
NodeJS使用jQuery选择器操作DOM
2015/02/13 NodeJs
javascript处理a标签超链接默认事件的方法
2015/06/29 Javascript
谈一谈jQuery核心架构设计
2016/03/28 Javascript
js弹出窗口返回值的简单实例
2016/05/28 Javascript
javascript实现消灭星星小游戏简单版
2016/11/15 Javascript
JavaScript中使用import 和require打包后实现原理分析
2018/03/07 Javascript
基于jQuery实现无缝轮播与左右点击效果
2018/05/13 jQuery
Vue+webpack+Element 兼容问题总结(小结)
2018/08/16 Javascript
node使用Mongoose类库实现简单的增删改查
2018/11/08 Javascript
JS实现获取数组中最大值或最小值功能示例
2019/03/02 Javascript
JavaScript实现的滚动公告特效【基于jQuery】
2019/07/10 jQuery
vue-router 中 meta的用法详解
2019/11/01 Javascript
js实现图片实时时钟
2020/01/15 Javascript
小程序实现tab标签页
2020/11/16 Javascript
Python开发的单词频率统计工具wordsworth使用方法
2014/06/25 Python
网红编程语言Python将纳入高考你怎么看?
2018/06/07 Python
使用matlab或python将txt文件转为excel表格
2019/11/01 Python
Python GUI库PyQt5图形和特效样式QSS介绍
2020/02/25 Python
阿根廷首家户外用品制造商和经销商:Montagne
2018/02/12 全球购物
美国棒球装备和用品商店:Baseball Savings
2018/06/09 全球购物
YII2 全局异常处理深入讲解
2021/03/24 PHP
信息部岗位职责
2013/11/12 职场文书
法人委托书范本
2014/09/15 职场文书
2015年元宵节活动总结
2015/02/06 职场文书
证婚人婚礼致辞
2015/07/28 职场文书
不会写演讲稿,快来看看这篇文章!
2019/08/06 职场文书
赞美教师的句子
2019/09/02 职场文书
golang 比较浮点数的大小方式
2021/05/02 Golang
Java使用JMeter进行高并发测试
2021/11/23 Java/Android