SpringBoot 集成Redis 过程


Posted in Redis onJune 02, 2021

Redis 介绍: Redis 服务

Redis (REmote Dictionary Server) 是一个由Salvatore Sanfilippo 完成的key-value存储系统,是跨平台的非关系型数据库。

Redis 是一个开源的使用ANSI C语言编写、遵循BSD 协议的、支持网络、可基于内存、分布式、可选择持久性的键值对存储数据库,并提供多语言的API。

Redis 通常被认为是数据结构服务器,其值可以是字符串、哈希、列表、集合以及有序集合。

Redis 优点

异常快,每秒可以执行大约110000次写(set)操作

每秒可执行大约81000次读(get)操作

支持丰富的数据结构

操作具有原子性, 所有Redis 操作都是原子操作,这确保了两个客户端并发访问,Redis 服务器能接收更新的值。

多使用工具,缓存,消息队列(Redis 本地支持发布/订阅),应用程序中的任何短期数据。

Redis 安装

下载地址:

https://github.com/MSOpenTech/redis/releases

Redis 支持32位和64 位,下载完成后,解压后,文件夹下面包含许多子文件,打开cmd 窗口,将其切换到redis 目录下,输入命名:

D:\sdk\Redis-x64-5.0.9  redis-server.exe  redis.windows.conf

Redis是什么

Redis是现在最受欢迎的NoSQL数据库之一,Redis是一个使用ANSI C编写的开源、包含多种数据结构、支持网络、基于内存、可选持久性的键值对存储数据库,其具备如下特性:

  • 基于内存运行,性能高效
  • 支持分布式,理论上可以无限扩展
  • key-value存储系统
  • 开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API

相比于其他数据库类型,Redis具备的特点是:

  • C/S通讯模型
  • 单进程单线程模型
  • 丰富的数据类型
  • 操作具有原子性
  • 持久化
  • 高并发读写
  • 支持lua脚本

如果想使用redis 启动更加容易的话,可以使用 将redis 安装路径加入到环境变量中,直接点击 redis-server.exe 即可启动redis 服务。

SpringBoot 集成Redis 过程

1. 在pom.xml 中配置相关依赖 jar

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

2.在SpringBoot 中配置核心文件

在application.properties 文件下添加配置redis 信息

# 配置redis
spring.redis.host:localhost
spring.redis.password=
spring.redis.port=6379

3. Redis 配置类及其使用

Redis 配置类

// RedisConfig redisconfig 配置
@Configuration
public class RedisConfig {
    /**
     * key redis serializer: {@link StringRedisSerializer} and
     * key redis serializer: {@link Jackson2JsonRedisSerializer}
     **/
    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
        // 创建对象
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        Jackson2JsonRedisSerializer valueRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
        //设置Redis的value为json格式,并存储对象信息的序列化类型
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        valueRedisSerializer.setObjectMapper(objectMapper);
​
        // 创建一个keyRedisSerializer
        RedisSerializer keyRedisSerializer = new StringRedisSerializer();
        // 设置信息
        template.setKeySerializer(keyRedisSerializer);
        template.setValueSerializer(valueRedisSerializer);
        template.setHashKeySerializer(keyRedisSerializer);
        template.setHashValueSerializer(valueRedisSerializer);
        template.setConnectionFactory(factory);
        template.afterPropertiesSet();
        return template;
    }
​
    // redisUtils()  方法
    @Bean
    public RedisUtils redisUtils(@Autowired RedisTemplate redisTemplate) {
        return new RedisUtils(redisTemplate);
    }
}

Redis 工具类, 首先redis 的增删改查等操作,针对多种数据类型的数据

/**
 * redis工具类
 *
 * @author Jone
 */
// RedisUtils
@Slf4j
public class RedisUtils {
​
    // 初始化变量
    private static Logger logger = LoggerFactory.getLogger(RedisUtils.class);
​
​
    private static RedisTemplate redisTemplate;
​
    public RedisUtils(RedisTemplate redisTemplate) {
        this.redisTemplate = redisTemplate;
    }
​
    // =============================common============================
​
​
    /**
     * 判断key是否存在
     *
     * @param key 键
     * @return true 存在 false不存在
     */
    public Boolean hasKey(String key) {
        try {
            return redisTemplate.hasKey(key);
        } catch (Exception e) {
            logger.error("判断key是否存在异常: {}", e);
            return false;
        }
    }
​
    /**
     * 普通缓存获取
     *
     * @param key 键
     * @return 值
     */
    public Object get(String key) {
        return key == null ? null : redisTemplate.opsForValue().get(key);
    }
​
    /**
     * 删除
     * @param key
     * @return
     */
    public boolean del(String ... key){
        if(key!=null&&key.length>0){
​
                redisTemplate.delete(key[0]);
                return true;
            }else{
                redisTemplate.delete(CollectionUtils.arrayToList(key));
                return true;
            }
        }
        return false;
    }
​
    // SET JIHE
    public Set getKeys(){
       return redisTemplate.keys("*");
    }
​
    /**
     * 普通缓存放入
     *
     * @param key   键
     * @param value 值
     * @return true成功 false失败
     */
    public Boolean set(String key, Object value) {
        try {
            redisTemplate.opsForValue().set(key, value);
            return true;
        } catch (Exception e) {
            logger.error("set异常: {}", e);
            return false;
        }
    }
}

配置完备之后,自动配置RedisTemplate ,需要操作redis 的类中注入redisTeplate,如下所示:

// 使用RedisTemplate                                                                                
@Autowired
private RedisTemplate<String, String> redisTemplate;
​
@Autowired 
private RedisTemplate<Object, Object> redisTemplate;

以上就是SpringBoot 集成Redis 过程的详细内容,更多关于Springboot Redis实战的资料请关注三水点靠木其它相关文章!

Redis 相关文章推荐
Redis遍历所有key的两个命令(KEYS 和 SCAN)
Apr 12 Redis
Redis IP地址的绑定的实现
May 08 Redis
浅谈Redis存储数据类型及存取值方法
May 08 Redis
为Java项目添加Redis缓存的方法
May 18 Redis
Redis如何实现分布式锁
Aug 23 Redis
Redis字典实现、Hash键冲突及渐进式rehash详解
Sep 04 Redis
SpringBoot整合Redis入门之缓存数据的方法
Nov 17 Redis
浅谈Redis跟MySQL的双写问题解决方案
Feb 24 Redis
分布式架构Redis中有哪些数据结构及底层实现原理
Mar 13 Redis
Redis如何使用乐观锁(CAS)保证数据一致性
Mar 25 Redis
Redis数据同步之redis shake的实现方法
Apr 21 Redis
浅谈Redis缓冲区机制
Jun 05 Redis
详解Redis基本命令与使用场景
Django使用redis配置缓存的方法
Jun 01 #Redis
详解Redis集群搭建的三种方式
May 31 #Redis
浅谈Redis主从复制以及主从复制原理
5分钟教你docker安装启动redis全教程(全新方式)
May 29 #Redis
详解缓存穿透击穿雪崩解决方案
浅谈Redis的几个过期策略
May 27 #Redis
You might like
hadoop常见错误以及处理方法详解
2013/06/19 PHP
php获取bing每日壁纸示例分享
2014/02/25 PHP
ThinkPHP3.1新特性之查询条件预处理简介
2014/06/19 PHP
基于yaf框架和uploadify插件,做的一个导入excel文件,查看并保存数据的功能
2017/01/24 PHP
PHP耦合设计模式实例分析
2018/08/08 PHP
laravel实现一个上传图片的接口,并建立软链接,访问图片的方法
2019/10/12 PHP
tp5修改(实现即点即改)
2019/10/18 PHP
js字符串的各种格式的转换 ToString,Format
2011/08/08 Javascript
JQuery扩展插件Validate—6 radio、checkbox、select的验证
2011/09/05 Javascript
Javascript中的for in循环和hasOwnProperty结合使用
2013/06/05 Javascript
jQuery获得页面元素的绝对/相对位置即绝对X,Y坐标
2014/03/06 Javascript
你未必知道的JavaScript和CSS交互的5种方法
2014/04/02 Javascript
jquery实现的导航固定效果
2014/04/28 Javascript
JQuery 在线引用及测试引用是否成功
2014/06/24 Javascript
jQuery中bind()方法用法实例
2015/01/19 Javascript
详解JavaScript数组和字符串中去除重复值的方法
2016/03/07 Javascript
折叠菜单及选择器的运用
2017/02/03 Javascript
微信小程序request出现400的问题解决办法
2017/05/23 Javascript
jQuery响应滚动条事件功能示例
2017/10/14 jQuery
使用JS获取SessionStorage的值
2018/01/12 Javascript
vue+element实现动态加载表单
2020/12/13 Vue.js
[06:04]DOTA2国际邀请赛纪录片:Just For LGD
2013/08/11 DOTA
[02:32]DOTA2亚洲邀请赛 C9战队出场宣传片
2015/02/07 DOTA
[02:03]风行者至宝清风环佩外观展示
2020/09/05 DOTA
Python使用cookielib模块操作cookie的实例教程
2016/07/12 Python
Python selenium 三种等待方式详解(必会)
2016/09/15 Python
Python爬取成语接龙类网站
2018/10/19 Python
10 分钟快速入门 Python3的教程
2019/01/29 Python
django ajax发送post请求的两种方法
2020/01/05 Python
Python 私有属性和私有方法应用场景分析
2020/06/19 Python
莫斯科绝对前卫最秘密的商店:SVMoscow
2017/10/23 全球购物
无工作经验者个人求职信范文
2013/12/22 职场文书
公务员年度考核登记表个人总结
2015/02/12 职场文书
2015年大学生社会实践评语
2015/03/26 职场文书
简单的辞职信模板
2015/05/12 职场文书
Pandas加速代码之避免使用for循环
2021/05/30 Python