redis笔记!
参考文献:
环境
win10 下 wsl 环境 ubuntu 的 redis
Redis安装与使用
-
下载redis并安装
cd /usr/servers/ wget https://github.com/antirez/redis/archive/2.8.19.tar.gz tar -xvf 2.8.19.tar.gz cd redis-2.8.19/ make
-
后台启动Redis服务器
使用 nohup 和 & 指令:
nohup /usr/servers/redis-2.8.19/src/redis-server /usr/servers/redis-2.8.19/redis.conf &
-
查看是否启动成功
ps -ef | grep redis
-
进入客户端并测试
/usr/servers/redis-2.8.19/src/redis-cli -p 6379 127.0.0.1:6379> set i 1 OK 127.0.0.1:6379> get i "1" 127.0.0.1:6379> quit # quit 退出 redis 客户端
-
redis客户端显示中文
./redis-cli -- raw # 默认redis不转义中文的,需要加上 --raw
-
redis-cli查看所有的keys及清空所有的数据
keys * # 查看所有keys flushall # 清空所有数据
Redis主从
-
基本设置
#端口设置,默认6379 port 6379 #日志文件,默认/dev/null logfile "" #内存大小对应关系 # 1k => 1000 bytes # 1kb => 1024 bytes # 1m => 1000000 bytes # 1mb => 1024*1024 bytes # 1g => 1000000000 bytes # 1gb => 1024*1024*1024 bytes #设置Redis占用100mb的大小 maxmemory 100mb #如果内存满了就需要按照如相应算法进行删除过期的/最老的 #volatile-lru 根据LRU算法移除设置了过期的key #allkeys-lru 根据LRU算法移除任何key(包含那些未设置过期时间的key) #volatile-random/allkeys->random 使用随机算法而不是LRU进行删除 #volatile-ttl 根据Time-To-Live移除即将过期的key #noeviction 永不过期,而是报错 maxmemory-policy volatile-lru #Redis并不是真正的LRU/TTL,而是基于采样进行移除的,即如采样10个数据移除其中最老的/即将过期的 maxmemory-samples 10
-
Redis主从
#在配置文件中挂载主从,不推荐这种方式,我们实际应用时Redis可能是会宕机的 slaveof masterIP masterPort #从是否只读,默认yes slave-read-only yes #当从失去与主的连接或者复制正在进行时,从是响应客户端(可能返回过期的数据)还是返回“SYNC with master in progress”错误,默认yes响应客户端 slave-serve-stale-data yes #从库按照默认10s的周期向主库发送PING测试连通性 repl-ping-slave-period 10 #设置复制超时时间(SYNC期间批量I/O传输、PING的超时时间),确保此值大于repl-ping-slave-period #repl-timeout 60 #当从断开与主的连接时的复制缓存区,仅当第一个从断开时创建一个,缓存区越大从断开的时间可以持续越长 # repl-backlog-size 1mb #当从与主断开持续多久时清空复制缓存区,此时从就需要全量复制了,如果设置为0将永不清空 # repl-backlog-ttl 3600 #slave客户端缓存区,如果缓存区超过256mb将直接断开与从的连接,如果持续60秒超过64mb也会断开与从的连接 client-output-buffer-limit slave 256mb 64mb 60
设置主从
cd /usr/servers/redis-2.8.19 cp redis.conf redis_6660.conf cp redis.conf redis_6661.conf # 将端口分别改为port 6660和port 6661 vim redis_6660.conf vim redis_6661.conf # 启动 nohup /usr/servers/redis-2.8.19/src/redis-server /usr/servers/redis-2.8.19/redis_6660.conf & nohup /usr/servers/redis-2.8.19/src/redis-server /usr/servers/redis-2.8.19/redis_6661.conf & # 查看是否启动成功 ps -aux | grep redis # 进入从客户端,挂主(不在配置文件设置 slaveof masterIP masterPort ) /usr/servers/redis-2.8.19/src/redis-cli -p 6661 127.0.0.1:6661> slaveof 127.0.0.1 6660 OK 127.0.0.1:6661> info replication # Replication role:slave ...
-
Redis持久化
为了防止数据丢失,可以挂载一个从(叶子节点)只进行持久化存储工作。
Redis持久化有RDB快照模式和AOF追加模式。
-
Redis动态调整配置
127.0.0.1:6660> config get maxmemory 1) "maxmemory" 2) "10485760" # 调整配置值 127.0.0.1:6660> config set maxmemory 20971520 # 上述命令重启redis后该配置会丢失,可以执行如下命令重写配置文件 127.0.0.1:6660> config rewrite
Redis集群
一旦涉及到一台物理机无法存储的情况就需要考虑使用分片机制将数据存储到多台服务器,可以说是Redis集群。
利用 Twemproxy 实现分片、减少连接数、Hash Tag 分片逻辑。
Twemproxy 代理
-
Twemproxy 配置
# 配置文件 vim /usr/servers/twemproxy-0.4.0/conf/nutcracker.yml
server1: listen: 127.0.0.1:1111 ## 监听地址和端口 hash: fnv1a_64 ## 散列算法 distribution: ketama ## 分片的算法,有ketama(一致性hash)、module(取模)、random(随机)三种算法 # auto_eject_hosts: true ## 是否在节点无法响应时自动从服务器列表中剔除,重新响应时自动加入服务器列表中 # timeout: 1000 hash_tag: "::" redis: true ## 后端代理的是否为redis servers: - 127.0.0.1:6660:1 server1 - 127.0.0.1:6661:1 server2
-
Twemproxy 启动
/usr/servers/twemproxy-0.4.0/src/nutcracker -d -c /usr/servers/twemproxy-0.4.0/conf/nutcracker.yml ps -aux | grep nutcracker # 启动 Redis 客户端对应端口,查看是否代理成功 /usr/servers/redis-2.8.19/src/redis-cli -p 1111
或者配置启动/重启/停止脚本方便操作
chmod +x /usr/servers/twemproxy-0.4.0/scripts/nutcracker.init vim /usr/servers/twemproxy-0.4.0/scripts/nutcracker.init
-
将OPTIONS改为 OPTIONS="-d -c /usr/local/twemproxy/conf/nutcracker.yml"
-
注释掉. /etc/rc.d/init.d/functions;
-
将daemon --user ${USER} ${prog} $OPTIONS改为${prog} $OPTIONS;
[报错]:若nutcracker没设置为全局变量,则会报此错
nutcracker: command not found
写了全路径:/usr/servers/twemproxy-0.4.0/src/${prog} $OPTIONS
-
将killproc改为killall。
这样就可以使用如下脚本进行启动、重启、停止了。
nutcracker.init {start|stop|status|restart|reload|condrestart}
-