SpringBoot集成Redis

SpringBoot集成RedisRedis简介数据类型关键优势Redis基本使用Windows安装配置启动连接可视化工具Jedis操作Redis常用方法API基本操作连接池SpringBoot操作RedisSpring-boot-starter-data-redis基本操作Redis简介官网redis.io有一段定义:作为数据库,Redis是一个速度非常快的非关系数据库(Non-Relational Database),它可以存储键(Key)与5种不同类型的值(Value)之间的映射(Mappin
摘要由CSDN通过智能技术生成

Redis简介

官网redis.io有一段定义:
Redis官方定义
作为数据库,Redis是一个速度非常快的非关系数据库(Non-Relational Database),它可以存储键(Key)与5种不同类型的值(Value)之间的映射(Mapping),可以将存储在内存的键值对数据持久化到硬盘,可以使用复制特性来扩展读性能,还可以使用客户端分片来扩展写能性。
作为缓存中间键,Redis支持更多的数据结构和更丰富的数据操作,另外Redis有着丰富的集群方案和使用场景。

数据类型

Redis数据类型不仅与关系数据库管理系统(RDBMS)不同,也不同于任何简单的NoSQL键-值数据存储。受支持的数据类型包括:

  • String(字符串)
  • Hash(哈希)
  • List(列表)
  • Set(集合)
  • Zset(Sorted Set:有序集合)

关键优势

Redis的优势包括它的速度、对富数据类型的支持、操作的原子性,以及通用性:

  • 性能极高,它每秒可执行100000个Set以及约100000个Get操作
  • 丰富的数据类型,Redis对大多数开发人员啊已知的大多数数据类型提供了原生的支持,这使得各种问题得以轻松解决。
  • 原子性因为所有Redis操作都是原子性的,所以多个客户端会并发地访问一个Redis服务器,获取相同的更新值
  • 丰富的特性,Redis是一个多效用工具,有非常多的应用场景,包括缓存、消息队列(Redis 原生支持发布/订阅)、短期应用程序数据

Redis基本使用

Windows安装

下载地址:https://github.com/MSOpenTech/redis/releases点这里!
Redis支持32位和64位。这个需要根据你系统平台的实际情况选择,这里我们下载Redis-x64-3.2.100.zip压缩包,解压到D:\Program Files后,将文件夹重新命名为redis即可。

配置

安装后,在不配置Redis的情况下,Redis也可以直接启动,因为有一个默认配置文件。在官方发布的版本一般叫做redis.conf,这个文件中包含了Redis各方面的配置,注意大部分配置行都是英文且以#开头,表示注解,只有不以#开头的行才是生效的配置项,这里只简单介绍下几个配置项:
bind 127.0.0.1 :绑定的主机
port 6379 :端口号
requirepass foobared :请求密码,默认是注释的

启动

打开一个cmd窗口
使用cd命令切换目录到:D:\Program Files \redis 运行 redis.windows.conf
想方便的话,可以把redis路径加到系统环境变量path里,这样就省的再输路径了。
输入之后,显示如下界面,表示服务器启动成功(注意,启动之后cmd窗口不能关闭)
效果图

连接

再打开一个cmd
使用cd命令切换目录到 D:\Program Files \redis 运行:
无密码:redis-cli.exe -h 127.0.0.1 -p 6379
有密码:redis-cli.exe -h 127.0.0.1 -p 6379 foobared
输入之后,显示如下界面,表示连接成功:
连接成功效果图

可视化工具

在开发期间要查看Redis服务器中存储的数据,可以命令启动redis-clli,为了提高开发效率,可以再安装一个很好用的GUI工具:Redis Desktop Manager
下载地址:https://redisdesktop.com/ 点这里!!
在Redis服务器启动的情况下,打开Redis Desktop Manager,点击如下按钮添加一个服务器端的配置信息,进行连接。
连接步骤
第二步
然后双击这个服务器端的配置,连接成功就可以看到Redis服务器目前缓存的Key-Value集合了。
连接成功效果图

Jedis操作Redis

Jedis是Redis官方推荐的Java连接开发工具。
Jedis的基本使用非常简单,只需要创建Jedis对象的时候指定host,port,password即可。

常用方法API

在Jedis库中,Jedis类就代表了与Redis服务器的连接,因此对服务器的操作都是通过它来进行,Redis的各种操作命令在Jedis类中也直接体现为同名的方法。
Jedis对象常用方法API,包括对键操作、字符串操作、整数和浮点数操作、列表操作、集合操作、哈希操作、有序集合操作、排序操作等几大类,可执行查阅:https://blog.csdn.net/asd051377305/article/details/90234620 点这里!!!
Jedis常用方法API

基本操作

可在之前原有的JPA项目基础上操作Jedis操作
1.添加jedis依赖

 <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>2.9.0</version>
        </dependency>

2.编写junit单元测试JedisTester:

@RunWith(SpringRunner.class)
@SpringBootTest
public class JedisTester {
    private Jedis jedis;
    @Before
    public void setup(){
        jedis=new Jedis("127.0.0.1",6379);
    }
}

操作字符串:

 @Test
    public void testString(){
        jedis.set("name","crm");
        System.out.println(jedis.get("name"));

        jedis.append("name","lll");
        System.out.println(jedis.get("name"));

        jedis.del("name");
        System.out.println(jedis.get("name"));

        jedis.mset("name","hyq","age","18","add","hn");
        jedis.incr("age");
        System.out.println(jedis.get("name")+"-"+jedis.get("age")+"-"+jedis.get("add"));
    }

连接池

在我们实际的使用过程中,不会每次使用时都创建Jedis对象,一般会使用连接池,并提供一个工具类来对外使用。
使用连接池的好处:1、效率更高;2、线程安全
连接池:

public final class RedisPool {
    private static String ADDR="192.168.0.100";

    private static int PORT=6379;

    //private static String AUTH="123456";

    private static int MAX_ACTIVE=1024;

    private static int MAX_IDLE=200;

    private static int MAX_WAIT=10000;

    private static int TIEMOUT=10000;
    private boolean TEST_ON_BORROW=true;
    private static JedisPool jedisPool=null;

    /**
     * 初始化Redis连接池
     */
    static {
        try{
            JedisPoolConfig config=new JedisPoolConfig();
            config.setMaxTotal(MAX_ACTIVE);
            config.setMaxIdle(MAX_IDLE);
            config.setMaxWaitMillis(MAX_WAIT);
            config.setTestOnBorrow(BaseObjectPoolConfig.DEFAULT_TEST_ON_BORROW);
            jedisPool=new JedisPool(config,ADDR,PORT,TIEMOUT);
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    /**
     * 获取Jedis实例
     *
     * @Return
     */

    public synchronized static Jedis getJedis(){
        try{
            if(jedisPool!=null){
                Jedis resource=jedisPool.getResource();
                return resource;
            }else{
                return null;
            }
        }catch (Exception e){
            e.printStackTrace();
            return null;
        }
    }

    /**
     * 释放Jedis资源
     *
     * @param jedis
     */
     public static void returnResource(final Jedis jedis){
         if(jedis!=null){
             jedisPool.returnResource(jedis);
         }
     }

}

工具类:

public class RedisUtil {
    /**
     * 设置key的有效期,单位是秒
     * @param key
     * @param exTime
     * @return
     */
    public static Long expire(String key,int exTime){
        Jedis jedis=null;
        Long result=null;

        try{
            jedis= RedisPool.getJedis();
            result=jedis.expire(key,exTime);
        }catch (Exception e){
            e.printStackTrace();
            return result;
        }finally {
            RedisPool.returnResource(jedis);
        }
        return result;
    }

    public static String setEx(String key,String value,int exTime){
        Jedis jedis=null;
        String result=null;
        try {
            jedis=RedisPool.getJedis();
            result=jedis.setex(key,exTime,value);
        }catch (Exception e){
            e.printStackTrace();
            return result;
        }finally {
            RedisPool.returnResource(jedis);
        }
        return result;
    }

    public static String set(String key,String value){
        Jedis jedis=null;
        String result=null;
        try {
            jedis=RedisPool.getJedis();
            result=jedis.set(key,value);
        }catch (Exception e){
            e.printStackTrace();
            return result;
        }finally {
            RedisPool.returnResource(jedis);
        }
        return result;
    }

    public static String get(String key){
        Jedis jedis=null;
        String result=null;
        try {
            jedis=RedisPool.getJedis();
            result=jedis.get(key);
        }catch (Exception e){
            e.printStackTrace();
            return result;
        }finally {
            RedisPool.returnResource(jedis);
        }
        return result;
    }

    public static Long del(String key){
        Jedis jedis=null;
        Long result=null;
        try {
            jedis=RedisPool.getJedis();
            result=jedis.del(key);
        }catch (Exception e){
            e.printStackTrace();
            return result;
        }finally {
            RedisPool.returnResource(jedis);
        }
        return result;
    }
}

SpringBoot操作Redis

Spring-boot-starter-data-redis

SpringBoot提供了对Redis集成的组件包:spring-boot-starter-data-redis,它依赖于spring-data-redis和lettuce。

  • Lettuce:是一个可伸缩线程安全的Redis客户端,多个线程可以共享同一个RedisConnection,它利于优秀Netty NIO框架来高效的管理多个连接。
  • Spring Data:是Sprin框架中的一个主要项目,目的是为了简化构建基于Spring框架应用的数据访问,包括非关系数据库、Map-Reduce框架、云数据服务等,另外也包含对关系数据库的访问支持。
  • Spring Data Redis :是Spring Data项目中的一个主要模块,实现了对Redis客户端API的高度封装,使对Redis的操作更加便捷。

基本操作

1.添加依赖

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

2.application.properties配置相关信息

#redis数据索引
spring.redis.database=0
#redis服务地址
spring.redis.host=localhost
#redis服务器连接端口
spring.redis.port=6379
#连接密码
#spring.redis.password=root
#最大连接数
spring.redis.lettuce.pool.max-active=8
#最大阻塞等待时间
spring.redis.lettuce.pool.max-wait=-1
#最大空闲连接
spring.redis.lettuce.pool.max-idle=8
#最小空闲连接
spring.redis.lettuce.pool.min-idle=0

3.测试使用

@RunWith(SpringRunner.class)
@SpringBootTest
public class RedisTemplateTester {
    @Resource
    private StringRedisTemplate stringRedisTemplate;
    @Resource
    private RedisTemplate redisTemplate;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值