当前位置:Gxlcms > 数据库问题 > redis内存数据库

redis内存数据库

时间:2021-07-01 10:21:17 帮助过:2人阅读

                 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

42 daemonize yes  改成yes 后,启动后会在后台运行

50 port 6379

            -> 服务启动命令:redis-server conf/redis.conf

===> Redis 集群的安装和配置:(星型架构,线型架构)

            -> 此处只讲解星型架构(此架构结构为单台服务器上使用不同端口启动三个服务组成集群,多台服务器同理)

                --- 主:6379端口               (关闭 RDB 和 AOF)

                --- 从:6380, 6381端口  (开启 RDB 和 AOF)

            -> 配置文件:

		redis6379.conf
		        147 #save 900 1
			148 #save 300 10
			149 #save 60 10000
				
			509 appendonly no
				
		redis6380.conf
			50 port 6380
			182 dbfilename dump6380.rdb
			513 appendfilename "appendonly6380.aof"
			211 slaveof 192.168.157.11 6379
				
		redis6381.conf
			50 port 6381
			182 dbfilename dump6381.rdb
			513 appendfilename "appendonly6381.aof"
			211 slaveof 192.168.157.11 6379

                 (*)注意:默认:从节点只读

		(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  <master-name>  <password>
                # 配置连接主节点的密码
                sentinel down-after-milliseconds  mymaster  30000
                # 表示 30 秒内如果没有收到主节点的心跳,哨兵就认为主节点down
                sentinel  parallel-syncs  mymaster 1
                # 选举出新的主节点后,可以同时连接其他从节点的个数
                sentinel  failover-timeout  mymaster  180000
                # 失败切换时,允许的最大时间

            -> Redis的分片:

                    ---Twemproxy 是一种代理分片机制, 由 Twitter 开源

                        Twemproxy 作为代理,可接受来自多个程序 的访问,按照路由规则,转发给后台的各个 Redis 服务器, 再原路返回

                    --- 安装Twemproxy

       ./configure --prefix=/app/proxy
       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的操作:基于key-value形式   -----> 不作为重点

===> Redis的事务: 不是真正的事务

            -> Redis的事务的本质:将一组操作放入队列中,批量执行

            -> 对比Oracle和Redis的事务

                 技术分享图片

            -> 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文件
                  
                # 什么时候记录日志???
                538 # appendfsync always  # 每个操作都记录日志。最安全,性能最差
                539 appendfsync everysec  # 默认:每秒
                540 # appendfsync no      # 由操作系统决定
                no-appendfsync-on-rewrite no # 重写发生的时候,是否写入aof的新日志
                # 什么时候执行AOF重写?
                580 auto-aof-rewrite-percentage 100
                581 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内存数据库

标签:span   操作   term   区别   col   安装   集群   ike   服务器   

人气教程排行