设为首页 收藏本站
查看: 7637|回复: 0

[经验分享] redis内存数据库

[复制链接]

尚未签到

发表于 2018-11-3 06:37:37 | 显示全部楼层 |阅读模式
  ===> Redis内存数据库简介:
  Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。
  ===> Redis 的特点:
  ->基于内存
  -> 持久化: RDB、AOF
  -> 消息机制:支持String,只支持Topic的消息(广播)
  -> 丰富的数据类型
  -> 支持简单的事务
  -> 支持主从复制
  -> HA(哨兵): 对版本有要求,需要 2.4 版本以上
  ===> Redis的安装和配置: 需要gcc的编译器
  -> Redis 单机部署:
        tar -zxvf redis-3.0.5.tar.gz  
        make
  
        make PREFIX=/app/redis install
  -> Redis的相关命令
  
  redis-benchmark       提供的一个压力测试工具,模拟:10万操作
  redis-check-aof       检查AOF日志文件
  redis-check-dump      检查RDB快照文件
  redis-cli                     命令行
  redis-sentinel        哨兵(Redis的HA) -----> 配置文件:sentinel.conf 2.4版本以上
  redis-server      服务器
  -> 配置文件   
  --- redis.conf
  daemonize yes  改成yes 后,启动后会在后台运行
  port 6379
  -> 服务启动命令:redis-server conf/redis.conf
  -> 客户端连接命令: redis-cli -p 6379  |  redis-cli  -h 192.168.10.210 -p 6379
  
  ===> Redis 集群的安装和配置:(星型架构,线型架构)
  -> 此处只讲解星型架构(此架构结构为单台服务器上使用不同端口启动三个服务组成集群,多台服务器同理)
  --- 主:6379端口               (关闭 RDB 和 AOF)
  --- 从:6380, 6381端口  (开启 RDB 和 AOF)
  -> 配置文件:
    redis6379.conf  daemonize yes
  #save 900 1
  #save 300 10
  #save 60 10000
  pidfile /app/redis/pids/redis_6379.pid
  logfile "/app/redis/logs/redis_6379/redis.log"
  dbfilename dump.rdb
  dir "/data/redis_data/redis_6379"
  appendonly no
  appendfilename "appendonly6379.aof"
  redis6380.conf
  port 6380
  slaveof 192.168.157.11 6380
  pidfile /app/redis/pids/redis_6380.pid
  logfile "/app/redis/logs/redis_6380/redis.log"
  dbfilename dump.rdb
  dir "/data/redis_data/redis_6380"
  appendonly yes
  appendfilename "appendonly6380.aof"
  redis6381.conf
  port 6381
  

  slaveof 192.168.157.11 6379
  pidfile /app/redis/pids/redis_6381.pid
  logfile "/app/redis/logs/redis_6381/redis.log"
  dbfilename dump.rdb
  dir "/data/redis_data/redis_6381"
  appendonly yes
  appendfilename "appendonly6381.aof"
  (*)注意:默认:从节点只读
(error) READONLY You can't write against a read only slave.  修改参数:
  slave-read-only yes
  
  -> Redis的HA:哨兵机制(要在解压的安装包中copy sentinel.conf 文件到 /conf 目录下)
      sentinel monitor mymaster  192.168.10.210  6379  1  
      #                              IP            端口   哨兵个数
  
      sentinel auth-pass   
  
      # 配置连接主节点的密码
  
      sentinel down-after-milliseconds  mymaster  30000
  
      # 表示 30 秒内如果没有收到主节点的心跳,哨兵就认为主节点down
  
      sentinel  parallel-syncs  mymaster 1
  
      # 选举出新的主节点后,可以同时连接其他从节点的个数
  
      sentinel  failover-timeout  mymaster  180000
  
      # 失败切换时,允许的最大时间
  ---哨兵启动命令:redis-sentinel sentinel.conf
  -> Redis的分片:
  ---Twemproxy 是一种代理分片机制, 由 Twitter 开源
  Twemproxy 作为代理,可接受来自多个程序 的访问,按照路由规则,转发给后台的各个 Redis 服务器, 再原路返回
  --- 安装Twemproxy
  
       git clone https://github.com/twitter/twemproxy.git  
       cd twemproxy/
  

  
       CFLAGS="-ggdb3 -O0" autoreconf -fvi && ./configure --prefix=/app/proxy --enable-debug=log && make &&  make install
  
  --- 配置文件:nutcracker.yml  (需要在解压的安装包/conf 目录下copy 到安装目录的 conf 目录下)
  
       alpha:  
       listen: 127.0.0.1:22121
  
       hash: fnvla_64
  
       distribution: ketama
  
         auto_eject_hosts: true
  
         redis: true
  
         server_retry_timeout: 2000
  
         server_failure_limit: 1
  
         servers:
  
         - 192.168.10.210:6380
  
         - 192.168.10.210:6381
  --- 检查配置文件是否正确:  ./nutcracker  -t  conf/nutcracker.yml
  --- 启动代理服务器: ./nutcracker -d -c  conf/nutcracker.yml
  --- 此时连接Redis 需要使用 Twemproxy 配置的端口连接: redis-cli  -p  22121
  ===> Redis的操作:基于key-value形式
  ->
  ---
  ===> Redis的事务: 不是真正的事务
  -> Redis的事务的本质:将一组操作放入队列中,批量执行
  -> 对比Oracle和Redis的事务
   DSC0000.jpg
  -> Redis 的事务实例:(银行转账)
      set tom 1000  
      set mike 1000
  
      multi
  
      decrby tom 100
  
      incrby mike 100
  
      exec
  ===> Redis的锁机制
  -> 核心:当事务提交的时候,如果监控的值,发生变化,则提交失败
  命令:watch
  -> Redis 的锁实例:(买票
  
      set ticket 1  
      set tom 1000
  

  
      用户一:tom
  
      multi
  
      decr ticket
  
      decrby tom 100
  
      exec  -------> 提交的时候,慢了一点
  

  
      1) (integer) -1   ====> 票数不可能是-1
  
      2) (integer) 900
  

  
      用户二:在tom提交前,已经把票买走了
  
      decr ticket
  
  ===> Redis的消息机制
  -> Redis 消息系统类型
  --- 同步消息系统:需要对方的回答
  --- 异步消息系统:不需要等待对方回答
  -> Redis 消息类型
  --- Queue: 队列(点对对)
  --- Topic: 主题 (广播)
  (*)Redis和Kafka:只支持Topic
  (*)  JMS: Java Message Service ----> 都支持:Queue和Topic
  推荐:Weblogic
  -> Redis 消息相关命令
  
  publish: 发布消息 指定频道
  subscribe:订阅消息 指定频道
  psubscribe:订阅消息 使用通配符指定频道
  
  ===> Redis的持久化:  RDB、AOF
  -> 持久化作用:进行恢复
  -> RDB:快照的方式。每隔一段时间,把内存中的数据写到rdb文件中
  --- 优点:恢复的速度快
  --- 缺点:如果在两次RDB之间发生了掉电,数据肯定丢失
  --- 参数:
  规则:从下往上
  save 900 1      在15分钟内,如果有1个key的value发生了变化,就产生RDB文件
  save 300 10     在5分钟内,如果有10个key的value发生了变化,就产生RDB文件
  save 60 10000   在60秒内,如果有1w个key的value发生了变化,就产生RDB文件
  stop-writes-on-bgsave-error yes 如果在写RDB文件的时候产生了错误,停止新的数据写入
  rdbcompression yes 是否压缩(优点:节约了空间  缺点:恢复的效率低),可以设置为:no
  rdbchecksum yes  校验和来检查RDB文件是否是好的
  dbfilename dump.rdb  如果在集群下,一台主机上运行多个Redis的实例,建议区别rdb文件
  dir ./    保存的目录
  
  -> AOF:append only file(记录日志)
  
  --- 优点:数据安全性高
  --- 缺点:恢复速度慢,需要重做日志,达到恢复的目的
  --- 默认禁用
  --- 参数:
        appendonly no  ===> yes     #开启AOF  
        appendfilename "appendonly.aof"  # 如果在集群下,一台主机上运行多个Redis的实例,建议区别aof文件
  

  
        # 什么时候记录日志???
  
        # appendfsync always  # 每个操作都记录日志。最安全,性能最差
  
        appendfsync everysec  # 默认:每秒
  
        # appendfsync no      # 由操作系统决定
  
        no-appendfsync-on-rewrite no # 重写发生的时候,是否写入aof的新日志
  
        # 什么时候执行AOF重写?
  
        auto-aof-rewrite-percentage 100
  
        auto-aof-rewrite-min-size 64mb
  

  # 什么是AOF的重写:rewrite
  set i 0
  incr i
  incr i
  ======> 问题: AOF文件太大了
  100次
  ****
  incr i
  

  最终:i = 100
  # 演示:AOF的重写
  模拟:10万个操作
  bin/redis-benchmark -n 100000
  ===> Redis 问题链接:(找了几个比较经典的问题处理链接,留作收藏,以后备用
  -> http://blog.sina.com.cn/s/blog_a1e9c7910102vmx5.html
  -> http://blog.csdn.net/a491857321/article/details/52006376



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-629972-1-1.html 上篇帖子: zabbix系列zabbix3.4监控redis3.x版本 下篇帖子: Redis未授权访问导致可远程获得服务器权限
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表