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 相关文章推荐
在K8s上部署Redis集群的方法步骤
Apr 27 Redis
redis 查看所有的key方式
May 07 Redis
redis实现共同好友的思路详解
May 26 Redis
Windows下redis下载、redis安装及使用教程
Jun 02 Redis
使用redis生成唯一编号及原理示例详解
Sep 15 Redis
 Redis 串行生成顺序编码的方法实现
Apr 03 Redis
Redis keys命令的具体使用
Jun 05 Redis
Redis实现主从复制方式(Master&Slave)
Jun 21 Redis
Redis唯一ID生成器的实现
Jul 07 Redis
redis protocol通信协议及使用详解
Jul 15 Redis
Redis Lua脚本实现ip限流示例
Jul 15 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多线程异步请求的3种方法
2014/01/17 PHP
php利用curl抓取新浪微博内容示例
2014/04/27 PHP
PHP微信红包API接口
2015/12/05 PHP
postfixadmin忘记密码后的修改密码方法详解
2016/07/20 PHP
总结一些js自定义的函数
2006/08/05 Javascript
兼容FireFox 的 js 日历 支持时间的获取
2009/03/04 Javascript
js鼠标及对象坐标控制属性详细解析
2013/12/14 Javascript
Asp.Net alert弹出提示信息的几种方法总结
2014/01/29 Javascript
jQuery实现的简洁下拉菜单导航效果代码
2015/08/26 Javascript
浅谈Javascript中substr和substring的区别
2015/09/30 Javascript
JS弹出对话框实现方法(三种方式)
2015/12/18 Javascript
EsLint入门学习教程
2017/02/17 Javascript
JS如何实现在页面上快速定位(锚点跳转问题)
2017/08/14 Javascript
基于Vue、Vuex、Vue-router实现的购物商城(原生切换动画)效果
2018/01/09 Javascript
Vue单页及多页应用全局配置404页面实践记录
2018/05/22 Javascript
详解基于vue的服务端渲染框架NUXT
2018/06/20 Javascript
Python ORM框架SQLAlchemy学习笔记之关系映射实例
2014/06/10 Python
Python单链表的简单实现方法
2014/09/23 Python
在Docker上开始部署Python应用的教程
2015/04/17 Python
Python求两个文本文件以行为单位的交集、并集与差集的方法
2015/06/17 Python
python django使用haystack:全文检索的框架(实例讲解)
2017/09/27 Python
python 数字类型和字符串类型的相互转换实例
2018/07/17 Python
python2 与 pyhton3的输入语句写法小结
2018/09/10 Python
django 中的聚合函数,分组函数,F 查询,Q查询
2019/07/25 Python
vue常用指令代码实例总结
2020/03/16 Python
python mysql自增字段AUTO_INCREMENT值的修改方式
2020/05/18 Python
时尚设计师手表:The Watch Cabin
2018/10/06 全球购物
师范大学毕业自我鉴定
2013/11/21 职场文书
咖啡厅创业计划书范本
2014/01/22 职场文书
《美丽的田园》教学反思
2014/03/01 职场文书
计生专干事迹
2014/05/28 职场文书
大学生个人求职信
2014/06/02 职场文书
婚礼证婚人演讲稿
2014/09/13 职场文书
党员组织生活会发言材料
2014/10/17 职场文书
办公室文员岗位职责
2015/02/04 职场文书
Mysql数据库按时间点恢复实战记录
2021/06/30 MySQL