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方式
May 07 Redis
Redis数据结构之链表与字典的使用
May 11 Redis
redis哨兵常用命令和监控示例详解
May 27 Redis
Redis可视化客户端小结
Jun 10 Redis
SpringBoot整合Redis入门之缓存数据的方法
Nov 17 Redis
Springboot/Springcloud项目集成redis进行存取的过程解析
Dec 04 Redis
Spring Boot实战解决高并发数据入库之 Redis 缓存+MySQL 批量入库问题
Feb 12 Redis
Redis 报错 error:NOAUTH Authentication required
May 15 Redis
一文教你快速生成MySQL数据库关系图
Jun 28 Redis
Redis sentinel哨兵集群的实现步骤
Jul 15 Redis
Redis实战之Lettuce的使用技巧详解
Dec 24 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
提高PHP性能的编码技巧以及性能优化详细解析
2013/08/24 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十一)
2014/06/25 PHP
PHP file_get_contents函数读取远程数据超时的解决方法
2015/05/13 PHP
JavaScript DOM 学习第七章 表单的扩展
2010/02/19 Javascript
jquery animate图片模向滑动示例代码
2011/01/26 Javascript
JavaScript 基础篇之运算符、语句(二)
2012/04/07 Javascript
js弹出确认是否删除对话框
2014/03/27 Javascript
jquery中获得元素尺寸和坐标的方法整理
2014/05/18 Javascript
jquery获取radio值实例
2014/10/16 Javascript
使用javascript获取页面名称
2014/12/23 Javascript
省市二级联动小案例讲解
2016/07/24 Javascript
基于AngularJS实现iOS8自带的计算器
2016/09/12 Javascript
jQuery获取table表中的td标签(实例讲解)
2017/07/28 jQuery
js实现图片上传并预览功能
2018/08/06 Javascript
Nuxt页面级缓存的实现
2020/03/09 Javascript
Vue项目开发常见问题和解决方案总结
2020/09/11 Javascript
python轻松实现代码编码格式转换
2015/03/26 Python
浅谈Python中copy()方法的使用
2015/05/21 Python
python3学生名片管理v2.0版
2018/11/29 Python
对python中的os.getpid()和os.fork()函数详解
2019/08/08 Python
Django实现auth模块下的登录注册与注销功能
2019/10/10 Python
将python2.7添加进64位系统的注册表方式
2019/11/20 Python
Python如何基于smtplib发不同格式的邮件
2019/12/30 Python
Python实现在Windows平台修改文件属性
2020/03/05 Python
python里反向传播算法详解
2020/11/22 Python
Steve Madden官网:美国鞋类品牌
2017/01/29 全球购物
加拿大时尚潮流大码女装购物网站:Addition Elle
2018/04/02 全球购物
美国葡萄酒网上商店:Martha Stewart Wine Co.
2019/03/17 全球购物
俄罗斯皮肤健康中心:Pharmacosmetica.ru
2020/02/22 全球购物
个人实用的自我评价范文
2013/11/23 职场文书
新品发布会主持词
2014/04/02 职场文书
大学毕业生推荐信
2014/07/09 职场文书
2014年中职班主任工作总结
2014/12/16 职场文书
自荐信范文
2019/05/20 职场文书
CSS预处理框架——Stylus
2021/04/21 HTML / CSS
php去除数组中为0的元素的实例分析
2021/11/17 PHP