redis实战
介绍
redis:缓存数据库
速度快,数据全放在内存中,支持多种数据结构,string list hash set, storted set(有序集合型)
持久化
主从复制
支持过期时间
支持事物
消息订阅
支持虚拟内存
运用场景:
数据缓存 提高访问性能
会话缓存 保存web会话信息 seseion cache
排行榜 计数器 nginx+lua+redis 计数器进行IP自动封禁
消息队列 构建实时消息系统,聊天,群聊
yum安装
yum install epel-release -y 安装epel扩展源
yum install redis -y 安装redis
systemctl start redis
redis-cli
安装
源码包安装
cd cd /etc/yum.repos.d/
rz epel.repo
mkdir /data && cd /data
tar xf redis-5.0.5.tar.gz
yum install gcc* -y
cd redis-5.0.5/
make MALLOC=libc
mkdir /data/redis6379
cp redis.conf /data/redis6379/
cp src/redis-server /data/redis6379/
cd /data/redis6379/
grep '^[^$|#]' redis.conf > 2
mv redis.conf redis.conf.bak
mv 2 redis.conf
bind 192.168.81.20 绑定主机IP
daemonize yes 后台启动
appendonly yes 二进制日志开关 记录数据变化
logfile “redis.log” 指定日志文件
dbfilename dump.rdb 持久化数据文件
服务启动
./redis-server ./redis.conf &
https://www.cnblogs.com/bug1024/p/8989649.html 搭建redis常见错误参考
拷贝命令
cd /data/redis-5.0.5/src
cp redis-cli /usr/bin/
redis-cli --help
192.168.81.20:6379> set foo ghj 创建键值对
192.168.81.20:6379> get foo 获取value
192.168.81.20:6379> keys * 获取所有的key
192.168.81.20:6379> SHUTDOWN 关闭redis服务
redis保护模式
protected-mode yes
requirepass root 设置验证密码
[root@node1 ~]# redis-cli -h 192.168.81.20
192.168.81.20:6379> auth root 认证
192.168.81.20:6379> set name lwb
192.168.81.20:6379> get name
192.168.81.20:6379> CONFIG GET * 查看配置
192.168.81.20:6379> CONFIG GET loglevel
192.168.81.20:6379> CONFIG SET loglevel "notice" 变更当前运行配置
redis数据存储 内存 ----> 硬盘 数据文件.rdb 更新日志.aof(二进制文件)
持久化
aof记录写的命令
持久化策略:
databases 16
always-show-logo yes
save 900 1
900秒内有一次改动 进行保存
save 300 10
300秒内有10次改动 保存
save 60 10000
60秒内有1000次改动 保存到硬盘
rdbcompression yes 启用压缩
appendfsync everysec 每秒保存数据 no: 30秒同步一次将缓存写到磁盘 always:每次更新操作调用fsync将数据写到磁盘 everysec:每一秒同步一次
redis操作:
string
192.168.81.20:6379> type name 一个键最大能保存512M
192.168.81.20:6379> append name 123 最加
192.168.81.20:6379> mset name lwb foo oldboy 同时设置
192.168.81.20:6379> MGET name foo 同时取
192.168.81.20:6379> STRLEN name value长度
integer
192.168.81.20:6379> set age 12
192.168.81.20:6379> INCR age 整数加1 计数器使用
192.168.81.20:6379> decr age 减1
192.168.81.20:6379> exists name 检查数据是否存在
192.168.81.20:6379> INCRBY age 10 每次加10
192.168.81.20:6379> DECRBY age 10 每次减10
hash 一个hash用于存储多个键值对
192.168.81.20:6379> HSET user:1 name lwb
192.168.81.20:6379> type user:1
192.168.81.20:6379> HSET user:1 age 22
192.168.81.20:6379> HSET user:1 sex male
192.168.81.20:6379> hgetall user:1 获取hash的所有键值对
192.168.81.20:6379> HGET user:1 age 获取单个键值对
192.168.81.20:6379> HMGET user:1 name age 查询多个键值对
192.168.81.20:6379> del foo 删除键值对
192.168.81.20:6379> HDEL user:1 age 删除hash的单个键值对
192.168.81.20:6379> HSET user:1 age 22
192.168.81.20:6379> HINCRBY user:1 age 5 对hash的键值对增量
list
192.168.81.20:6379> LPUSH list1 bmw benz totato honda 创建list1列表
192.168.81.20:6379> TYPE list1
192.168.81.20:6379> LRANGE list1 0 10 取第1到第10的列表数
192.168.81.20:6379> LPUSH list1 volvo 插在列表左边
192.168.81.20:6379> RPUSH list1 byd 插在列表右边
192.168.81.20:6379> RPOP list1 移除列表最右边的并输出打印
192.168.81.20:6379> LPOP list1 移除列表最左边的并输出打印
192.168.81.20:6379> LLEN list1 列表的长度
192.168.81.20:6379> LREM list1 1 volvo 删除左边第一个volvo
192.168.81.20:6379> LRANGE list1 0 -1 获取列表所有的数据
192.168.81.20:6379> LSET list1 0 HONDA 设置左边第1个下标的值
192.168.81.20:6379> LINDEX list1 1 列表第2个索引值
192.168.81.20:6379> LINSERT list1 after benz mashaladi 在benz后面插入mashaladi
set, sort set 的操作看以前的文档
高级运用
发布订阅
终端1
192.168.81.20:6379> SUBSCRIBE CCTV1 订阅频道
终端2
192.168.81.20:6379> SUBSCRIBE CCTV1 订阅相同的频道
终端3 发布消息
192.168.81.20:6379> PUBLISH CCTV1 "hello this is sz" 在CCTV1频道上发布消息
事物
192.168.81.20:6379> zadd salary 3000 lwb 5000 oldboy
192.168.81.20:6379> MULTI 开启一个事物
192.168.81.20:6379> ZINCRBY salary 1000 lwb
192.168.81.20:6379> ZINCRBY salary -1000 oldboy
192.168.81.20:6379> exec 执行事物内的命令
服务器命令
192.168.81.20:6379> info 查看服务器情况
192.168.81.20:6379> client list 查看客户端
192.168.81.20:6379> save 立刻保存数据到磁盘
192.168.81.20:6379> monitor 监控客户端的操作
慢日志查询
redis.conf
slowlog-log-slower-than 10000 超过10000毫秒的查询操作定义为慢查询
slowlog-max-len 128 最多保存128条慢查询记录
192.168.81.20:6379> CONFIG GET slow*
save的操作
redis.conf
appendonly no 关闭持久化
192.168.81.20:6379> shutdown
rm -rf appendonly.aof dump.rdb 删除持久化数据
[root@node1 redis6379]# ./redis-server ./redis.conf 重启
192.168.81.20:6379> set name hkl
192.168.81.20:6379> save
192.168.81.20:6379> shutdown
[root@node1 redis6379]# mv dump.rdb /root/ 备份 重启服务之后数据就没了
[root@node1 redis6379]# ./redis-server ./redis.conf 重启
cp ~/dump.rdb ./
192.168.81.20:6379> SHUTDOWN
[root@node1 redis6379]# ./redis-server ./redis.conf 重启数据恢复
互为主从搭建
主从同步原理:https://www.cnblogs.com/lukexwang/p/4711977.html?from=singlemessage&isappinstalled=0
主从搭建及sentinel参考: https://www.cnblogs.com/carrychan/p/9396997.html
主节点
vim redis.conf
port 6379
daemonize yes
masterauth 123456
bind 192.168.81.20
requirepass 123456
slaveof 192.168.81.30 6380
pidfile /var/run/redis-6379.pid
logfile /var/log/redis/redis-6379.log
从节点
port 6380
daemonize yes
bind 192.168.81.30 6380
requirepass 123456
masterauth 123456
pidfile /var/run/redis-6380pid
logfile /var/log/redis/redis-6380.log
slaveof 192.168.81.20 6379
测试
192.168.81.20:6379> INFO replication
192.168.81.20:6379> set test4 www
192.168.81.20:6379> shutdown
192.168.81.30:6380> INFO replication
主从切换
192.168.81.30:6379> SLAVEOF no one 让自己变成master
192.168.81.20:6380> SLAVEOF 192.168.81.30 6379 切换到 192.168.81.30主master
搭建redis-sentinel系统 每个节点同样部署
ha高可用解决方案,实现主备切换
sentinel.conf
protected-mode no
daemonize yes
port 6800
sentinel monitor mymaster 192.168.81.30 6379 1(集群中有多少台 sentinel同意切换才切换)
sentinel auth-pass mymaster 123456
sentinel down-after-milliseconds mymaster 5000 #5秒内192.168.81.30没有响应,就认为master DOWN了
sentinel failover-timeout mymaster 15000 主从多久没切换成功之后认为切换失败
logfile sentinel.log
pidfile sentinel.pid
# Generated by CONFIG REWRITE
protected-mode no
sentinel leader-epoch mymaster 5
sentinel known-replica mymaster 192.168.81.20 6379 切到哪个master
sentinel current-epoch 5
启动redis-sentinel
./bin/redis-sentinel ./sentinel.conf
redis集群
16384个hash槽
依赖:yum install ruby rubygems -y
安装ruby参考https://blog.csdn.net/Gushiyuta/article/details/90770681
gpg2 --keyserver hkp://keys.gnupg.net --recv-keys D39DC0E3
gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/
gpg2 --keyserver hkp://pool.sks-keyservers.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D695610
curl -L get.rvm.io | bash -s stable
source /usr/local/rvm/scripts/rvm
rvm install 2.3.3 安装
ruby --version 查询版本
gem install redis 安装redis集群组件
gem source -
部署集群
cd /data
for i in 0 1 2 3 4 5;do cp -r redis6379 700$i;done 部署6个redis
for i in 0 1 2 3 4 5;do rm -rf 700$i/dump.rdb;done 删除rdb
chang_file.sh
#!/bin/sh
for i in 0 1 2 3 4 5
do
file=redis.conf
cd /data/700$i
sed -i "s/port 6379/port 700$i/g" $file
echo "cluster-enabled yes" >> $file
echo "cluster-config-file nodes.conf" >> $file
echo "cluster-node-timeout 5000" >> $file
sed -i "s/appendonly no/appendonly yes/g" $file
sed -i "s/redis_6379.pid/redis_700$i.pid/g" $file
sed -i "/^dir/d" $file
echo "dir './'" >> $file
done
批量启动
for i in 0 1 2 3 4 5;do cd /data/700$i && ./redis-server ./redis.conf;done
创建集群
redis-cli --cluster create 192.168.81.20:7000 192.168.81.20:7001 192.168.81.20:7002 192.168.81.20:7003 192.168.81.20:7004 192.168.81.20:7005 --cluster-replicas 1
注: --cluster-replicas 1 为集群中的每个几点创建一个从节点
登录集群
redis-cli -c -p 7000 -h 192.168.81.20
192.168.81.20:7000> set ssh:1 192.168.85.20
192.168.81.20:7004> get ssh:1
-> Redirected to slot [5147] located at 192.168.81.20:7000 定向到存储该key的槽位slot
redis-cli -p 7001 -h 192.168.81.20 cluster nodes 查看集群状态
redis-cli --cluster reshard 192.168.81.20:7000 重新分片
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器