Redis安装配置
不建议任何其他操作系统的安装
# Install
# 编译安装-推荐
- 安装步骤
- 更新 GCC:GCC 是 Linux C 语言编译器,Redis 需最新版 GCC 才能编译通过,执行
yum install -y gcc-c++ autoconf automake
进行安装。 - 获取并编译 Redis 源码:依次执行
cd /usr/local/
、wget http://download.redis.io/redis-stable.tar.gz
、tar xvzf redis-stable.tar.gz
、cd redis-stable
、make
,并在编译完成后会显示redis installed
。 - 修改配置文件:在配置文件中添加
bind * -::*
。 - 放行端口:通过
firewall-cmd --zone=public --add-port=6379/tcp --permanent
和firewall-cmd --reload
命令,在防火墙中放行 6379 端口。 - 启动配置文件:执行
./redis-server ../redis.conf
启动 Redis。
- 更新 GCC:GCC 是 Linux C 语言编译器,Redis 需最新版 GCC 才能编译通过,执行
# Docker
docker pull redis:6.2.4
docker run -itd --name redis -p 8882:6379 -v /mydata/redis/data:/data redis:6.2.4 \
--requirepass ty88888888 \
--maxmemory 512mb \
--maxmemory-policy allkeys-lru \
--appendonly yes \
--appendfsync everysec \
--bind 0.0.0.0
2
3
4
5
6
7
8
9
# Redis 命令
Redis通用命令,用于数据库管理、键操作、设置过期时间等,具体内容如下:
select
:用于切换Redis数据库,Redis 默认拥有0 - 15号数据库 ,如select 0
切换到0号数据库。keys
:查询符合复合表达式要求的Redis key,但由于时间复杂度是0(n),会进行"全库扫描",执行效率差,不建议使用,如keys he[h-l]*
。exists
:判断key是否存在,存在返回1,不存在返回0,如EXISTS hello
。expire
:设置key过期时长(单位为秒),过期后该key自动删除,如expire helloworld 3600
。ttl
:查询key剩余有效期,如ttl helloworld
。del
:删除指定key,如del helloworld
。flushdb
和flushall
:flushdb
用于清空当前数据库;flushall
用于清空所有数据库,这两个命令都需谨慎使用 ,如flushdb
和flushall
。
# redis.conf
# 面向所有IP开放
bind * -::*
# 绑定端口号
port 6379
# 采用后台方式运行
daemonize yes
# 数据库总量
databases 16
# 日志文件存储路径
logfile ./redis_log.log
# 数据文件保存路径
dir ./
# 设置访问密码
requirepass 123456
2
3
4
5
6
7
8
9
10
11
12
13
14
如需修改,直接编辑对应行的参数值即可。比如要修改端口号,将port 6379
中的6379
改成目标端口;修改密码则更改requirepass
后的123456
为新密码 。
# Redis 开发规约
# Key的设计
- 可读性和可管理性:建议采用“业务名:表名:id”的格式,如“blog:article:1” 。
- 减小key的长度:建议不要超过39字节,
- 例如将“humanresource:employee:88301”简化为“hr:emp:88301” 。
- 要使用缩写,而不是全称
- 简洁性:不要包含特殊字符(空格、换行、引号等),建议使用英文与数字 。
# 不同类型的应用场景
Java | redis类型 | 说明 | 适用场景 |
---|---|---|---|
JavaBean | string | 保存对象JSON序列化字符串,优点是使用简单、节省key;缺点是序列化/反序列化需额外计算,无法局部调整 | 保存稳定数据,如档案信息、设备参数、产品描述 |
JavaBean | hash | 最符合JavaBean特征的保存方式,优点是key松散管理,可局部调整;缺点是hash->object需要额外编码(涉及到反射之类的编码) | 保存稳定数据,如档案信息、设备参数、产品描述 |
List Set | string | json序列化存储小数据、修改频度低的集合,优点是节省空间;缺点是无法局部调整 | 富豪排行榜、各种TOP10、TOP100 |
List Set | n/a | 变化频度高、单个对象很大或数量很多,不建议放入Redis | 实时股票行情、货币汇率、实时运算 |
# Redis的安全建议
加强防御 && 容灾备份
- 网络访问限制:不要让Redis在外网被访问,禁止使用“bind 0.0.0.0”,可绑定内网IP,如“bind 192.168.132.128” 。
- 端口设置:更改Redis默认端口6379,例如设置为“port 8838” 。
- 启动用户:要使用非root用户启动Redis 。
- 密码设置:设置密码,且不要与登录密码相同,使用“requirepass”和“masterauth” 。
- 数据备份:定期使用“save命令”进行备份 。
- 防火墙设置:配置好Linux防火墙规则 。
# Redis 内存
- 客户端缓冲区
- 输入缓冲区:暂存客户端发送的待执行命令,位于服务器内存。
- 输出缓冲区:保存待返回给客户端的响应结果,同样位于服务器内存。
- 复制缓冲区(同步缓冲区)
- 主从同步时用于临时存储同步数据的区域,提升主从节点数据交换效率。
- AOF 缓冲区(日志缓冲区域)
- 缓存 AOF 持久化的写操作命令,积累到一定量后批量写入磁盘,避免频繁磁盘 I/O。
- 对象内存(内容缓冲区域)
- Redis 实际存储数据的内存区域(如字符串、哈希、列表等数据结构)。
# info memory
要监控内存使用情况,可以通过 INFO MEMORY
命令查看关键指标。其中 used_memory
表示当前数据占用的内存字节数,used_memory_human
会转换成更易读的 MB/GB 单位。used_memory_rss
反映了操作系统实际分配给 Redis 的内存总量(包括碎片),而 mem_fragmentation_ratio
是内存碎片率(计算方式为 rss 内存除以实际数据内存),建议保持在 1-1.5 之间。如果碎片率过高,可以启用 Redis 的自动碎片整理功能。此外,该命令还能看到内存使用的峰值、Lua 脚本引擎占用的内存等信息。
- 内存碎片率(= used_memory_rss / used_memory),正常范围为 1~1.5。
- 过高(>1.5):建议启用
activedefrag yes
自动整理碎片。
- 过高(>1.5):建议启用
192.168.42.128:6379> info memory
# Memory
used_memory:2594560
used_memory_human:2.47M
used_memory_rss:7950336
used_memory_rss_human:7.58M
used_memory_peak:2609784
used_memory_peak_human:2.49M
used_memory_peak_perc:99.42%
used_memory_overhead:2312364
used_memory_startup:2279016
used_memory_dataset:282196
used_memory_dataset_perc:89.43%
used_memory_lua:31744
used_memory_vm_eval:31744
used_memory_lua_human:31.00K
mem_fragmentation_ratio:3.09
mem_fragmentation_bytes:5376448
mem_not_counted_for_evict:0
192.168.42.128:6379> config set activedefrag yes
OK
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Redis性能篇(四)Redis内存碎片 https://www.cnblogs.com/liang24/p/14232890.html
指标 | 说明 |
---|---|
used_memory:13490096 | 数据占用了多少内存(字节) |
used_memory_human:12.87M | 数据占用了多少内存(单位) |
used_memory_rss:13490096 | 操作系统已分配的内存量 |
used_memory_peak:15301192 | 占用内存的峰值(字节) |
used_memory_peak_human:14.59M | 占用内存的峰值(带单位的) |
used_memory_lua:31744 | lua引擎所占用的内存大小(字节) |
mem_fragmentation_ratio:1.00 | 内存碎片率 |
# redis 安全与事务
Linux系统
编辑 redis.conf文件,找到下面进行保存修改
- 在配置文件中,将
requirepass
后面的值设置为您希望设置的密码。例如:requirepass 自定义密码
重启Redis服务,访问时,使用带密码的命令:
redis-cli -a 自定义密码
redis-cli -h your_redis_host -p your_redis_port -a your_password
1
否则会提示: (error)NOAUTH Authentication required.
Window系统
跟Linux系统一样,区别是,window系统的文件是 redis.window-service.config
# 缓存管理机制
定时删除+惰性删除+内存淘汰
缓存管理机制的主要目的是有效管理过期的缓存,以避免占用过多内存空间。Redis采用随机删除算法,每隔一定时间进行随机删除,但这种算法有一定概率永远无法删除某些键,因此需要惰性删除。惰性删除在键被调用时检查是否过期,并删除过期的键,但未满足过期条件的键仍无法删除。
过长的过期时间可能导致无用数据一直存在,因此引入了内存淘汰策略,包括LRU(最近最少使用)、LFU(最不经常使用)和过期键删除等算法,以保证内存中存储的键是高效有用的。然而,这些策略也会出现问题,如缓存击穿和缓存雪崩。
缓存击穿指客户端请求未命中缓存,反复请求数据库,可以通过布隆过滤器有效防止。而缓存雪崩则是指大量热点数据同时过期或删除,为了解决这个问题,可以采用设置随机过期时间、增加热点数据永不过期等策略,以确保热点数据不会在同一时间被删除,有效解决了缓存雪崩问题。