欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

SpringBoot 集成Redis 过程

程序员文章站 2022-06-23 09:01:42
redis 介绍: redis 服务redis (remote dictionary server) 是一个由salvatore sanfilippo 完成的key-value存储系统,是跨平台的非关...

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实战的资料请关注其它相关文章!

相关标签: Springboot Redis