• 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

     

     

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

  • 相关阅读:
    POJ-2386 Lake Counting
    白书-部分和问题
    STL-map/multimap 简述
    STL-set&&multiset 集合
    STL-优先级队列-priority_queue
    挣脱虚无,化身虚无
    C
    B
    A
    STL-list 链表
  • 原文地址:https://www.cnblogs.com/dangdanghepingping/p/14289968.html
Copyright © 2020-2023  润新知