zoukankan      html  css  js  c++  java
  • redis简介与持久化

    一 . redis简介

    redis属于NoSQL学名(not only sql)
    特点:
    存储结构与mysql这一种关系型数据库完全不同,nosql存储的是key value形式
    nosql有很多产品,都有自己的api和语法,以及业务场景
    产品种类:
    Mongodb
    redis
    Hbase hadoop

      NoSQL和SQL的区别

    应用场景不同,sql支持关系复杂的数据查询,nosql反之
    sql支持事务性,nosql不支持

      redis的特性

    Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件
    redis是c语言编写的,支持数据持久化,是key-value类型数据库。
    应用在缓存,队列系统中
    redis支持数据备份,也就是master-slave模式

      redis的优势

    性能高,读取速度10万次每秒
    写入速度8万次每秒
    所有操作支持原子性
    # 这么快的原因是: 1.完全基于内存数据库, 2.redis完全是由C语言写的单线程数据库
    
    用作缓存数据库,数据放在内存中
    替代某些场景下的mysql,如社交类app
    大型系统中,可以存储session信息,购物车订单

      redis的安装

        1 . yum安装

    #前提得配置好阿里云yum源,epel源
    #查看是否有redis包
    yum list redis
    #安装redis
    yum install redis -y
    #安装好,启动redis
    systemctl start redis
    
    # 检查redis是否工作了
    redis-cli    #redis 客户端工具
    #进入交互式环境后,执行ping,返回pong表示安装成功
    127.0.0.1:6379> ping
    PONG

        2 . 源码编译安装

    # 编译安装的优势
    1. 编译安装可以扩展第三方模块
    2.编译安装可以统一路径,Linux软件约定安装在 /opt下
    3.软件仓库版本一般比较低, 编译安装可以根据需求, 安装最新版本
    1.下载redis源码
    wget http://download.redis.io/releases/redis-4.0.10.tar.gz
    2.解压缩
    tar -zxvf redis-4.0.10.tar.gz
    3.切换redis源码目录
    cd redis-4.0.10.tar.gz
    4.编译源文件
    make 
    5.编译好后,src/目录下有编译好的redis指令
    6.make install 安装到指定目录,默认在/usr/local/bin
    
    # 可以直接make && make install

      redis可执行文件 

    ./redis-benchmark //用于进行redis性能测试的工具
    ./redis-check-dump //用于修复出问题的dump.rdb文件
    ./redis-cli //redis的客户端
    ./redis-server //redis的服务端
    ./redis-check-aof //用于修复出问题的AOF文件
    ./redis-sentinel //用于集群管理

      redis的配置文件

    redis配置文件名为   redis.conf 
    # 这个文件可以自定义, 比如:
    # touch redis.s18.conf 内容如下
    grep -v '^$'  redis.conf |grep -v "^#"  >  redis.s18.conf   # 去掉空格和#开头的数据写到redis.s18.conf中
    
    # 然后 vim redis.s18.conf
    
    bind 192.168.81.132          #redis启动地址
    protected-mode yes            #开启redis安全模式
    port 6800                    #更改redis端口 
    daemonize yes                #redis后台启动 
    pidfile /var/run/redis_6379.pid
    loglevel notice             # 日志等级是notice
    logfile ""
    requirepass  666        #设置redis的密码 redis没有账号 

      启动redis服务端

    # redis-server   指定加载的文件   
    # 如果redis-server  后面什么也不指定, 会以非daemon的方式来运行,且默认服务端口为6379。
    redis-server  redis.s18.conf

      使用redis

    redis-cli -h 192.168.81.132 -p 6800
    # 参数解释 -h 指定主机地址  -p  指定redis端口
    # 登录之后通过auth指令 验证密码 如果没有密码直接ping  
    使用ping命令,确保redis正常可用回复了一个pong

      redis的数据类型

    redis是一种高级的key:value存储系统,其中value支持五种数据类型
    字符串(strings)
    散列(hashes)
    列表(lists)
    集合(sets)
    有序集合(sorted sets)

      redis简单指令

    keys  *       # 查看数据库所有的key
    type  key    #查看key的类型
    EXPIRE  addr  20  #给addr这个key设置20秒的过期时间
    ttl  key       #查看key的过期剩余时间
    persist key   # 取消key的过期时间
    exists key     # 判断key存在    存在返回1    否则0
    del keys      # 删除key    可以删除多个
    dbsize         # 计算key的数量
    set key value   # 设置key value
    # set name  attila
    get  key     # get name  得到的是attila

    二 . redis持久化

    Redis是一种内存型数据库,一旦服务器进程退出,数据库的数据就会丢失,为了解决这个问题,
    Redis提供了两种持久化的方案,将内存中的数据保存到磁盘中,避免数据的丢失。

      1 . RDB持久化

    RDB(持久化)
    内存数据保存到磁盘  可以定期执行, 也可以手动(save)执行
    RDB持久化产生的RDB文件是一个经过压缩的二进制文件,这个文件被保存在硬盘中,redis可以通过这个文件还原数据库当时的状态。
    在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot)
    优点:速度快,适合做备份,主从复制就是基于RDB持久化功能实现
    rdb通过再redis中使用save命令触发 rdb
    # (在redis文件下)开启rdb功能,vim redis-rdb.conf  内容如下:
    daemonize yes
    port 6379
    logfile /data/6379/redis.log
    dir /data/6379             # 这个需要mkdir -p /data/6379
    dbfilename  dbmp.rdb      # 当触发save之后会生成dbmp.rdb这个文件
    bind  127.0.0.1           
    save 900 1           # 每隔900秒有一个操作就执行持久化
    save 300 10         
    save 60  10000

      开启redis服务端,支持rdb功能

    redis-server redis-rdb.conf

      登录redis,写入数据,手动执行save触发持久化,会生成一个二进制的数据文件 dbmp.rdb 

    redis-cli   # 登录redis
    127.0.0.1:6379> set name  attila
    OK
    127.0.0.1:6379> save
    OK
    # 然后退出redis 在进来,keys *   name还在,如果不持久化,就没有数据

      2 . aof持久化

    AOF(append-only log file)
    记录服务器执行的所有变更操作命令(例如set del等),并在服务器启动时,通过重新执行这些命令来还原数据集
    AOF 文件中的命令全部以redis协议的格式保存,新命令追加到文件末尾。
    优点:最大程度保证数据不丢
    缺点:日志记录非常大
    # 在redis文件下  vim redis-aof.conf  写入如下数据:
    daemonize yes
    port 6379
    logfile /data/6379/redis.log
    dir /data/6379   # 也需要创建/data/6379
    appendonly yes
    appendfsync everysec

      aof持久化配置的两条参数

    appendonly yes
    appendfsync  always    总是修改类的操作
                 everysec   每秒做一次持久化
                 no     依赖于系统自带的缓存大小机制

      启动redis服务

    redis-server  redis-aof.conf

      检查.data/6379文件

    [root@localhost 6379]# ls
    appendonly.aof    redis.log

      登录redis, 写入数据

    redis-cli  # 登录redis
    127.0.0.1:6379> set name  attila
    OK
    127.0.0.1:6379> save
    OK
    
    # 最后退出redis, 重新登录redis, 输入keys *  检查结果name还在

      实时检查appendonly.aof文件信息

    # 再开一个窗口,然后检测实时动态
    [root@localhost 6379]# tail -f appendonly.aof

    三 . redis在不重启的状态下,从rdb持久化切换到aof持久化

      redis版本必须是2.2版本以上

    # 1.启动rdb方式的redis
    
    # 2.通过命令切换为aof模式,仅仅是临时生效,切换到aof,切换后还得修改配置文件
    127.0.0.1:6379> CONFIG set appendonly yes   #开启AOF功能
    OK
    127.0.0.1:6379> CONFIG SET save ""  #关闭RDB功能
    OK
    
    3.还得修改redis的配置文件,让他下次重启也是aof
    修改redis-rdb.conf  为如下配置,以后重启也是aof了
    daemonize yes
    port 6379
    logfile /opt/6379/redis.log
    dir /opt/6379
    appendonly yes
    appendfsync everysec
    
    # 重启redis数据库
    
    # 4.至此redis已经切换到 aof模式下了
  • 相关阅读:
    for循环嵌套的原理
    php for循环|求1-100之间被3整除且被5不整除的偶数
    php 1-100之间能被3整除的数字之和;
    php判断某年某月有多少天
    关系运算符
    变量
    习题5-7 使用函数求余弦函数的近似值
    习题5-6 使用函数输出水仙花数
    习题4-11 兔子繁衍问题
    习题4-9 打印菱形图案
  • 原文地址:https://www.cnblogs.com/attila/p/10662843.html
Copyright © 2011-2022 走看看