一、简介
简单来说 redis 就是一个数据库,不过与传统数据库不同的是 redis 的数据是存在内存中的,所以读写速度非常快,因此 redis 被广泛应用于缓存方向。另外,redis 也经常用来做分布式锁。
为什么要用 redis/为什么要用缓存?
主要从“高性能”和“高并发”这两点来看待这个问题。
高性能:假如用户第一次访问数据库中的某些数据,这个过程会比较慢,因为是从硬盘上读取的。如果该用户访问的数据存在缓存中,这样下一次再访问这些数据的时候就可以直接从缓存中获取了。操作缓存是直接操作内存,所以速度相对硬盘要快很多。如果数据库中的对应数据改变的之后,同步改变缓存中相应的数据即可!
高并发:redis适合少写多读,符合缓存的适用要求。官方数据表示Redis读的速度是十几万次/s,写的速度是八万次左右/s 。单机redis支撑万级,如果十万以上建议用redis replication模式,也就是集群模式;
二、单机安装
2.1 版本 3.2.12
cd /opt
tar -zxvf redis-3.2.12.tar.gz
cd redis-3.2.12
# 编译
make
# 安装
cd ./src
sudo make install PREFIX=/usr/local/redis/redis
sudo cp /opt/redis-3.2.12/redis.conf /usr/local/redis/redis
# 配置,修改以下配置
sudo vim /usr/local/redis/redis/redis.conf
# 允许远程连接
#bind 127.0.0.1
# 保护模式,只允许本地链接
protected-mode no
# appendonly开启持久化
appendonly yes
# 后台运行
daemonize yes
# 设置密码
requirepass Heheda@2024
# 启动服务(使用自定义配置)
/usr/local/redis/redis/bin/redis-server /usr/local/redis/redis/redis.conf
# 客户端连接
/usr/local/redis/redis/bin/redis-cli -h 127.0.0.1 -p 6379
参考:
Redis介绍和使用
Redis详解
Redis概述
2.2 版本 8.0.0
四、踩坑之路
1. 报错:ERR max number of clients reached
redis maxclients
是 redis server 的重要配置,它决定了客户端的最大连接数量。如果超过了设置的 maxclients,redis 会给新的连接发送 max number of clients reached
,并关闭连接。在 Redis 2.4 中,可以同时处理的最大客户端数量存在硬编码限制。 在 Redis 2.6 中,此限制是动态的:默认情况下,它设置为 10000 个客户端,除非 Redis.conf 中的 maxclients 指令另有说明。
绝大部分原因是由于客户端很多空闲连接都没有被及时释放掉从而导致 connected_clients 非常高,其他可能就是maxclients 设置的太少了,或者就是软硬件存在限制。
客户端:
服务端:
断开空闲连接:建议先断开部分客户端,不然由于报错:max number of clients reached
,无法创建连接。使用 redis-cli
进入命令行,使用 info clients
查看客户端连接数,设置参数 timeout(客户端闲置多长时间后关闭连接,如果指定为0,表示关闭该功能)自动断开连接,键入 config set timeout 600
)。
相关命令:
127.0.0.1:6379> CONFIG GET maxclients
1) "maxclients"
2) "10000"
127.0.0.1:6379> INFO clients
# Clients
connected_clients:9888
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0
127.0.0.1:6379> CONFIG set maxclients 90000
OK
127.0.0.1:6379> CONFIG get maxclients
1) "maxclients"
2) "90000"
127.0.0.1:6379> client list
id=281556 addr=10.8.0.6:43462 fd=11425 name= age=336 idle=336 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=get
id=270210 addr=10.8.0.6:45090 fd=79 name= age=1035 idle=1035 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=get
id=273983 addr=10.8.0.6:53192 fd=3852 name= age=946 idle=946 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=get
...
127.0.0.1:6379> config set timeout 600
OK
127.0.0.1:6379> INFO clients
# Clients
connected_clients:1836
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0