1.下载Redis
首先你肯定得有redis是吧,那么哪里去下载redis组件呢?当然可以去redis官网下载,我图方便直接从github上下载了。url是 https://github.com/dmajkic/redis/downloads 。
然后我选了最新的那个。当然这里的版本大概率不是最新的,甚至可能比较老,但是因为是尝试了解,所以不是latest也没关系啦。
2.解压、了解组件
解压完你会看到下面这些组件:
redis-server.exe即为服务器,双击打开便开启服务,如下图所示:
redis-cli.exe是客户端,双击打开,如下图所示:
默认端口号都是6379。这时候你已经可以在客户端进行数据的存取操作啦。
如上图,就能进行简单的字符串的存取了。其他数据类型也都可以试一下,redis支持的数据类型也是蛮多的。
现在你是不是想,这么简单就能把数据永久保存了吗? NO。
3.Redis的持久化
上面的存取操作,只是在内存中进行,一旦你把服务端,也就是那个redis-server.exe关掉,刚刚保存的东西都不复存在了。那么怎样把数据保存到硬盘中呢?
Redis的持久化方式有两种,分别是RDB和AOF。两者有什么区别呢?区别在于他们不同的保存方式。
一、RDB 方式持久化的开启与配置:
————Redis 默认的持久化方式是 RDB ,并且默认是打开的。RDB 的保存有方式分为主动保存与被动保存。主动保存可以在 redis-cli 中输入 save 即可;被动保存需要满足配置文件中设定的触发条件,目前官方默认的触发条件可以在 redis.conf 中看到:
save 900 1
save 300 10
save 60 10000
其含义为:
服务器在900秒之内,对数据库进行了至少1次修改
服务器在300秒之内,对数据库进行了至少10次修改。
服务器在60秒之内,对数据库进行了至少10000次修改。
满足触发条件后,数据就会被保存为快照,正是因为这样才说 RDB 的数据完整性是比不上 AOF 的。
触发保存条件后,会在指定的目录生成一个名为 dump.rdb 的文件,等到下一次启动 Redis 时,Redis 会去读取该目录下的 dump.rdb 文件,将里面的数据恢复到 Redis。
除了save还有其他的保存方式么?
save 和 bgsave 保存
Redis 提供了save和bgsave这两种不同的保存方式,并且这两个方式在执行的时候都会调用rdbSave函数,但它们调用的方式各有不同:
save 直接调用 rdbSave方法 ,阻塞 Redis 主进程,直到保存完成为止。在主进程阻塞期间,服务器不能处理客户端的任何请求。
bgsave 则 fork 出一个子进程,子进程负责调用 rdbSave ,并在保存完成之后向主进程发送信号,通知保存已完成。因为 rdbSave 在子进程被调用,所以 Redis 服务器在 bgsave 执行期间仍然可以继续处理客户端的请求。
save 是同步操作,bgsave 是异步操作。
bgsave命令的使用方法和save命令的使用方法是一样的。
shutdown保存
在持久化打开的情况下,shutdown也是可以保存数据的哦。
二、AOF方式持久化的开启与配置:
默认是不开启 AOF 的,如果想要启用则需要到 redis.conf 配置文件中开启,打开 redis.conf:
然后在文件中找到 appendonly 并将 no 改为 yes
即为开启了 AOF 方式的持久化。
设置同步方式
AOF 还有支持几种同步方式,它们分别是:
默认配置是 everysec,你可以根据需求进行调整,这里我将配置改成 always:
只要把everysec用"#“注释掉,并把always前面的”#"放开即可。
此外还需要把appendfilename的注释去掉:
Redis 设置有默认的文件名,在配置中显示为:
appendfilename “appendonly.aof”
你可以让其保持默认名字,也可以指定其他的文件名,比如:
appendfilename “RNGLetme.aof”
总结:综上,开启AOF需要将appendonly、appendfsync和appendfilename设置好并保存。然后重新启动 Redis 服务。
4.测试Redis持久化中遇到的问题
Q1:即使已经在redis.conf文件中把appendonly 从no改为了yes,把服务器重启了的情况也没有appendonly.aof文件时,必须要执行下面两条命令(在cmd中,redis的最后一层文件夹的目录中执行)
redis-cli config set appendonly yes
redis-cli config set save “”
这两个命令后才会在安装目录下出现appendonly.aof文件。
执行的第一条命令开启了 AOF 功能: Redis 会阻塞直到初始 AOF 文件创建完成为止, 之后 Redis 会继续处理命令请求, 并开始将写入命令追加到 AOF 文件末尾。
执行的第二条命令用于关闭 RDB 功能。 这一步是可选的, 如果你愿意的话, 也可以同时使用 RDB 和 AOF 这两种持久化功能。
Q2:明明有appendonly.aof文件,并且各个配置也设正确了呀,怎么还是没有见数据写进appendonly.aof文件呢,而且没有持久化操作?
此时你打开服务端你会发现你也可能有如上图一样warning。翻译一下他说的什么?是的。没有正确的读取到配置文件,你在配置文件中做的修改,自然也不会生效啦!
第一次配置到这的时候我也郁闷了好久,后来发现只要在cmd中启动服务,并且带上配置文件,像这样:
D:\redis>redis-server.exe redis.conf
就能正确读取到配置文件啦。
5.如何在Java中使用Redis
目前偶也只是入门啦,还只了解到如何简单应用。
一种是下载jar包,jedis-3.1.0.jar,另外如果要使用连接池的话,还要下载其他的jar包,不推荐这种方式。
最好使用maven,只需要在pom.xml中如下配置:
< dependency>
< groupId>redis.clients< /groupId>
< artifactId>jedis< /artifactId>
< version>3.1.0< /version>
< /dependency>
有了相关jar包以后,只需要import redis.clients.jedis.Jedis;即可。
然后就能像下面一样new到相关的对象,进行相应的操作啦!