redies的下载与安装
- 官网,官网较慢
- redis中文网这是对官网翻译的网站,比较快。
-
redis的windows版,官网和中文网只能下
linux
版,在github
上面可以下载windows
版
下载完成后直接解压即可。
-
redis.windows.conf
:redis
配置文件 -
redis-cli.exe
:redis
客户端 -
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 no
将no
修改为yes
进行开启。
开启之后需要配置`appendfsync`的值(就在`appendonly`配置的下面)
* `appendfsync always` 表示每一次操作都要进行持久化
* `appendfsync everysec` 表示每隔一秒种就要持久化一次
* `appendfsync no` 表示不进行持久化
使用这种配置,当开启服务器时就会出现后缀名为`aof`的一个文件
java连接reids
jedis
jedis
是java
操作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