RDB 试验(一)同步命令 save

本文详细介绍Redis配置文件重置过程,包括配置项修改、启动与数据操作,演示了使用Jedis进行批量数据插入,以及如何监控内存使用情况。同时,通过实验展示了Redis在执行save命令时对客户端读取操作的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 重置配置文件
[root@redis3_0_7 ~]# redis-cli -p 6382 shutdown
[root@redis3_0_7 ~]# cd /opt/soft/redis/config
[root@redis3_0_7 config]# rm -rf redis-6382.conf 
[root@redis3_0_7 config]# cp ../redis.conf .
[root@redis3_0_7 config]# cp redis.conf redis-6379.conf
[root@redis3_0_7 config]# vi redis-6379.conf
daemonize yes
pidfile /var/run/redis-6379.pid
port 6379
logfile "6379.log"
#save 900 1
#save 300 10
#save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump-6379.rdb
dir /opt/soft/redis/data
  • 重置后的 redis-6379.conf
daemonize yes
pidfile /var/run/redis-6379.pid
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 0
loglevel notice
logfile "6379.log"
databases 16
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump-6379.rdb
dir /opt/soft/redis/data
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
slave-priority 100
appendonly no
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-entries 512
list-max-ziplist-value 64
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync yes
  • 启动 redis
[root@redis3_0_7 config]# redis-server redis-6379.conf
[root@redis3_0_7 config]# redis-cli
127.0.0.1:6379> dbsize
(integer) 0
  • 用 Jedis 向 redis 中插入数据,更改 key,让程序运行 4 遍;
public class PipelineMain {

    public static void main(String[] args) {
        Jedis jedis = new Jedis(Const.HOST, Const.PORT);
        for(int i = 0; i < 1000; i++) {
            Pipeline pipeline = jedis.pipelined();
            for(int j = i * 1000; j < (i + 1) * 1000; j++) {
                pipeline.hset("HashKey3:" + j, "field" + j, "value" + j);
            }
            pipeline.syncAndReturnAll();
        }
    }

}
  • redis 大小
127.0.0.1:6379> dbsize
(integer) 4000000
127.0.0.1:6379> info memory
# Memory
used_memory:546325720
used_memory_human:521.02M
used_memory_rss:560660480
used_memory_peak:546346432
used_memory_peak_human:521.04M
used_memory_lua:36864
mem_fragmentation_ratio:1.03
mem_allocator:jemalloc-3.6.0
  • 客户端 1 准备读
127.0.0.1:6379> set hello world
OK
127.0.0.1:6379> get hello
  • 客户端 2 执行 save
127.0.0.1:6379> save
  • 客户端 1 读,被阻塞
127.0.0.1:6379> get hello
  • 客户端 2 save 执行完,客户端 1 读才完成
127.0.0.1:6379> save
OK
(3.86s)
127.0.0.1:6379> get hello
"world"
(2.73s)
### 正确配置 Redis Cluster 的集群参数 Redis Cluster 是种分布式解决方案,用于实现高可用性和水平扩展。为了正确配置 Redis Cluster 参数并遵循最佳实践,可以从以下几个方面入手: #### 1. **基本配置** 在启动 Redis 实例之前,需要修改 `redis.conf` 文件中的相关参数以支持集群模式。 - 启用集群功能: 设置 `cluster-enabled yes` 表示启用 Redis Cluster 功能[^1]。 - 配置端口号: 使用不同的端口来区分多个 Redis 节点实例,例如 `port 6379` 或其他自定义端口[^2]。 - 数据持久化设置: 可以通过调整 `save` 和 `rdbcompression` 等选项控制数据持久化的频率和方式。如果不需要 RDB 持久化,则可以禁用它以提高性能[^3]。 ```conf # 示例配置片段 cluster-enabled yes port 6379 bind 0.0.0.0 dir /var/lib/redis/ logfile "/var/log/redis.log" appendonly no ``` --- #### 2. **节点间通信与超时时间** - 配置 `cluster-node-timeout` 参数: 这个参数决定了当个节点无法与其他节点通信多长时间后会被认为失效,默认值为 15 秒。可以根据实际网络环境适当调整该值,通常建议范围为 5 到 30 秒之间[^4]。 ```conf cluster-node-timeout 15000 ``` --- #### 3. **主从复制策略** - 自动故障转移: 当某个主节点不可用时,Redis Cluster 支持自动选举个新的从节点作为新主节点继续提供服务。可以通过命令行工具手动指定某些从节点绑定特定的主节点。 - 手动分配槽位: 如果希望更精确地管理键分布情况,也可以利用 `--cluster-replicas N` 命令指明每台主机应该拥有多少副本数[^5]。 --- #### 4. **安全性增强** - 密码保护机制: 对于生产环境中运行的 Redis Server 应始终开启身份验证功能,并且定期更换复杂度较高的访问密钥字符串。 ```bash requirepass your_strong_password_here ``` - SSL/TLS 加密传输: 在敏感场景下还可以考虑实施 TLS 协议加密客户端请求流量以及内部各成员之间的消息交换过程。 --- #### 5. **监控与维护** - 定期保存配置更改至磁盘上: 使用 `CLUSTER SAVECONFIG` 命令可立即将当前内存里的元信息同步写回到对应的 `.conf` 文本文件里去。 - 日志记录级别调节: 根据调试需求动态改变日志输出等级以便快速定位潜在问题所在位置。 --- ### 总结 以上就是关于如何合理规划并优化 Redis Cluster 中涉及的各项重要参数的些指导方针。具体数值设定还需依据项目实际情况灵活调整,在此基础之上不断试验摸索直至找到最适合自己的那套方案为止。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值