Java开发框架基础-Redis

本文介绍了Redis的基础知识,包括其作为NoSQL数据库的特点和在Windows上的安装配置。此外,详细阐述了在Java应用中使用Jedis客户端进行Redis访问的方法,强调了JedisPool在多线程环境中的重要性,并提供了相关配置参数的解释。
摘要由CSDN通过智能技术生成

Redis

简介
目前的互联网应用广泛使用两种方式来进行数据存储,关系型数据库和NoSQL数据库。

  1. 关系型数据库是指采用关系模型来组织数据的数据库,主要用于存储格式化的数据结构,大量传统数据库如MySQL,Oracle,SQLServer等都属于关系型数据库。
  2. NoSQL数据库泛指非关系型数据库,主要服务于特定背景的专用数据库,对外提供的是特定的API,而非通用的SQL接口,数据访问更加高效。

Redis是一个开源的key-value数据库,属于NoSQL数据库,按照键值对的结构对数据进行存储,为了保证数据访问效率,数据都是缓存在内存中的,并基于内存操作,故性能较高。作为缓存应用,相比于其他类似的Memcached,Ehcache,OSCache等缓存器,它所支持v存储的value类型更多,包括string,list,set,zset和hash,Redis使业务能够高速和原子地访问这些数据结构,并且不需要关心持久存储的问题,从架构上解决了关系型数据库存储需要走一些弯路的问题。

针对不同的操作系统,Redis有Linux版和Windows版,

Windows版Redis的安装与配置

windows版的Redis可以从GitHub上获取 ,其发行版的下载地址为https://github.com/microsoftarchive/redis/releases可以选择msi格式的安装版或zip格式的压缩版。

|-----安装版安装
直接运行即可

|-----解压版安装:
第1步: 解压安装包到合适位置
第2步: 进入到Redis的安装目录下执行
redis-server --service-install redis.windows.conf --loglevel verbose
以上命令将redis-server.exe注册为Windows服务,并指定redis.windows.conf为其配置文件,可在该文件中调整Redis服务的参数。
执行redis-cli命令可以启动redis客户端。

|----卸载:
解压版:
sc delete Redis #卸载服务
删除安装目录
安装版:
正常卸载

操作Redis常用命令
添加数据:
set 键名 值
查询数据:
get 键名
修改数据:
set 旧键名 新值
rename 旧键名 新键名
删除数据:
del 键名

是否存在指定键: exists 键名1 键名2 …
模糊查询指定键; keys 正则表达式

有效时间:
expire 键名 秒数 # 设置键的有效时间
ttl 键名 #查询键的剩余有效时间
persist 键名 # 删除有效时间设置

选择数据库: select 数据库索引 # 默认16个仓库,索引为0-15
删除数据库数据: flushdb[当前] 或 flushall[所有]

在Java应用中访问Redis

若要在应用中访问Redis,就需要在应用中实现Redis客户端的功能。Jedis就是一个小巧强大的面向java语言的Redis客户端。

获取所需的组件
可以在https://search.maven.org网站上搜索Jedis的不同版本进行下载,此外还需要下载Apache Commons Pool 2 组件。使用Jedis所需的所有jar文件如下:
在这里插入图片描述
在这里插入图片描述
Jedis的使用思路
在Jedis中,封装Redis访问API的核心类是Jedis类,可以通过调用该类实例的方法实现对Redis的操作,在多线程环境下,不应该仅使用同一个Jedis实例,因为单个Jedis实例不是安全的。在多线程的环境下,应该使用JedisPool,它是一个线程安全的网络连接池,可以使用JedisPool可靠地创建多个Jedis实例,并在使用完毕后将Jedis实例归还到池中,这样可以减少错误并获得出色的性能。创建JedisPool所需要设置的参数可以通过JedisPoolConfig类进行封装。

使用Jedis操作Redis的代理实现如下

1.构建JedisPoolConfig及JedisPool:


public class JedisAPI {
    private static JedisPool jedisPool;

    static {
        //创建并设置连接池配置对象
        JedisPoolConfig config = new JedisPoolConfig();
        config.setMaxTotal(50);//连接池最大活动连接数
        config.setMaxIdle(10);//连接池中的最大空闲连接数
        config.setMinIdle(7);//连接池中的最小空闲连接数
        config.setMaxWaitMillis(1000);//获取资源的等待时间
        config.setTestOnBorrow(true);//获取资源时是否验证资源的有效性

        //创建Jedis连接池
        jedisPool = new JedisPool(
                config,//连接池配置对象
                "192.168.2.1",//Redis服务器地址
                6379,//Redis服务端口
                10000,//连接超时时间,单位为毫秒,默认为200ms
                "",
                0//数据库索引
        );
    }//static块结束
    public void destroy(){
        if (!(jedisPool==null || jedisPool.isClosed())){
            jedisPool.close();//关闭数据库连接池
        }
   }
   
}

JedisPool是基于Apache Commons Pool 2 实现的,其配置参数完全可以参考Commons Pool 2 进行设置。

  • maxTotal:最大活动连接数,默认为8,若设置为-1,则表示不限制。
  • maxIdle:最大空闲连接数,默认为8。
  • minIdle:最小空闲连接数,默认为0。
  • maxWaitMillis:表示从池中获取一个资源时的最大等待时间,单位是毫秒,-1表示永不超时,如果超出等待时间,将抛出NoSuchElementException,进而引发JedisConnectionExcepion。
  • testOnBorrow:表示从池中获取一个资源时是否提前进行验证操作。若该参数设置为true,则等到的资源均是可用的。

获取Jedis类的实例操作Redis
Jedis类的部分方法如下所示:
在这里插入图片描述
在这里插入图片描述

在上面实例的基础上增加操作Redis所需的方法:

public class JedisAPI {
    private static JedisPool jedisPool;

    static {
        //创建并设置连接池配置对象
        JedisPoolConfig config = new JedisPoolConfig();
        config.setMaxTotal(50);//连接池最大活动连接数
        config.setMaxIdle(10);//连接池中的最大空闲连接数
        config.setMinIdle(7);//连接池中的最小空闲连接数
        config.setMaxWaitMillis(1000);//获取资源的等待时间
        config.setTestOnBorrow(true);//获取资源时是否验证资源的有效性

        //创建Jedis连接池
        jedisPool = new JedisPool(
                config,//连接池配置对象
                "192.168.2.1",//Redis服务器地址
                6379,//Redis服务端口
                10000,//连接超时时间,单位为毫秒,默认为200ms
                "",
                0//数据库索引
        );
    }//static块结束
    public void destroy(){
        if (!(jedisPool==null || jedisPool.isClosed())){
            jedisPool.close();//关闭数据库连接池
        }
    }
    //增加操作Redis所需的方法
    public boolean set(String key,String value){
        Jedis jedis = null;
       try {
           jedis = jedisPool.getResource();//从池中获取Jedis实例
           jedis.set(key,value);
           return true;
       }catch (Exception e){
           e.printStackTrace();
           return false;
       }finally {
           //返还到连接池
           if(jedis!=null){
               jedis.close();
           }
       }
    }

    /**
     * 获取数据
     * @param key
     * @return
     */
    public String get(String key){
        String value = null;
        Jedis jedis=null;
        try {
            jedis = jedisPool.getResource(); //从池中获取Jedis实例
            value = jedis.get(key);
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            //返还到连接池
            if(jedis!=null){
                jedis.close();
            }
        }
        return value;
    }
}

最后进行测试

public class Test {
    public static void main(String[] args) {
        JedisAPI jedisAPI = new JedisAPI();
        System.out.println(jedisAPI.get("a1"));
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值