美文网首页java学习
java中使用redis

java中使用redis

作者: 咖啡杯里的茶2 | 来源:发表于2019-11-03 12:49 被阅读0次

    redies的下载与安装

    下载完成后直接解压即可。


    在这里插入图片描述
    • redis.windows.conf: redis配置文件
    • redis-cli.exeredis客户端
    • redis-server.exe: redis服务端

    使用

    先双击上面的服务端程序,开启服务端,然后再双击 客户端程序,就可以在客户端中使用了。

    redis持久化

    • reids是一个内存数据库(数据会丢失)
    • 持久化就是将redis中的数据保存在硬盘中,下次重启还可以继续获取数据。

    两种持久化方式

    • RDB

      默认的机制,在一定的时间间隔中检测key的变化,然后持久化数据。(推荐)

    在这里插入图片描述
    上面截图是默认持久化配置
    
    * 第一条是900秒后至少有一个key改变了就会持久化
    * 第二条是300秒后至少有10个key改变了就会持久化
    * 第三条是60秒后至少有10000个key发生变化就会持久化
    
    如果想要测试这种方式,需要以命名行的方式启动服务器。比如我将配置文件修改如下:
    
    在这里插入图片描述
    这里修改了最后一条,表示10秒钟内如果有4个key发生变化,就会持久化。然后以命令行方式启动服务器,进行测试:
    
    在这里插入图片描述
    可以看到当修改了四个`key`之后(同一个`key`修改了值也可以)会在`redis`文件夹中产生一个后缀为`rdp`的文件,该文件就是持久化的文件。然后重启服务器与客户端,在客户端中使用命名`get name`(这里`name`表示是之前存储的`key`)获取的值是4,表示数据已经被持久化了。
    
    • AOF

      日志记录的方式,可以记录每一条命名的操作可以每一次命令操作后来持久化数据。(性能消耗较大)

      AOF形式的持久化默认是关闭的,所以需要编辑文件redis.windows.conf,找到appendonly nono修改为yes进行开启。

    在这里插入图片描述
    开启之后需要配置`appendfsync`的值(就在`appendonly`配置的下面)
    
    * `appendfsync always`      表示每一次操作都要进行持久化
    * `appendfsync everysec`   表示每隔一秒种就要持久化一次
    * `appendfsync no`              表示不进行持久化
    
    使用这种配置,当开启服务器时就会出现后缀名为`aof`的一个文件
    

    java连接reids

    jedis

    jedisjava操作redis数据库的工具。

    使用步骤

    需要jar包

    • commons-pool (commons-pool2-2.3.jar)
    • jedis (jedis-2.7.0.jar)

    测试类

    package jedis;
    import org.junit.Test;
    import redis.clients.jedis.Jedis;
    public class TestJedis {
        @Test
        public void test1() {
            // 获取连接(如果是使用空餐构造方法,则默认就是localhost与6379)
            Jedis jedis = new Jedis("127.0.0.1", 6379);
            jedis.set("name", "zhangsan11");
            jedis.setex("name2", 20, "zhangsan11"); // 与上面的方法的区别是该键值对保存时间是20秒,超过20秒就自动销毁
            String name = jedis.get("name");
            System.out.println(name);
            // 关闭连接
            jedis.close();
        }
    }
    

    可以看到输出结果是zhangsan11,说明我们条命令执行成功。

    注意:使用junit注解需要导入两个包。

    • junit-4.12.jar http://central.maven.org/maven2/junit/junit/4.12/junit-4.12.jar
    • hamcrest-core.jar http://central.maven.org/maven2/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar

    jedis连接池

    基本使用

    连接池也就是使用到了JedisPool对象而已。

    @Test
        public void test3() {
            // 创建连接池对象(没有给ip和端口,则默认是localhost和6379)
            JedisPool jedisPool = new JedisPool();
            // 获取连接
            Jedis jedis = jedisPool.getResource();
            // 操作
            jedis.set("name", "审查");
            String name = jedis.get("name");
            System.out.println(name);
            // 关闭连接(这里的关闭不是真正的关闭,而是将连接归还给连接池)
            jedis.close();
        }
    

    使用配置对象的形式

    在使用连接池的方式,获取连接池对象时可以传入配置对象作为参数。

    @Test
        public void test3() {
            JedisPoolConfig config = new JedisPoolConfig();
          // 这里有很多的配置参数可以设置,这里只是举了两个例子
            config.setMaxTotal(50);
            config.setMaxIdle(10);
            // 创建连接池对象(没有给ip和端口,则默认是localhost和6379)
            JedisPool jedisPool = new JedisPool(config, "localhost", 6379);
            // 获取连接
            Jedis jedis = jedisPool.getResource();
            // 操作
            jedis.set("name", "审查");
            String name = jedis.get("name");
            System.out.println(name);
            // 关闭连接(这里的关闭不是真正的关闭,而是将连接归还给连接池)
            jedis.close();
        }
    

    工具类

    可以将参数放置在一个配置文件中,这样以后代码的耦合度就变低了。

    package util;
    
    import redis.clients.jedis.Jedis;
    import redis.clients.jedis.JedisPool;
    import redis.clients.jedis.JedisPoolConfig;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.Properties;
    
    /**
     * 加载配置文件,配置连接池参数
     */
    public class JedisUtils {
    
        private static JedisPool jedisPool;
    
        static {
            // 读取配置文件
            InputStream is = JedisUtils.class.getClassLoader().getResourceAsStream("jedis.properties");
            Properties properties = new Properties();
            try {
                properties.load(is);
            } catch (IOException e) {
                e.printStackTrace();
            }
            // 获取数据,配置到JedisPoolConfig对象中
            JedisPoolConfig config = new JedisPoolConfig();
            config.setMaxTotal(Integer.parseInt(properties.getProperty("maxTotal")));
            config.setMaxIdle(Integer.parseInt(properties.getProperty("maxIdle")));
            // 初始化Config
            jedisPool = new JedisPool(config, properties.getProperty("host"), Integer.parseInt(properties.getProperty("port")));
        }
    
        /**
         * 获取连接方法
         *
         * @return
         */
        public static Jedis getJedis() {
            return jedisPool.getResource();
        }
    }
    

    jedis.properties配置文件

    host=127.0.0.1
    port=6379
    maxTotal=50
    maxIdle=10
    

    使用

    @Test
        public void test4() {
            Jedis jedis = JedisUtils.getJedis();
            // 操作
            jedis.set("name", "审查");
            String name = jedis.get("name");
            System.out.println(name);
            // 关闭连接(这里的关闭不是真正的关闭,而是将连接归还给连接池)
            jedis.close();
        }
    

    注意事项

    上面的工具类中有一句代码是:

    InputStream is = JedisUtils.class.getClassLoader().getResourceAsStream("jedis.properties");

    这里获取的结果可能为空,这个就和idea中加载配置文件的规则有关。如果我这里这里是建立的一个web项目而不是一个模块,那么可以直接将配置文件放在src目录下,这样是可以在out目录中找到该配置配置文件的,但是如果我们建立的不是一个项目,而是一个模块。直接放在该模块的src目录下时编译文件中是没有该文件的,此时就需要自己创建一个目录并且设置为resource就可以。

    项目图

    在这里插入图片描述

    模块图

    在这里插入图片描述

    设置为resource

    在这里插入图片描述

    项目,而是一个模块。直接放在该模块的src目录下时编译文件中是没有该文件的,此时就需要自己创建一个目录并且设置为resource就可以。

    项目图

    在这里插入图片描述

    模块图

    在这里插入图片描述

    设置为resource

    在这里插入图片描述

    相关文章

      网友评论

        本文标题:java中使用redis

        本文链接:https://www.haomeiwen.com/subject/hvikbctx.html