千家信息网

redis内存数据库

发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,===> Redis内存数据库简介:Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。===> Redis 的特点:->基于内存-> 持久化: RDB、AOF->
千家信息网最后更新 2025年02月01日redis内存数据库

===> 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的事务

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

0