java中使用redis

redies的下载与安装

  • 官网,官网较慢
  • redis中文网这是对官网翻译的网站,比较快。
  • redis的windows版,官网和中文网只能下linux版,在github上面可以下载windows

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


在这里插入图片描述
  • 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)