( 后续所用redis版本均为 redis 5.0.8 ) Redis 特性 速度快:所有数据都放在内存中,使用C语言实现, 使用单线程架构 多种数据结构:它有string hash list set zset geo 等多种数据结构。 多功能丰富:提供了键过期功能,可以实现缓存。 简单稳定:源码少,3.0以后,代码5万行左右,单线程,使得redis服务器处理模型变得简单,不依赖系统中的类库 支持的客户端语言多:java php python c c++ Nodejs 数据持久化 主从复制 高可用和分布式 ================================== Redis 应用场景: 1、缓存 --------- 键过期时间 缓存 session 会话,优惠券过期 缓存用户信息,找不到再去mysql 查,查到然后回写到redis 2、排行榜 ------- 列表 & 有序集合 热度排名排行榜 发布时间排行榜 3、计数器应用----- 天然计数器 帖子浏览数,视频播放数,评论留言数,商品浏览数 4、社交网络 ----- 集合 兴趣爱好,广告投放,粉丝,共同好友,推送,打标签 5、消息队列系统------发布订阅 配合 elk 实现日志收集 Redis 安装 目录规划: redis:下载目录 /data/soft 安装目:/usr/local/redis_cluster/redis_{port}/{conf,logs,pid} 数据目录:/data/redis_cluster/redis_{port}/redis_{port}.rdb ##持久化文件 运维脚本:/root/scripts/redis_shell.sh mkdir -p /data/soft mkdir -p /usr/local/redis_cluster/redis_6379/{conf,logs,pid} mkdir -p /data/redis_cluster/redis_6379 cd /data/soft/ wget http://download.redis.io/releases/redis-5.0.8.tar.gz tar zxf redis-5.0.8.tar.gz -C /usr/local/redis_cluster/ cd /usr/local/redis_cluster/ ln -s redis-5.0.8 redis cd redis ##已经预编译了,直接make make install make ## 编译并生成二进制命令 make install ## 把 生成的命令复制到/usr/local/bin下面![]()
Redis 配置文件: cd /usr/local/redis_cluster/redis/utils ./install_server.sh ##这个脚本,可以生成配置文件,官方最全的配置文件 简易redis配置文件: cd /usr/local/redis_cluster/redis_6379/conf vim redis_6379.conf # 以守护进程模式启动 daemonize yes # 绑定的主机地址 bind 192.168.189.14 # 监听端口 port 6379 # pid 文件和log文件的保存地址 pidfile /usr/local/redis_cluster/redis_6379/pid/redis_6379.pid logfile /usr/local/redis_cluster/redis_6379/logs/redis_6379.log # 设置数据库的数量,默认数据库为0 databases 16 # 指定本地持久化文件的文件名,默认是dump.rdb dbfilename redis_6379.rdb # 本地数据库的目录 dir /data/redis_cluster/redis_6379 启动redis redis-server /usr/local/redis_cluster/redis_6379/conf/redis_6379.conf 登录命令界面: redis-cli 关闭redis-server redis-cli -h 192.168.189.14 shutdown 也可以登录命令界面:直接输入 shutdown 查看日志: vim /usr/local/redis_cluster/redis_6379/logs/redis_6379.log 有三个警告: 警告1:
解决办法:echo 1024 > /proc/sys/net/core/somaxconn 警告2:
echo 1 > /proc/sys/vm/overcommit_memory 或者 echo "vm.overcommit_memory=1" > /etc/sysctl.conf sysctl -p +++++++++以上两个警告,也可以直接修改/etc/sysctl.conf文件,在文件末尾加入以下两句: #redis 服务器的内核参数调整: echo "net.core.somaxconn= 1024" >>/etc/sysctl.conf echo "vm.overcommit_memory=1" >>/etc/sysctl.conf sysctl -p ================================ overcommit_memory参数说明: 设置内存分配策略(可选,根据服务器的实际情况进行设置) /proc/sys/vm/overcommit_memory 可选值:0、1、2。 0,表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。 1,表示内核允许分配所有的物理内存,而不管当前的内存状态如何。 2,表示内核允许分配超过所有物理内存和交换空间总和的内存 注意:redis在dump数据的时候,会fork出一个子进程,理论上child进程所占用的内存和parent是一样的,比如parent占用 的内存为8G,这个时候也要同样分配8G的内存给child,如果内存无法负担,往往会造成redis服务器的down机或者IO负载过高,效率下降。所 以这里比较优化的内存分配策略应该设置为 1(表示内核允许分配所有的物理内存,而不管当前的内存状态如何)。 =============================== +++++++++++++++++++++++++++++++++++ 警告3:
意思是:你使用的是透明大页(THP),可能导致redis延迟和内存使用问题。redis建议我们关闭THP,以免造成相关问题,并且给出了相应的解决方案 临时解决:root用户执行echo never > /sys/kernel/mm/transparent_hugepage/enabled 永久解决:将上面这句话写入到 /etc/rc.local文件中。 将其写入/etc/rc.local文件中: vim /etc/rc.local if test -f /sys/kernel/mm/redhat_transparent_hugepage/enabled; then echo never > /sys/kernel/mm/redhat_transparent_hugepage/enabled fi chmod +x /etc/rc.d/rc.local 修改完成后要重启redis。 redis-cli -h 192.168.189.14 shutdown redis-server /usr/local/redis_cluster/redis_6379/conf/redis_6379.conf