redis笔记3(千峰教育)


一. 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

 

 

------------恢复内容结束------------

原文地址:https://www.cnblogs.com/dangdanghepingping/p/14289968.html