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遍历所有key的两个命令(KEYS 和 SCAN)
Apr 12 Redis
浅谈Redis在直播场景的实践方案
Apr 27 Redis
redis内存空间效率问题的深入探究
May 17 Redis
redis实现排行榜功能
May 24 Redis
redis requires ruby version2.2.2的解决方案
Jul 15 Redis
Redis做数据持久化的解决方案及底层原理
Jul 15 Redis
Springboot/Springcloud项目集成redis进行存取的过程解析
Dec 04 Redis
Redis 中使用 list,streams,pub/sub 几种方式实现消息队列的问题
Mar 16 Redis
sentinel支持的redis高可用集群配置详解
Apr 01 Redis
Redis实战高并发之扣减库存项目
Apr 14 Redis
Redis官方可视化工具RedisInsight安装使用教程
Apr 19 Redis
Redis实现分布式锁的五种方法详解
Jun 14 Redis
详解redis在微服务领域的贡献
详解Redis在SpringBoot工程中的综合应用
Oct 16 #Redis
Redis三种集群模式详解
浅谈Redis的keys命令到底有多慢
基于Redis结合SpringBoot的秒杀案例详解
Jedis操作Redis实现模拟验证码发送功能
Sep 25 #Redis
为什么RedisCluster设计成16384个槽
You might like
php实现水仙花数示例分享
2014/04/03 PHP
php实现的任意进制互转类分享
2015/07/07 PHP
php面向对象值单例模式
2016/05/03 PHP
PHP基于rabbitmq操作类的生产者和消费者功能示例
2018/06/16 PHP
Thinkphp5.0框架的Db操作实例分析【连接、增删改查、链式操作等】
2019/10/11 PHP
Laravel 5.2 文档 数据库 ―― 起步介绍
2019/10/21 PHP
javascript编程起步(第七课)
2007/01/10 Javascript
jQuery操作 input type=checkbox的实现代码
2012/06/14 Javascript
js实现带圆角的两级导航菜单效果代码
2015/08/24 Javascript
jQuery+HTML5美女瀑布流布局实现方法
2015/09/21 Javascript
JS实现自定义简单网页软键盘效果代码
2015/11/05 Javascript
Bootstrap CSS组件之输入框组
2016/12/17 Javascript
nodejs个人博客开发第四步 数据模型
2017/04/12 NodeJs
react-navigation 如何判断用户是否登录跳转到登录页的方法
2017/12/01 Javascript
VUE接入腾讯验证码功能(滑块验证)备忘
2019/05/07 Javascript
使vue实现jQuery调用的两种方法
2019/05/12 jQuery
浅谈鸿蒙 JavaScript GUI 技术栈
2020/09/17 Javascript
python 图片验证码代码分享
2012/07/04 Python
Python聚类算法之DBSACN实例分析
2015/11/20 Python
浅谈Python里面小数点精度的控制
2018/07/16 Python
python中将zip压缩包转为gz.tar的方法
2018/10/18 Python
python matplotlib实现双Y轴的实例
2019/02/12 Python
完美解决torch.cuda.is_available()一直返回False的玄学方法
2021/02/06 Python
英国儿童图书网站:Scholastic
2017/03/26 全球购物
iHerb中文官网:维生素、保健品和健康产品
2018/11/01 全球购物
Ootori在线按摩椅店:一家专业的按摩椅制造商
2019/04/10 全球购物
Linux文件操作命令都有哪些
2016/07/23 面试题
仓库主管的岗位职责
2013/12/04 职场文书
教育英语专业毕业生的求职信
2014/03/13 职场文书
应聘教师求职信
2014/07/19 职场文书
2014年保卫科工作总结
2014/12/05 职场文书
团代会开幕词
2015/01/28 职场文书
2015年保送生自荐信
2015/03/24 职场文书
堂吉诃德读书笔记
2015/06/30 职场文书
被委托人身份证明
2015/08/07 职场文书
mysql脏页是什么
2021/07/26 MySQL