1、Redis概述
Ø Redis是一个开源的key-value存储系统。
Ø 和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set –有序集合)和hash(哈希类型)。
Ø 这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。
Ø 在此基础上,Redis支持各种不同方式的排序。
Ø 与memcached一样,为了保证效率,数据都是缓存在内存中。
Ø 区别的是Redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件。
Ø 并且在此基础上实现了master-slave(主从)同步。
1. 使用场景
Ø 高频次,热门访问的数据,降低数据库IO
Ø 分布式架构,做session共享
2、Redis单节点安装
1. 安装C 语言的编译环境
yum install centos-release-scl scl-utils-build -y
yum install -y devtoolset-8-toolchain
# 确保普通用也可以正常使用gcc命令(不要加sudo)
scl enable devtoolset-8 bash
测试
gcc --version
2. 下载redis-6.2.6.tar.gz放/opt目录,并解压
tar -zxvf redis-6.2.6.tar.gz
cd redis-6.2.6
3. 编译
make
如果没有准备好C语言编译环境,make 会报错—Jemalloc/jemalloc.h:没有那个文件
解决方案(清除编译文件):运行
make distclean
再次执行make命令即可
4. 跳过make test
继续执行: make install
make install
# 安装到指定位置将make install 替换为一下(默认位置:/usr/local/bin)
make /data/redis/ install
5. 默认的安装目录/usr/local/bin
查看默认安装目录:
redis-benchmark:性能测试工具,可以在自己本子运行,看看自己本子性能如何
redis-check-aof:修复有问题的AOF文件,rdb和aof后面讲
redis-check-dump:修复有问题的dump.rdb文件
redis-sentinel:Redis集群使用
redis-server:Redis服务器启动命令
redis-cli:客户端,操作入口
6. 前台启动(不推荐)
redis-server
7. 后台启动(推荐)
1)备份redis.conf
mkdir -p /opt/module/reids
cp redis-6.2.6/redis.conf /opt/module/redis/redis.conf
2) 后台启动设置daemonize no改成yes
大概位置257行左右
3)启动:redis-server后加上配置文件位置
redis-server /opt/module/redis/redis.conf
4) 客户端访问:redis-cli
redis-cli
# 多个端口则需要指定端口
redis-cli -p6379
5)验证测试:
ping
返回结果为pong
6)关闭redis
redis-cli shutdown
也可以进入终端后再关闭
127.0.0.1:6379> shutdown
7)多实例关闭:指定端口关闭:
redis-cli -p 6379 shutdown
3、Redis相关知识介绍
1. redis端口来源(6379)
女演员:Alessia Merz (Merz中字母对应9键位置为6379)
2. redis数据库
默认16个数据库,类似数组下标从0开始,初始默认使用0号库 使用命令 select <dbid>
来切换数据库。如: select 8
统一密码管理,所有库同样密码。
- dbsize:查看当前数据库的key的数量
- flushdb:清空当前库
- flushall:通杀全部库
4、Redis配置文件介绍:redis.conf
1. Units单位
文件开头到 ##INCLUDES## 的位置
配置大小单位,开头定义了一些基本的度量单位,只支持bytes,不支持bit
大小写不敏感
2. INCLUDES包含
类似jsp中的include,多实例的情况可以把公用的配置文件提取出来
3. 网络相关配置
NETWORK部分
1)bind
默认情况bind=127.0.0.1只能接受本机的访问请求
不写的情况下,无限制接受任何ip地址的访问
生产环境肯定要写你应用服务器的地址;服务器是需要远程访问的,所以需要将其注释掉
# 保护模式:(默认为保护模式yes,需要远程访问时设置为no)
protected-mode no
如果开启了protected-mode,那么在没有设定bind ip且没有设密码的情况下,Redis只允许接受本机的响应
2)protected-mode
将本机访问保护模式设置no
3)port
端口号,默认 6379
4)tcp-backlog
设置tcp的backlog,backlog其实是一个连接队列,backlog队列总和=未完成三次握手队列 + 已经完成三次握手队列。
在高并发环境下你需要一个高backlog值来避免慢客户端连接问题。
注意Linux内核会将这个值减小到/proc/sys/net/core/somaxconn的值(128),所以需要确认增大/proc/sys/net/core/somaxconn和/proc/sys/net/ipv4/tcp_max_syn_backlog(128)两个值来达到想要的效果
5)timeout
一个空闲的客户端维持多少秒会关闭,0表示关闭该功能。即永不关闭。
6)tcp-keepalive
对访问客户端的一种心跳检测,每个n秒检测一次。
单位为秒,如果设置为0,则不会进行Keepalive检测,建议设置成60
4. GENERAL通用
1)daemonize
是否为后台进程,设置为yes
守护进程,后台启动
2)pidfile
存放pid文件的位置,每个实例会产生一个不同的pid文件
3)loglevel
指定日志记录级别,Redis总共支持四个级别:debug、verbose、notice、warning,默认为notice
四个级别根据使用阶段来选择,生产环境选择notice 或者warning
4)logfile
日志文件名称
5)databases 16
设定库的数量 默认16,默认数据库为0,可以使用SELECT
5. SECURITY安全
1)设置密码
访问密码的查看、设置和取消
在命令中设置密码,只是临时的。重启redis服务器,密码就还原了。
永久设置,需要再配置文件中进行设置。
# 临时设置密码(连接到redis使用redis命令操作)
config set requirepass 123456
# 永久设置,修改redis配置文件的requirepass字段(好像不同版本的设置密码字段参数不同,忘记了)
6. LIMITS限制
1)maxclients
-
设置redis同时可以与多少个客户端进行连接。
-
默认情况下为10000个客户端。
-
如果达到了此限制,redis则会拒绝新的连接请求,并且向这些连接请求方发出“max number of clients reached”以作回应。
2)maxmemory
Ø 建议必须设置,否则,将内存占满,造成服务器宕机
Ø 设置redis可以使用的内存量。一旦到达内存使用上限,redis将会试图移除内部数据,移除规则可以通过maxmemory-policy来指定。
Ø 如果redis无法根据移除规则来移除内存中的数据,或者设置了“不允许移除”,那么redis则会针对那些需要申请内存的指令返回错误信息,比如SET、LPUSH等。
Ø 但是对于无内存申请的指令,仍然会正常响应,比如GET等。如果你的redis是主redis(说明你的redis有从redis),那么在设置内存使用上限时,需要在系统中留出一些内存空间给同步队列缓存,只有在你设置的是“不移除”的情况下,才不用考虑这个因素。
3)maxmemory-policy
Ø volatile-lru:使用LRU算法移除key,只对设置了过期时间的键;(最近最少使用)
Ø allkeys-lru:在所有集合key中,使用LRU算法移除key
Ø volatile-random:在过期集合中移除随机的key,只对设置了过期时间的键
Ø allkeys-random:在所有集合key中,移除随机的key
Ø volatile-ttl:移除那些TTL值最小的key,即那些最近要过期的key
Ø noeviction:不进行移除。针对写操作,只是返回错误信息
4)maxmemory-samples
Ø 设置样本数量,LRU算法和最小TTL算法都并非是精确的算法,而是估算值,所以你可以设置样本的大小,redis默认会检查这么多个key并选择其中LRU的那个。
Ø 一般设置3到7的数字,数值越小样本越不准确,但性能消耗越小。