首页 > 数据库 >Redis急速说明

Redis急速说明

时间:2023-09-16 21:25:11浏览次数:36  
标签:slave Redis redis 说明 急速 master usr sentinel local

Redis 急速部署

前言:

需求的出现

在Web应用发展的初期,那时关系型数据库受到了较为广泛的关注和应用,原因是因为那时候Web站点基本上访问和并发不高、交互也较少。而在后来,随着访问量的提升,使用关系型数据库的Web站点多多少少都开始在性能上出现了一些瓶颈,而瓶颈的源头一般是在磁盘的I/O上。而随着互联网技术的进一步发展,各种类型的应用层出不穷,这导致在当今云计算、大数据盛行的时代,对性能有了更多的需求,主要体现在以下四个方面:

  1. 低延迟的读写速度:应用快速地反应能极大地提升用户的满意度
  2. 支撑海量的数据和流量:对于搜索这样大型应用而言,需要利用PB级别的数据和能应对百万级的流量
  3. 大规模集群的管理:系统管理员希望分布式应用能更简单的部署和管理
  4. 庞大运营成本的考量:IT部门希望在硬件成本、软件成本和人力成本能够有大幅度地降低

为了克服这一问题,NoSQL应运而生,它同时具备了高性能、可扩展性强、高可用等优点,受到广泛开发人员和仓库管理人员的青睐。

Redis是个啥

Redis是现在最受欢迎的NoSQL数据库之一,Redis是一个使用ANSI C编写的开源、包含多种数据结构、支持网络、基于内存、可选持久性的键值对存储数据库,其具备如下特性:

  • 基于内存运行,性能高效
  • 支持分布式,理论上可以无限扩展
  • key-value存储系统
  • 开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API

相比于其他数据库类型,Redis具备的特点是:

  • C/S通讯模型
  • 单进程单线程模型
  • 丰富的数据类型
  • 操作具有原子性
  • 持久化
  • 高并发读写
  • 支持lua脚本

应用场景?

Redis 的应用场景包括:缓存系统(“热点”数据:高频读、低频写)、计数器、消息队列系统、排行榜、社交网络和实时系统。

示范环境

centos 7


X.调优

cat >>/etc/security/limits.conf <<EOF
* - nofile 10240
EOF

cat >>/etc/sysctl.conf <<EOF
net.core.somaxconn = 10240
vm.overcommit_memory = 1
EOF

sysctl -p

echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag



if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
   echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
   echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi

A.下载&& 编译

mkdir /opt/source_package && cd /opt/source_package 
wget https://github.com/redis/redis/archive/7.0.11.tar.gz && tar -zxvf redis*.tar.gz
cd  redis-7.0.11 && make

B.拷贝二进制文件与config文件

mkdir -p /usr/local/redis/{config,bin,logs,run}
mkdir  -p  /data/redis-6379/
cp src/redis-* /usr/local/redis/bin/
rm -f  /usr/local/redis/bin/*.c  /usr/local/redis/bin/*.o
cp redis.conf /usr/local/redis/config/

C.版本检查

/usr/local/redis/bin/redis-server --version
/usr/local/redis/bin/redis-cli --version
ln -s /usr/local/redis/bin/redis-cli /usr/local/bin/ 
ln -s /usr/local/redis/bin/redis-server /usr/local/bin/
ln -s /usr/local/redis/bin/redis-sentinel /usr/local/bin/
redis-cli --version

D.配置设定

mkdir   /usr/local/redis/config/bak
cp /usr/local/redis/config/*.conf    /usr/local/redis/config/bak

cat  >/usr/local/redis/config/redis.conf <<EOF
protected-mode no
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize yes
pidfile /usr/local/redis/run/redis_6379.pid
loglevel notice
logfile "/usr/local/redis/logs/6379.log"
databases 16
always-show-logo no
set-proc-title yes
proc-title-template "{title} {listen-addr} {server-mode}"
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
rdb-del-sync-files no
dir   /data/redis-6379/
replica-serve-stale-data yes
replica-read-only yes
repl-diskless-sync yes
repl-diskless-sync-delay 5
repl-diskless-sync-max-replicas 0
repl-diskless-load disabled
repl-disable-tcp-nodelay no
replica-priority 100
acllog-max-len 128
requirepass  UvENxDe5MwjC5hTeYoJqKPfEstbcro5e
maxmemory 3071000000
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no
lazyfree-lazy-user-del no
lazyfree-lazy-user-flush no
oom-score-adj no
oom-score-adj-values 0 200 800
disable-thp yes
appendonly no
appendfilename "appendonly.aof"
appenddirname "appendonlydir"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble yes
aof-timestamp-enabled no
 
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-listpack-entries 512
hash-max-listpack-value 64
list-max-listpack-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-listpack-entries 128
zset-max-listpack-value 64
hll-sparse-max-bytes 3000
stream-node-max-bytes 4096
stream-node-max-entries 100
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
dynamic-hz yes
aof-rewrite-incremental-fsync yes
rdb-save-incremental-fsync yes
jemalloc-bg-thread yes
EOF

E.启动脚本

#!/bin/bash

start(){
cd /usr/local/redis/bin
./redis-server  ../config/redis.conf 
pid=`ss -anplt| awk -F ',' '/redis/{print $2}'|egrep -o '[0-9]{4}' |uniq`
[[ -n `ss -anplt | grep redis`  ]] && echo -e "redis  start suceefully\npid is $pid";
[[ -z `ss -anplt | grep redis`  ]] && echo "redis  start failed"
}

stop(){
pid=`ss -anplt| awk -F ',' '/redis/{print $2}'|egrep -o '[0-9]{4}' |uniq`
kill -9 $pid 1>&2  2>/dev/null
[[ -z `ss -anplt | grep redis`  ]] && echo "redis is  stoped"
}

restart(){
stop
start
}



if [[ $1 == "start" ]];then
	if [[ -n  `ss -anplt| awk -F ',' '/redis/{print $2}'|egrep -o '[0-9]{4}' |uniq` ]];then
		echo "redis 6379 was exist";exit
	else
		start
	fi
elif [[ $1 == "stop" ]];then
	stop
elif [[ $1 == "restart" ]];then
	restart
else
     echo "Usage : redis [start|stop|restart] "
fi

F.哨兵模式

f1-架构预览

概述

监控(Monitoring): Sentinel 会不断地检查你的主服务器和从服务器是否运作正常。
提醒(Notification): 当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过API向管理员或者其他应用程序发送通知。
自动故障迁移(Automatic failover): 当一个主服务器不能正常工作时,Sentinel会开始一次自动故障转移操作, 它会将失效主服务器的其中一个从服务器升级为新的主服务器, 并让失效主服务器的其他从服务器改为复制新的主服务器。

当客户端试图连接失效的主服务器时, 集群也会向客户端返回新主服务器的地址,使得集群可以使用新主服务器代替失效服务器。

image

F 大节的演示将以图例的架构、部署3个节点/实例的集群

sentinel 集群是至少三个节点的。

192.168.8.82:6379 Master
192.168.8.82:6380 Slave
192.168.8.82:6381 Slave

f2.redis 单、多节点的实例准备

f2-0.单节点部署

多开很简单,可以用redis-server指定不同的配置文件来启动多个实例,实现应用多开。

cd /usr/local/redis/bin &&   ./redis-server  ../config/redis-6379.conf
cd /usr/local/redis/bin &&   ./redis-server  ../config/redis-6380.conf
cd /usr/local/redis/bin &&   ./redis-server  ../config/redis-6381.conf
···

也可以直接拷贝多份redis,修改配置文件后分别启动

cp -rfp  /usr/local/redis/   /usr/local/redis-6380
cp -rfp  /usr/local/redis/   /usr/local/redis-6381

vim  /usr/local/redis-6380/config/redis.conf 		# 修改pid 路径、修改log路径、修改data路径、修改端口、master的认证密码
vim  /usr/local/redis-6381/config/redis.conf		# 修改pid 路径、修改log路径、修改data路径、修改端口、master的认证密码
f2-1.多节点部署

不同节点部署、把正常运行的redis目录整个拷贝到对端、并修改配置文件即可

如果对端是不同架构的操作系统、则重复 X 、A、B、C、D、E 节的操作即可

f3.配置准备

# 单节点执行
cd /usr/local 
cp -rfp  redis/ 		   redis-6379
cp -rfp  redis-6379/  redis-6380
cp -rfp  redis-6379/  redis-6381

# 多节点执行
scp -r  /usr/local/redis/ 		node_host@USER:/usr/local/

note:

master端做好requirepass 即可,其余不怎么需要更改、注意bind地址和端口就可以;slave端需要将requirepass 改成masterauth、增加slaveof项

# slave配置文件修改:  pid 路径、修改log路径、修改data路径、修改端口、protected 关闭、bind 地址、cluster enable  、slaveof
vim   /usr/local/redis-6380/config/redis.conf 	
vim   /usr/local/redis-6381/config/redis.conf 	

#主要修改项: 
daemonize yes
protected-mode no 
pid
logs
dir
port xxxx
bind xxx.xxx.xxx.xxx
slaveof   master_ip  master_port					# slave 独有配置
masterauth  xxxxxxxxxxxxxxxxxxxxxxxxxxx		# slave 独有配置、slave 不需要require密码

f4.cluster 启动

启动实例

命令:redis-server /实例配置文件路径/redis.conf

# 单节点启动命令
# 逐次启动全部实例、如果是多节点部署,则分别检查各节点的实例端口。
cd /usr/local/redis-6379/bin   &&  ./redis-server ../config/redis.conf   
cd /usr/local/redis-6380/bin    && ./redis-server ../config/redis.conf  
cd /usr/local/redis-6381/bin    && ./redis-server ../config/redis.conf  

# 多节点则逐个登入执行启动命令、
cd  /usr/local/redis/bin    &&  ./redis-server ../config/redis.conf  

# 检查redis端口
# ss -anplt| grep redis
LISTEN     0      511          *:6379                     *:*                   users:(("redis-server",pid=11394,fd=6))
LISTEN     0      511          *:6381                     *:*                   users:(("redis-server",pid=12303,fd=6))
LISTEN     0      511          *:6380                     *:*                   users:(("redis-server",pid=12270,fd=6))
LISTEN     0      511       [::]:6379                  [::]:*                   users:(("redis-server",pid=11394,fd=7))
LISTEN     0      511       [::]:6381                  [::]:*                   users:(("redis-server",pid=12303,fd=7))
LISTEN     0      511       [::]:6380                  [::]:*                   users:(("redis-server",pid=12270,fd=7))

验证master检查集群状态

命令:redis-cli -h master_地址 -p master_端口 -a 认证密码

命令:INFO replication

redis-cli -h  192.168.8.82  -p 6379 -a UvENxDe5MwjC5hTeYoJqKPfEstbcro5e
192.168.8.82:6379> INFO replication

# Replication
role:master
connected_slaves:2
slave0:ip=192.168.8.82,port=6380,state=online,offset=238,lag=0
slave1:ip=192.168.8.82,port=6381,state=online,offset=238,lag=1
master_failover_state:no-failover
master_replid:31c52d075d24425cf1259d6d36a583f74344df5f
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:238
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:238

# state 全部online 说明集群已配置完毕!

f5.sentinel 部署

f5-1.配置文件编写

note: 配置大致是一样的、先配置好一个,然后分发给其它节点上做微调,单点多实例的配置注意区别端口!

mkdir /data/{redis-26379,redis-26380,redis-26381}
cat >> /usr/local/redis-6379/config/sentinel.conf <<EOF
# 访问控制关闭
protected-mode no
port 26379
daemonize yes
pidfile /usr/local/redis-6379/run/redis-sentinel.pid
dir /data/redis-26379
logfile /usr/local/redis-6379/logs/redis-sentinel.log

# 哨兵监控的master节点,后⾯面这个2是指⼏几个哨兵发现master宕机了了,才进⾏行行故障转移 
# mymaster 是自己起的master名字
sentinel monitor mymaster 192.168.8.82 6379 2

# 设置主机访问密码,和
sentinel auth-pass mymaster UvENxDe5MwjC5hTeYoJqKPfEstbcro5e

# 哨兵多久连接不不上master就认为master宕机了了的时间,单位是毫秒,默认30秒
sentinel down-after-milliseconds mymaster 3000

# 新的master出现后,其他follow的slave并⾏同步的个数,并⾏的越多同时阻塞的就越多,设置1来保证每次只有一个slave 处于不能处理命令请求的状态
sentinel parallel-syncs mymaster 1

EOF
f5-2.哨兵、启动!

命令:redis-sentinel /配置文件路径/sentinel.conf

启动全部实例:
cd /usr/local/redis-6379/bin  &&  redis-sentinel ../config/sentinel.conf   
cd /usr/local/redis-6380/bin  &&  redis-sentinel ../config/sentinel.conf   
cd /usr/local/redis-6381/bin  &&  redis-sentinel ../config/sentinel.conf   

[root@redis bin]# ss -anplt|grep 263
LISTEN     0      511          *:26379                    *:*                   users:(("redis-sentinel",pid=17832,fd=6))
LISTEN     0      511          *:26381                    *:*                   users:(("redis-sentinel",pid=17937,fd=6))
LISTEN     0      511          *:26380                    *:*                   users:(("redis-sentinel",pid=17911,fd=6))
LISTEN     0      511       [::]:26379                 [::]:*                   users:(("redis-sentinel",pid=17832,fd=7))
LISTEN     0      511       [::]:26381                 [::]:*                   users:(("redis-sentinel",pid=17937,fd=7))
LISTEN     0      511       [::]:26380                 [::]:*                   users:(("redis-sentinel",pid=17911,fd=7))
f5-3.sentinel 集群检查

命令:redis-cli -h master_地址 -p master_端口

redis-cli -h 192.168.8.82 -p 26379 


# 检查master 
sentinel master mymaster

# 检查slaves
sentinel slavers mymaster

# 检查sentinels
sentinel sentinels mymaster

G.常用命令

PING - 这个命令简单的返回 PONE。
SENTINEL masters - 展示监控的 master 清单和它们的状态。
SENTINEL master [master name] - 展示指定 master 的状态和信息。
SENTINEL slaves [master name] - 展示 master 的 slave 清单和它们的状态。
SENTINEL sentinels [master name] - 展示 master 的 sentinel 实例的清单和它们的状态。
SENTINEL get-master-addr-by-name [master name] - 返回 master 的 IP 和端口。如果故障转移在处理中或成功终止,返回晋升的 slave 的 IP 和端口。
SENTINEL reset [pattern] - 这个命令将重置所有匹配名字的 masters。参数是 blog 风格的。重置的过程清空 master 的所有状态,并移除已经发现和关联 master 的所有 slave 和 sentinel。
SENTINEL failover [master name] - 如果 master 不可到达,强制执行一个故障转移,而不征求其他 Sentinel 的同意。
SENTINEL ckquorum [master name] - 检查当前的 Sentinel 配置是否能够到达故障转移需要的法定人数,并且需要授权故障转移的多数。这个命令应该用于监控系统检查部署是否正确。
SENTINEL flushconfig - 强制 Sentinel 在磁盘上重写它的配置,包括当前的 Sentinel 状态。通常 Sentinel 每次重写配置改变它的状态。然而有时由于操作错误、硬盘故障、包升级脚本或配置管理器可能导致配置文件丢失。在这种情况下收到强制 Sentinel 重写配置文件。这个命令即使上面的配置文件完全不见了。

Z.附录

z1.redis配置详解

z1-0.NETWORK
###################################  NETWORK ###################################
 
# 指定 redis 只接收来自于该IP地址的请求,如果不进行设置,那么将处理所有请求
bind 127.0.0.1
 
#是否开启保护模式,默认开启。要是配置里没有指定bind和密码。#开启该参数后,redis只会本地进行访问,拒绝外部访问。要是开启了密码和bind,可以开启。否则最好关闭,设置为no
protected-mode yes
 
#redis监听的端口号
port 6379
 
#此参数确定了TCP连接中已完成队列(完成三次握手之后)的长度, 当然此值必须不大于Linux系统定义的/proc/sys/net/core/somaxconn值,默认是511,而Linux的默认参数值是128。#当系统并发量大并且客户端速度缓慢的时候,可以将这二个参数一起参考设定。该内核参数默认值一般是128,对于负载很大的服务程序来说大大的不够。一般会将它修改为2048或者更大。#在/etc/sysctl.conf中添加:net.core.somaxconn = 2048,然后在终端中执行sysctl -p
tcp-backlog 511
 
#此参数为设置客户端空闲超过timeout,服务端会断开连接,为0则服务端不会主动断开连接,不能小于0
timeout 0
 
#tcp keepalive参数。如果设置不为0,就使用配置tcp的SO_KEEPALIVE值,使用keepalive有两个好处:检测挂掉的对端。降低中间设备出问题而导致网络看似连接却已经与对端端口的问题。在Linux内核中,设置了keepalive,redis会定时给对端发送ack。#检测到对端关闭需要两倍的设置值
tcp-keepalive 300
 
#是否在后台执行,yes:后台运行;no:不是后台运行
daemonize yes
 
#redis的进程文件
pidfile /var/run/redis/redis.pid
 
#指定了服务端日志的级别。级别包括:debug(很多信息,方便开发、测试),verbose(许多有用的信息,但是没有debug级别信息多),notice(适当的日志级别,适合生产环境),warn(只有非常重要的信息)
loglevel notice
 
#指定了记录日志的文件。空字符串的话,日志会打印到标准输出设备。后台运行的redis标准输出是/dev/null
logfile /usr/local/redis/var/redis.log
 
 
#是否打开记录syslog功能
# syslog-enabled no
 
#syslog的标识符。
# syslog-ident redis
 
#日志的来源、设备
# syslog-facility local0
 
#数据库的数量,默认使用的数据库是0。可以通过”SELECT 【数据库序号】“命令选择一个数据库,序号从0开始
databases 16
z1-1.SNAPSHOTTING
###################################  SNAPSHOTTING  ###################################
 
#RDB核心规则配置 save <指定时间间隔> <执行指定次数更新操作>,满足条件就将内存中的数据同步到硬盘中。#官方出厂配置默认是 900秒内有1个更改,300秒内有10个更改以及60秒内有10000个更改,则将内存中的数据快照写入磁盘。
#若不想用RDB方案,可以把 save "" 的注释打开,下面三个注释
save 900 1
save 300 10
save 60 10000
 
#当RDB持久化出现错误后,是否依然进行继续进行工作,yes:不能进行工作,no:可以继续进行工作,可以通过info中的rdb_last_bgsave_status了解RDB持久化是否有错误
stop-writes-on-bgsave-error yes
 
#配置存储至本地数据库时是否压缩数据,默认为yes。Redis采用LZF压缩方式,但占用了一点CPU的时间。#若关闭该选项,但会导致数据库文件变的巨大。建议开启。
rdbcompression yes
 
#是否校验rdb文件;从rdb格式的第五个版本开始,在rdb文件的末尾会带上CRC64的校验和。#这跟有利于文件的容错性,但是在保存rdb文件的时候,会有大概10%的性能损耗,所以如果你追求高性能,可以关闭该配置
rdbchecksum yes
 
#指定本地数据库文件名,一般采用默认的 dump.rdb
dbfilename dump.rdb
 
#数据目录,数据库的写入会在这个目录。rdb、aof文件也会写在这个目录
dir /usr/local/redis/var
z1-2.REPLICATION
################################# REPLICATION #################################
 
# 复制选项,slave复制对应的master。
# replicaof <masterip> <masterport>
 
#如果master设置了requirepass,那么slave要连上master,需要有master的密码才行。
#masterauth就是用来配置master的密码,这样可以在连上master后进行认证。
# masterauth <master-password>
 
#当从库同主机失去连接或者复制正在进行,从机库有两种运行方式:
#1) 如果slave-serve-stale-data设置为yes(默认设置),从库会继续响应客户端的请求。
#2) 如果slave-serve-stale-data设置为no,INFO,replicaOF, AUTH, PING, SHUTDOWN, REPLCONF, ROLE, CONFIG,SUBSCRIBE, UNSUBSCRIBE,
#PSUBSCRIBE, PUNSUBSCRIBE, PUBLISH, PUBSUB,COMMAND, POST, HOST: and LATENCY命令之外的任何请求都会返回一个错误”SYNC with master in progress”。
replica-serve-stale-data yes
 
#作为从服务器,默认情况下是只读的(yes),可以修改成NO,用于写(不建议)
#replica-read-only yes
 
# 是否使用socket方式复制数据。目前redis复制提供两种方式,disk和socket。
#如果新的slave连上来或者重连的slave无法部分同步,就会执行全量同步,master会生成rdb文件。
#有2种方式:
#disk方式是master创建一个新的进程把rdb文件保存到磁盘,再把磁盘上的rdb文件传递给slave。disk方式的时候,当一个rdb保存的过程中,多个slave都能共享这个rdb文件。
#socket是master创建一个新的进程,直接把rdb文件以socket的方式发给slave。socket的方式就的一个个slave顺序复制。
#在磁盘速度缓慢,网速快的情况下推荐用socket方式。
repl-diskless-sync no 
#diskless复制的延迟时间,防止设置为0。一旦复制开始,节点不会再接收新slave的复制请求直到下一个rdb传输。
所以最好等待一段时间,等更多的slave连上来
repl-diskless-sync-delay 5
 
#slave根据指定的时间间隔向服务器发送ping请求。时间间隔可以通过 repl_ping_slave_period 来设置,默认10秒。
# repl-ping-slave-period 10
 
# 复制连接超时时间。master和slave都有超时时间的设置。#master检测到slave上次发送的时间超过repl-timeout,即认为slave离线,清除该slave信息。#slave检测到上次和master交互的时间超过repl-timeout,则认为master离线。#需要注意的是repl-timeout需要设置一个比repl-ping-slave-period更大的值,不然会经常检测到超时
# repl-timeout 60
 
#是否禁止复制tcp链接的tcp nodelay参数,可传递yes或者no。默认是no,即使用tcp nodelay。#如果master设置了yes来禁止tcp nodelay设置,在把数据复制给slave的时候,会减少包的数量和更小的网络带宽。#但是这也可能带来数据的延迟。默认我们推荐更小的延迟,但是在数据量传输很大的场景下,建议选择yes
repl-disable-tcp-nodelay no
 
#复制缓冲区大小,这是一个环形复制缓冲区,用来保存最新复制的命令。#这样在slave离线的时候,不需要完全复制master的数据,如果可以执行部分同步,只需要把缓冲区的部分数据复制给slave,就能恢复正常复制状态。#缓冲区的大小越大,slave离线的时间可以更长,复制缓冲区只有在有slave连接的时候才分配内存。#没有slave的一段时间,内存会被释放出来,默认1m
# repl-backlog-size 1mb
 
# master没有slave一段时间会释放复制缓冲区的内存,repl-backlog-ttl用来设置该时间长度。单位为秒。
# repl-backlog-ttl 3600
 
# 当master不可用,Sentinel会根据slave的优先级选举一个master。#最低的优先级的slave,当选master。而配置成0,永远不会被选举
replica-priority 100
 
#redis提供了可以让master停止写入的方式,如果配置了min-replicas-to-write,健康的slave的个数小于N,mater就禁止写入。#master最少得有多少个健康的slave存活才能执行写命令。#这个配置虽然不能保证N个slave都一定能接收到master的写操作,但是能避免没有足够健康的slave的时候,master不能写入来避免数据丢失。#设置为0是关闭该功能
# min-replicas-to-write 3
 
# 延迟小于min-replicas-max-lag秒的slave才认为是健康的slave
# min-replicas-max-lag 10
 
# min-replicas-max-lag 设置1或设置0禁用这个特性。
# Setting one or the other to 0 disables the feature.
# By default min-replicas-to-write is set to 0 (feature disabled) and
# min-replicas-max-lag is set to 10.
z1-3.SECURITY
 #requirepass配置可以让用户使用AUTH命令来认证密码,才能使用其他命令。#这让redis可以使用在不受信任的网络中。为了保持向后的兼容性,可以注释该命令,因为大部分用户也不需要认证。#使用requirepass的时候需要注意,因为redis太快了,每秒可以认证15w次密码,简单的密码很容易被攻破,所以最好使用一个更复杂的密码
# requirepass foobared
#把危险的命令给修改成其他名称。比如CONFIG命令可以重命名为一个很难被猜到的命令,这样用户不能使用,而内部工具还能接着使用
# rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52
#设置成一个空的值,可以禁止一个命令
# rename-command CONFIG ""
z1-4.CLIENTS
# 设置能连上redis的最大客户端连接数量。默认是10000个客户端连接。
# 由于redis不区分连接是客户端连接还是内部打开文件或者和slave连接等,所以maxclients最小建议设置到32。
# 如果超过了maxclients,redis会给新的连接发送’max number of clients reached’,并关闭连接
# maxclients 10000

z1-5.MEMORY MANAGEMENT

#设置redis使用内存字节数,当达到内存最大值时,redis会根据选择的逐出策略尝试删除key(详细参阅maxmemory策略)#maxmemory <bytes>
#redis配置的最大内存容量。当内存满了,需要配合maxmemory-policy策略进行处理。#注意slave的输出缓冲区是不计算在maxmemory内的。所以为了防止主机内存使用完,建议设置的maxmemory需要更小一些maxmemory 122000000
#内存容量超过maxmemory后的处理策略。
#volatile-lru:利用LRU算法移除设置过过期时间的key。
#volatile-random:随机移除设置过过期时间的key。
#volatile-ttl:移除即将过期的key,根据最近过期时间来删除(辅以TTL)
#allkeys-lru:利用LRU算法移除任何key。
#allkeys-random:随机移除任何key。
#noeviction:不移除任何key,只是返回一个写错误。
#上面的这些驱逐策略,如果redis没有合适的key驱逐,对于写命令,还是会返回错误。#并且redis将不再接收写请求,只接收get请求。#写命令包括:set setnx setex append incr decr rpush lpush rpushx lpushx linsert lset rpoplpush sadd # sinter sinterstore sunion sunionstore sdiff sdiffstore zadd zincrby zunionstore zinterstore hset # hsetnx hmset hincrby incrby decrby getset mset msetnx exec sort。
# maxmemory-policy noeviction
# lru检测的样本数。使用lru或者ttl淘汰算法,从需要淘汰的列表中随机选择sample个key,选出闲置时间最长的key移除
# maxmemory-samples 5
# 是否开启salve的最大内存
# replica-ignore-maxmemory yes
z1-6.LAZY FREEING
#以非阻塞方式释放内存
#使用以下配置指令调用了
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no
z1-7.APPEND ONLY MODE
#Redis 默认不开启。它的出现是为了弥补RDB的不足(数据的不一致性),所以它采用日志的形式来记录每个写操作,并追加到文件中。#Redis 重启的会根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作默认redis使用的是rdb方式持久化,这种方式在许多应用中已经足够用了。#但是redis如果中途宕机,会导致可能有几分钟的数据丢失,根据save来策略进行持久化,Append Only File是另一种持久化方式,可以提供更好的持久化特性。#Redis会把每次写入的数据在接收后都写入 appendonly.aof 文件,每次启动时Redis都会先把这个文件的数据读入内存里,先忽略RDB文件。#若开启rdb则将no改为yes
appendonly no
 
#指定本地数据库文件名,默认值为 appendonly.aof
appendfilename "appendonly.aof"
 
#aof持久化策略的配置
#no表示不执行fsync,由操作系统保证数据同步到磁盘,速度最快
#always表示每次写入都执行fsync,以保证数据同步到磁盘
#everysec表示每秒执行一次fsync,可能会导致丢失这1s数据
# appendfsync always
appendfsync everysec
# appendfsync no
 
# 在aof重写或者写入rdb文件的时候,会执行大量IO,此时对于everysec和always的aof模式来说,执行fsync会造成阻塞过长时间,no-appendfsync-on-rewrite字段设置为默认设置为no。#如果对延迟要求很高的应用,这个字段可以设置为yes,否则还是设置为no,这样对持久化特性来说这是更安全的选择。#设置为yes表示rewrite期间对新写操作不fsync,暂时存在内存中,等rewrite完成后再写入,默认为no,建议yes。#Linux的默认fsync策略是30秒。可能丢失30秒数据
no-appendfsync-on-rewrite no
 
#aof自动重写配置。当目前aof文件大小超过上一次重写的aof文件大小的百分之多少进行重写,即当aof文件增长到一定大小的时候Redis能够调用bgrewriteaof对日志文件进行重写。#当前AOF文件大小是上次日志重写得到AOF文件大小的二倍(设置为100)时,自动启动新的日志重写过程
auto-aof-rewrite-percentage 100
 
#设置允许重写的最小aof文件大小,避免了达到约定百分比但尺寸仍然很小的情况还要重写
auto-aof-rewrite-min-size 64mb
 
#aof文件可能在尾部是不完整的,当redis启动的时候,aof文件的数据被载入内存。#重启可能发生在redis所在的主机操作系统宕机后,尤其在ext4文件系统没有加上data=ordered选项(redis宕机或者异常终止不会造成尾部不完整现象。)#出现这种现象,可以选择让redis退出,或者导入尽可能多的数据。#如果选择的是yes,当截断的aof文件被导入的时候,会自动发布一个log给客户端然后load。#如果是no,用户必须手动redis-check-aof修复AOF文件才可以
aof-load-truncated yes
 
#加载redis时,可以识别AOF文件以“redis”开头。
#字符串并加载带前缀的RDB文件,然后继续加载AOF尾巴
aof-use-rdb-preamble yes
z1-8.LUA SCRIPTING
# 如果达到最大时间限制(毫秒),redis会记个log,然后返回error。
#当一个脚本超过了最大时限。只有SCRIPT KILL和SHUTDOWN NOSAVE可以用。
#第一个可以杀没有调write命令的东西。要是已经调用了write,只能用第二个命令杀
lua-time-limit 5000
z1-9.REDIS CLUSTER
# 集群开关,默认是不开启集群模式
# cluster-enabled yes
 
#集群配置文件的名称,每个节点都有一个集群相关的配置文件,持久化保存集群的信息。#这个文件并不需要手动配置,这个配置文件有Redis生成并更新,每个Redis集群节点需要一个单独的配置文件,请确保与实例运行的系统中配置文件名称不冲突
# cluster-config-file nodes-6379.conf
 
#节点互连超时的阀值。集群节点超时毫秒数
# cluster-node-timeout 15000
 
#在进行故障转移的时候,全部slave都会请求申请为master,但是有些slave可能与master断开连接一段时间了,导致数据过于陈旧,这样的slave不应该被提升为master。#该参数就是用来判断slave节点与master断线的时间是否过长。判断方法是:
#比较slave断开连接的时间和(node-timeout * slave-validity-factor) + repl-ping-slave-period
#如果节点超时时间为三十秒, 并且slave-validity-factor为10,假设默认的repl-ping-slave-period是10秒,即如果超过310秒slave将不会尝试进行故障转移
# cluster-replica-validity-factor 10
 
# master的slave数量大于该值,slave才能迁移到其他孤立master上,如这个参数若被设为2,那么只有当一个主节点拥有2 个可工作的从节点时,它的一个从节点会尝试迁移
# cluster-migration-barrier 1
 
#默认情况下,集群全部的slot有节点负责,集群状态才为ok,才能提供服务。#设置为no,可以在slot没有全部分配的时候提供服务。#不建议打开该配置,这样会造成分区的时候,小分区的master一直在接受写请求,而造成很长时间数据不一致
# cluster-require-full-coverage yes
z1-10.CLUSTER DOCKER/NAT support
#*群集公告IP
#*群集公告端口
#*群集公告总线端口
# Example:
# cluster-announce-ip 10.1.1.5
# cluster-announce-port 6379
# cluster-announce-bus-port 6380
z1-11.SLOW LOG
# slog log是用来记录redis运行中执行比较慢的命令耗时。
#当命令的执行超过了指定时间,就记录在slow log中,slog log保存在内存中,所以没有IO操作。
#执行时间比slowlog-log-slower-than大的请求记录到slowlog里面,单位是微秒,所以1000000就是1秒。
#注意,负数时间会禁用慢查询日志,而0则会强制记录所有命令。
slowlog-log-slower-than 10000
 
#慢查询日志长度。当一个新的命令被写进日志的时候,最老的那个记录会被删掉。
#这个长度没有限制。只要有足够的内存就行。
#你可以通过 SLOWLOG RESET 来释放内存
slowlog-max-len 128

z1-12.LATENCY MONITOR
#延迟监控功能是用来监控redis中执行比较缓慢的一些操作,用LATENCY打印redis实例在跑命令时的耗时图表。
#只记录大于等于下边设置的值的操作。0的话,就是关闭监视。
#默认延迟监控功能是关闭的,如果你需要打开,也可以通过CONFIG SET命令动态设置
latency-monitor-threshold 0
z1-13.EVENT NOTIFICATION
#键空间通知使得客户端可以通过订阅频道或模式,来接收那些以某种方式改动了 Redis 数据集的事件。因为开启键空间通知功能需要消耗一些 CPU ,所以在默认配置下,该功能处于关闭状态。
#notify-keyspace-events 的参数可以是以下字符的任意组合,它指定了服务器该发送哪些类型的通知:
##K 键空间通知,所有通知以 __keyspace@__ 为前缀
##E 键事件通知,所有通知以 __keyevent@__ 为前缀
##g DEL 、 EXPIRE 、 RENAME 等类型无关的通用命令的通知
##$ 字符串命令的通知
##l 列表命令的通知
##s 集合命令的通知
##h 哈希命令的通知
##z 有序集合命令的通知
##x 过期事件:每当有过期键被删除时发送
##e 驱逐(evict)事件:每当有键因为 maxmemory 政策而被删除时发送
##A 参数 g$lshzxe 的别名
#输入的参数中至少要有一个 K 或者 E,否则的话,不管其余的参数是什么,都不会有任何 通知被分发。详细使用可以参考http://redis.io/topics/notifications
 
notify-keyspace-events ""
z1-14.ADVANCED CONFIG
# 数据量小于等于hash-max-ziplist-entries的用ziplist,大于hash-max-ziplist-entries用hash
hash-max-ziplist-entries 512
 
# value大小小于等于hash-max-ziplist-value的用ziplist,大于hash-max-ziplist-value用hash
hash-max-ziplist-value 64
 
#-5:最大大小:64 KB<--不建议用于正常工作负载
#-4:最大大小:32 KB<--不推荐
#-3:最大大小:16 KB<--可能不推荐
#-2:最大大小:8kb<--良好
#-1:最大大小:4kb<--良好
list-max-ziplist-size -2
 
#0:禁用所有列表压缩
#1:深度1表示“在列表中的1个节点之后才开始压缩,
#从头部或尾部
#所以:【head】->node->node->…->node->【tail】
#[头部],[尾部]将始终未压缩;内部节点将压缩。
#2:[头部]->[下一步]->节点->节点->…->节点->[上一步]->[尾部]
#2这里的意思是:不要压缩头部或头部->下一个或尾部->上一个或尾部,
#但是压缩它们之间的所有节点。
#3:[头部]->[下一步]->[下一步]->节点->节点->…->节点->[上一步]->[上一步]->[尾部]
list-compress-depth 0
 
# 数据量小于等于set-max-intset-entries用iniset,大于set-max-intset-entries用set
set-max-intset-entries 512
 
#数据量小于等于zset-max-ziplist-entries用ziplist,大于zset-max-ziplist-entries用zset
zset-max-ziplist-entries 128
 
#value大小小于等于zset-max-ziplist-value用ziplist,大于zset-max-ziplist-value用zset
zset-max-ziplist-value 64
 
#value大小小于等于hll-sparse-max-bytes使用稀疏数据结构(sparse),大于hll-sparse-max-bytes使用稠密的数据结构(dense)。#一个比16000大的value是几乎没用的,建议的value大概为3000。如果对CPU要求不高,对空间要求较高的,建议设置到10000左右
hll-sparse-max-bytes 3000
 
#宏观节点的最大流/项目的大小。在流数据结构是一个基数
#树节点编码在这项大的多。利用这个配置它是如何可能#大节点配置是单字节和
#最大项目数,这可能包含了在切换到新节点的时候
# appending新的流条目。如果任何以下设置来设置
# ignored极限是零,例如,操作系统,它有可能只是一集通过设置限制最大#纪录到最大字节0和最大输入到所需的值
stream-node-max-bytes 4096
stream-node-max-entries 100
 
#Redis将在每100毫秒时使用1毫秒的CPU时间来对redis的hash表进行重新hash,可以降低内存的使用。#当你的使用场景中,有非常严格的实时性需要,不能够接受Redis时不时的对请求有2毫秒的延迟的话,把这项配置为no。#如果没有这么严格的实时性要求,可以设置为yes,以便能够尽可能快的释放内存
activerehashing yes
 
##对客户端输出缓冲进行限制可以强迫那些不从服务器读取数据的客户端断开连接,用来强制关闭传输缓慢的客户端。
#对于normal client,第一个0表示取消hard limit,#第二个0和第三个0表示取消soft limit,normal client默认取消限制,因为如果没有寻问,他们是不会接收数据的
client-output-buffer-limit normal 0 0 0
 
#对于slave client和MONITER client,如果client-output-buffer一旦超过256mb,又或者超过64mb持续60秒,那么服务器就会立即断开客户端连接
client-output-buffer-limit replica 256mb 64mb 60
 
#对于pubsub client,如果client-output-buffer一旦超过32mb,又或者超过8mb持续60秒,那么服务器就会立即断开客户端连接
client-output-buffer-limit pubsub 32mb 8mb 60
 
# 这是客户端查询的缓存极限值大小
# client-query-buffer-limit 1gb
 
#在redis协议中,批量请求,即表示单个字符串,通常限制为512 MB。但是您可以更改此限制。
# proto-max-bulk-len 512mb
 
#redis执行任务的频率为1s除以hz
hz 10
 
#当启用动态赫兹时,实际配置的赫兹将用作作为基线,但实际配置的赫兹值的倍数
#在连接更多客户端后根据需要使用。这样一个闲置的实例将占用很少的CPU时间,而繁忙的实例将反应更灵敏
dynamic-hz yes
 
#在aof重写的时候,如果打开了aof-rewrite-incremental-fsync开关,系统会每32MB执行一次fsync。#这对于把文件写入磁盘是有帮助的,可以避免过大的延迟峰值
aof-rewrite-incremental-fsync yes
 
#在rdb保存的时候,如果打开了rdb-save-incremental-fsync开关,系统会每32MB执行一次fsync。#这对于把文件写入磁盘是有帮助的,可以避免过大的延迟峰值
rdb-save-incremental-fsync yes

z.1-15 ACTIVE DEFRAGMENTATION

# 已启用活动碎片整理
# activedefrag yes
# 启动活动碎片整理的最小碎片浪费量
# active-defrag-ignore-bytes 100mb
# 启动活动碎片整理的最小碎片百分比
# active-defrag-threshold-lower 10
# 我们使用最大努力的最大碎片百分比
# active-defrag-threshold-upper 100
# 以CPU百分比表示的碎片整理的最小工作量
# active-defrag-cycle-min 5
# 在CPU的百分比最大的努力和碎片整理
# active-defrag-cycle-max 75
#将从中处理的set/hash/zset/list字段的最大数目
#主词典扫描
# active-defrag-max-scan-fields 1000

z2.sentinel配置文件

# Example sentinel.conf

# 哨兵sentinel实例运行的端口 默认26379
port 26379

# 哨兵sentinel的工作目录
dir /tmp

# 哨兵sentinel监控的redis主节点的 ip port
# master-name 可以自己命名的主节点名字 只能由字母A-z、数字0-9 、这三个字符".-_"组成。
# quorum 配置多少个sentinel哨兵统一认为master主节点失联 那么这时客观上认为主节点失联了
# 注意:如果 quorum 给的值过大, 超过主机数量, 可能会导致 master 主机挂掉之后, 没有新的 slave来替代 master
# sentinel monitor <master-name> <ip> <redis-port> <quorum>
sentinel monitor mymaster 127.0.0.1 6379 2

# 当在Redis实例中开启了requirepass foobared 授权密码 这样所有连接Redis实例的客户端都要提供密码
# 设置哨兵sentinel 连接主从的密码 注意必须为主从设置一样的验证密码
# sentinel auth-pass <master-name> <password>
sentinel auth-pass mymaster MySUPER--secret-0123passw0rd

# 指定多少毫秒之后 主节点没有应答哨兵sentinel 此时 哨兵主观上认为主节点下线 默认30秒
# sentinel down-after-milliseconds <master-name> <milliseconds>
sentinel down-after-milliseconds mymaster 30000

# 这个配置项指定了在发生failover主备切换时最多可以有多少个slave同时对新的master进行同步,这个数字越小,完成failover所需的时间就越长,但是如果这个数字越大,就意味着越 多的slave因为replication而不可用。可以通过将这个值设为 1 来保证每次只有一个slave 处于不能处理命令请求的状态。
# sentinel parallel-syncs <master-name> <numslaves>
sentinel parallel-syncs mymaster 1

# 故障转移的超时时间 failover-timeout 可以用在以下这些方面:
#1. 同一个sentinel对同一个master两次failover之间的间隔时间。
#2. 当一个slave从一个错误的master那里同步数据开始计算时间。直到slave被纠正为向正确的master那里同步数据时。
#3.当想要取消一个正在进行的failover所需要的时间。
#4.当进行failover时,配置所有slaves指向新的master所需的最大时间。不过,即使过了这个超时,slaves依然会被正确配置为指向master,但是就不按parallel-syncs所配置的规则来了
# 默认三分钟
# sentinel failover-timeout <master-name> <milliseconds>
sentinel failover-timeout mymaster 180000

# SCRIPTS EXECUTION
# 配置当某一事件发生时所需要执行的脚本,可以通过脚本来通知管理员,例如当系统运行不正常时发邮件通知相关人员。
# 对于脚本的运行结果有以下规则:
# 若脚本执行后返回1,那么该脚本稍后将会被再次执行,重复次数目前默认为10
# 若脚本执行后返回2,或者比2更高的一个返回值,脚本将不会重复执行。
# 如果脚本在执行过程中由于收到系统中断信号被终止了,则同返回值为1时的行为相同。
# 一个脚本的最大执行时间为60s,如果超过这个时间,脚本将会被一个SIGKILL信号终止,之后重新执行。
# 通知型脚本:当sentinel有任何警告级别的事件发生时(比如说redis实例的主观失效和客观失效等等),将会去调用这个脚本,这时这个脚本应该通过邮件,SMS等方式去通知系统管理员关于系统不正常运行的信息。调用该脚本时,将传给脚本两个参数,一个是事件的类型,一个是事件的描述。如果sentinel.conf配置文件中配置了这个脚本路径,那么必须保证这个脚本存在于这个路径,并且是可执行的,否则sentinel无法正常启动成功。
#通知脚本
# sentinel notification-script <master-name> <script-path>
sentinel notification-script mymaster /var/redis/notify.sh

# 客户端重新配置主节点参数脚本
# 当一个master由于failover而发生改变时,这个脚本将会被调用,通知相关的客户端关于master 地址已经发生改变的信息。
# 以下参数将会在调用脚本时传给脚本:
# <master-name> <role> <state> <from-ip> <from-port> <to-ip> <to-port>
# 目前<state>总是“failover”,
# <role>是“leader”或者“observer”中的一个。
# 参数 from-ip, from-port, to-ip, to-port是用来和旧的master和新的master(即旧的slave)通信的
# 这个脚本应该是通用的,能被多次调用,不是针对性的。
# sentinel client-reconfig-script <master-name> <script-path>
sentinel client-reconfig-script mymaster /var/redis/reconfig.sh

z3.常见问题

z3-0.击穿

概念:在Redis获取某一key时, 由于key不存在, 而必须向DB发起一次请求的行为, 称为“Redis击穿”。

原因

第一次访问
恶意访问不存在的key
Key过期

方案

服务器启动时, 提前写入
规范key的命名, 通过中间件拦截
对某些高频访问的Key,设置合理的TTL或永不过期
z3-1.雪崩

概念:Redis缓存层由于某种原因宕机后,所有的请求会涌向存储层,短时间内的高并发请求可能会导致存储层挂机,称之为“Redis雪崩”。

方案

合理的规避方案:

使用Redis集群
限流

标签:slave,Redis,redis,说明,急速,master,usr,sentinel,local
From: https://www.cnblogs.com/hukenis/p/17707323.html

相关文章

  • Shell操作符说明
    Shell操作符说明说明[[]][]、test()、(())=用于赋值、判断==数值比较字符串比较文件比较......
  • 在CentOS上安装Redis-cli工具
    如果你想在CentOS上安装Redis-cli工具,可以按照以下步骤进行操作:1.安装Redis依赖包:在命令行中执行以下命令安装Redis依赖包:```sudoyuminstallgccmake```2.下载Redis源代码包:从Redis官网(https://redis.io/download)下载最新的Redis源代码包。3.解压源代码包:将下载的Redis......
  • SpringBoot + Redis + Token 解决接口幂等性问题
    前言SpringBoot实现接口幂等性的方案有很多,其中最常用的一种就是token+redis方式来实现。下面我就通过一个案例代码,帮大家理解这种实现逻辑。原理前端获取服务端getToken()->前端发起请求->header中带上token->服务端校验前端传来的token和redis中的token是否......
  • 【心得】TP6使用Redis进行处理商城秒杀
    书接上回,上次分享了TP6对于Redis的基础使用,那么今天就为大家带来一个简单的,使用场景很高的心得代码风险,Redis在商城秒杀的使用,该代码为简单分享能解决一些基础后续可以根据自己所需进行业务重构。读这篇文章的我就默认大家已经环境都安装好了,如果不知道怎么安装的可以传送到这里......
  • [粘贴]github-redis-rdb-cli
    redis-rdb-cliAtoolthatcanparse,filter,split,mergerdbandanalyzememoryusageoffline.Itcanalsosync2redisdataandallowuserdefinethereownsinkservicetomigrateredisdatatosomewhere.  ChatwithauthorContracttheauthorchen.b......
  • 【心得】TP6 使用redis基础
    在业务场景中,我们会面对一些对于不经常更改的数据,但是会频繁访问,会对数据库造成不必要的负载,以及对于一些高并发的处理我们都需要用到缓存的技术,目前主流使用的缓存有MemChachedRedis等,当然我们也有TP框架自带的缓存。但是今天我给大家带来的是redis的基础使用。第一步安装red......
  • Redis7 10大数据类型(Redis集合)
    一、常用二、单值多value,且无重复三、案例SADDkeymember[member...]添加元素SMEMBERSkey遍历集合中的所有元素SISMEMBERkeymember判断元素是否在集合中SREMkeymember[member...]删除元素scard获取集合里面的元素个数SRANDMEMBERkey[数字]从集合中随机展现......
  • linux上安装redis保姆级教程
    1、执行下面的命令下载redis:wgethttps://download.redis.io/releases/redis-6.2.6.tar.gz 2、解压tar-zxvfredis-6.2.6.tar.gz 3、安装gccyuminstallgcc-c++makemakeinstall  4、redis默认安装位置:/usr/local/bin配置文件所在目录:安装目录/redis/redis-......
  • 本地搭建的Redis集群中实现配置DB0到DB255
    要在本地搭建的Redis集群中实现配置DB0到DB255,需要执行以下步骤:1.编辑Redis配置文件(redis.conf):使用文本编辑器打开redis.conf文件,找到以下配置项:```#Setthenumberofdatabases.ThedefaultdatabaseisDB0,youcanselect#adifferentoneonaper-connect......
  • redis批量先查缓存再查数据库
    RedisUtil:/***批量查询缓存,若是缓存没有的数据再调用对应的方法查询数据,查询之后放入缓存*@paramprefix缓存前缀*@paramparams缓存参数*@paramcolumn缓存参数对应字段列名*@paramdataBaseFunction数据库查询方法*@return......