一. redis设置auth
1.1 映射并修改redis的配置文件
(1)在docker_redis下创建conf/redis.conf文件
version: '3.1' services: redis: image: daocloud.io/library/redis:5.0.7 container_name: redis restart: always environment: - TZ=Asia/Shanghai ports: - 6379:6379 volumes: - ./conf/redis.conf:/usr/local/etc/redis/redis.conf command: ["redis-server","/usr/local/etc/redis/redis.conf"]
宿主机上的./conf/redis.conf映射到文件内部的conf文件, 这个文件位置在daoCloud的安装文件说明里有.
最后一行的意思是启动时候启动"redis-server"并加载"/usr/local/etc/redis/redis.conf"这个文件, 就相当于修改宿主机下的文件就修改了这个文件
1.2 redis的auth
(1)vi./conf/redis.conf下的文件:
requirepass A9353...
在lunix下用auth A9353...输入密码
在java连接时, 用有参构造, 或者每次jedis来操作都用 jedis.auth("A9353...")来输入密码
public JedisPool(GenericObjectPoolConfig poolConfig, String host, int port, int timeout, String password) { this(poolConfig, host, port, timeout, password, 0, (String)null); }
二. redis持久化机制
2.1原因: 由于 Redis 是一个内存数据库,所谓内存数据库,就是将数据库中的内容保存在内存中,这与传统的MySQL,Oracle等关系型数据库
直接将内容保存到硬盘中相比,内存数据库的读写效率比传统数据库要快的多(内存的读写效率远远大于硬盘的读写效率)。
但是保存在内存中也随之带来了一个缺点,一旦断电或者宕机,那么内存数据库中的数据将会全部丢失。
为了解决这个缺点,Redis提供了将内存数据持久化到硬盘,以及用持久化文件来恢复数据库数据的功能。Redis 支持两种形式的持久化,
一种是RDB快照(snapshotting),另外一种是AOF(append-only-file)。本篇博客先对 RDB 快照进行介绍。
#RDB 代表持久化的时机 900秒内有一个key变了就执行持久化, 300秒内有10个key改变了也执行持久化, 60秒内有一万个key变了也持久化 save 900 1 save 300 10 save 60 10000
rdbcompression yes
dbfilename dump.rdb
2.2 特点: 以上配置, 有可能60秒持久化一次, 也有可能300或者900秒持久化一次. 如果在这期间有宕机情况, 则数据不会被持久化, 而是消失
好处: (1)效率高, (2)持久化生成的文件是二进制文件体积小, 方便传输,
缺点: 可能丢失未持久化期间的数据
2.3 具体操作
(1)编辑docker-compose.yml文件, 添加映射持久化目录和容器的data目录(因为默认持久化文件是存在容器的data目录下), 以方便查看持久化了的二进制文件
(2) 重启redis
经过10005次key的变化,
for(int i = 0; i < 10005; i++){ //先看key改变了10005次是否可以持久化 jedis.incr("age"); }
终于在重启之后可以看到redis里依然保存着原来的age;
------------恢复内容开始------------
一. redis设置auth
1.1 映射并修改redis的配置文件
(1)在docker_redis下创建conf/redis.conf文件
version: '3.1' services: redis: image: daocloud.io/library/redis:5.0.7 container_name: redis restart: always environment: - TZ=Asia/Shanghai ports: - 6379:6379 volumes: - ./conf/redis.conf:/usr/local/etc/redis/redis.conf command: ["redis-server","/usr/local/etc/redis/redis.conf"]
宿主机上的./conf/redis.conf映射到文件内部的conf文件, 这个文件位置在daoCloud的安装文件说明里有.
最后一行的意思是启动时候启动"redis-server"并加载"/usr/local/etc/redis/redis.conf"这个文件, 就相当于修改宿主机下的文件就修改了这个文件
1.2 redis的auth
(1)vi./conf/redis.conf下的文件:
requirepass A9353...
在lunix下用auth A9353...输入密码
在java连接时, 用有参构造, 或者每次jedis来操作都用 jedis.auth("A9353...")来输入密码
public JedisPool(GenericObjectPoolConfig poolConfig, String host, int port, int timeout, String password) { this(poolConfig, host, port, timeout, password, 0, (String)null); }
二. redis持久化机制---RDB
2.1原因: 由于 Redis 是一个内存数据库,所谓内存数据库,就是将数据库中的内容保存在内存中,这与传统的MySQL,Oracle等关系型数据库
直接将内容保存到硬盘中相比,内存数据库的读写效率比传统数据库要快的多(内存的读写效率远远大于硬盘的读写效率)。
但是保存在内存中也随之带来了一个缺点,一旦断电或者宕机,那么内存数据库中的数据将会全部丢失。
为了解决这个缺点,Redis提供了将内存数据持久化到硬盘,以及用持久化文件来恢复数据库数据的功能。Redis 支持两种形式的持久化,
一种是RDB快照(snapshotting),另外一种是AOF(append-only-file)。
#RDB 代表持久化的时机 900秒内有一个key变了就执行持久化, 300秒内有10个key改变了也执行持久化, 60秒内有一万个key变了也持久化 save 900 1 save 300 10 save 60 10000
rdbcompression yes
dbfilename dump.rdb
2.2 特点: 以上配置, 有可能60秒持久化一次, 也有可能300或者900秒持久化一次. 如果在这期间有宕机情况, 则数据不会被持久化, 而是消失
好处: (1)效率高, (2)持久化生成的文件是二进制文件体积小, 方便传输,
缺点: 可能丢失未持久化期间的数据
2.3 具体操作
(1)编辑docker-compose.yml文件, 添加映射持久化目录和容器的data目录(因为默认持久化文件是存在容器的data目录下), 以方便查看持久化了的二进制文件
(2) 重启redis
经过10005次key的变化,
for(int i = 0; i < 10005; i++){ //先看key改变了10005次是否可以持久化 jedis.incr("age"); }
终于在重启之后可以看到redis里依然保存着原来的age;
三 AOF持久化机制
与RDB默认是开启的设置不同, AOF默认是关闭的.需要手动开启
aof持久化速度慢, 文件大
与aof有关的配置
# 开启AOF
appendonly yes
# AOF文件名称 appendfilename "redis.aof"
# AOF执行的时机(下列三者三选一)
# 每执行一次写操作执行一次持久化 # appendfsync always
# 每秒执行一次 appendfsync everysec
# 根据系统不同, 每一定时间执行一次持久化 # appendfsync no
上述设置添加到redis.conf
重启redis
添加数据后, 就可以去./data找到redis.aof文件
aof持久化文件可以看懂;
下面是redis.conf的配置 rdb和aof同时开启
aof和rdb需要同时开启(而不是先后开启), 以保证写数据的安全, 防止宕机数据丢失. 一旦宕机, 优先选择aof文件, 因为更安全.
四. redis的事务
Redis中的事务是一组命令的集合。一个事务中的命令要么都执行,要么都不执行(注意, 执行时候出现error也算执行,但出现error不会想mysql那样回退, 即出现err也不影响队列中其他命令的执行)
1.multi——开启事务
通过multi命令开启事务,它总是返回OK。MULTI执行之后,客户端可以继续向服务器发送任意多条命令, 这些命令不会立即被执行,而是被放到一个队列中
,当 EXEC命令被调用时, 所有队列中的命令才会被执行。
2 exec 来执行事务中的所有命令, 用discard来取消事务
3. watch命令
在执行EXEC命令时,检查被监视的键是否已经被修改过,一旦发现被监视的key至少一个被其他客户端修改,服务器将拒绝执行事务,并向客户端返回代表事务执行失败的空回复(nil-reply)。
执行EXEC命令后会自动取消watch,如果不想执行事务中的命令可以使用UNWATCH;
下图中, 客户端1在wathc了name后, 开启事务, 客户端2修改了客户端1watch的key(name), 导致客户端1的事务失败.
客户端1 客户端2
------------恢复内容结束------------