1.docker pull redis
docker images
http://www.redis.cn/documentation.html #中文官方文档
该命令主要是为了详细展示查看运行时的command参数
docker ps -a --no-trunc | grep container_name # 通过docker --no-trunc参数来详细展示容器运行命令
docker inspect container_name #输出容器信息
docker history container_name #输出镜像构建信息
不加版本号默认获取最新版本,也可以使用 docker search redis 查看镜像来源
从官网获取 redis.conf 配置文件
修改默认配置文件
grep -v "#" redis.conf.bak > /usr/local/docker/redis.conf
vi /usr/local/docker/redis.conf
:g/^s*$/d 删除所有空行
bind 127.0.0.1 #注释掉这部分,这是限制redis只能本地访问
protected-mode no #默认yes,开启保护模式,限制为本地访问
daemonize no#默认no,改为yes意为以守护进程方式启动,可后台运行,除非kill进程(可选),改为yes会使配置文件方式启动redis失败
dir ./ #输入本地redis数据库存放文件夹(可选)
appendonly yes #redis持久化(可选)
requirepass "123456"
正确修改:在官方的原配置按以下修改
#bind 127.0.0.1
protected-mode yes
pidfile=/var/run/redis.pid
daemonize no
dir /usr/local/redis
stop-writes-on-bgsave-error no
appendonly yes
requirepass "123456"
2. docker 启动 redis 命令
docker run -p 6379:6379 --name redis -v /usr/local/docker/redis.conf:/etc/redis/redis.conf -v /usr/local/docker/data:/data -v /etc/localtime:/etc/localtime:ro -d redis redis-server /etc/redis/redis.conf --appendonly yes
redis-cli -h 172.17.0.1 -a 123456
命令解释说明:
3.
1. 存储: set key value
set username zhangsan
get key
get username "zhangsan"
set age 23 get age "23"
set age 33 get age "33"
删除: del key 127.0.0.1:6379> del age (integer) 1 127.0.0.1:6379> get age (nil)
4.redis 常用命令
key * 查看当前库所有key
set k1 lucy 设置一个k1的值
exists k1 判断某个key是否存在
type k1 查看key类型
del key 删除指定的key数据
unlink key 根据value选择非阻塞删除
unlink key 根据value选择非阻塞删除
expire key 10 10秒钟key过期时间
ttl key 查看还有多少秒过期,-1表示永不过期,-2表示已过期
select 命令切换数据库
dbsize 查看当前数据库的key的数量
flushdb 清空当前库
flushall 通杀全部库
get 查询对应键值
append append k1 abc将给定的追加到原值的末尾
strlen strlen k1获得值得长度
setnx 只有在key不存在时 设置key的值
mset k1 v1 k2 v2 k3 v3 同时设置多个key值
mget k1 k2 k3 同时查询多个对应键值
redis源码安装
Redis 客户端的基本语法为:redis-cli
redis-cli -h 127.0.0.1 -p 6379 -a "mypass"
https://www.jianshu.com/p/ebda253a8daa
更改yum源
将Centos的yum源更换为国内的阿里云源
备份你的原镜像文件,保证出错后可以恢复:
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
下载新的CentOS-Base.repo 到/etc/yum.repos.d/
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
安装redis
yum install epel-release
yum install redis
启动redis
redis-server /etc/redis.conf &
systemctl start redis.service
设置redis开机启动
systemctl enable redis.service
高级设置
设置redis密码
打开文件/etc/redis.conf,找到其中的# requirepass foobared,去掉前面的#,并把foobared改成你的密码。
redis在启动的时候默认会启动一个保护模式,只有同一个服务器可以连接上redis。别的服务器连接不上这个redis
解决办法:关闭保护模式
1、进入redis安装目录 vi redis.conf 注释bind 127.0.0.1这一行 protected-mode yes 改成protected-mode no 允许外网服务链接
2、启动redis 登入客户端 执行下面命令 config set protected-mode "no" 临时生效,改配置永久生效
redis-cli -h 192.168.1.160 -p 6379 #测试外网远程连接成功
redis.conf文件默认在/etc目录下,你可以更改它的位置和名字,更改后,注意在文件/usr/lib/systemd/system/redis.service中,把ExecStart=/usr/bin/redis-server /etc/redis/6379.conf --daemonize no中的redis.conf的路径改成的新的路径。
源码下载地址:https://redis.io/download
http://download.redis.io/releases/
#资料地址 https://www.cnblogs.com/stulzq/p/9288401.html
#下载地址 wget http://download.redis.io/releases/redis-3.2.11.tar.gz
1.下载源码并解压
wget http://download.redis.io/releases/redis-4.0.10.tar.gz
yum -y install epel*
yum -y install iftop htop unzip net-tools
yum -y install openssh-clients
yum -y install gcc gcc-c++ ncurses-devel pcre* openssl* zlib zlib-devel wget net-snmp-devel curl-devel perl-DBI
tar -xzf redis-4.0.10.tar.gz
cd redis-4.0.10
2.编译
make
3.安装
make PREFIX=/usr/local/redis install
mkdir /usr/local/redis/etc/
cp redis.conf /usr/local/redis/etc/
cd /usr/local/redis/bin/
cp redis-benchmark redis-cli redis-server /usr/bin/
4.更改配置
vim /usr/local/redis/etc/redis.conf
:g/^s*$/d 删除所有空行
# 修改一下配置
# redis以守护进程的方式运行
# no表示不以守护进程的方式运行(会占用一个终端)
daemonize yes
pidfile=/var/run/redis.pid
# 客户端闲置多长时间后断开连接,默认为0关闭此功能
timeout 300
# 设置redis日志级别,默认级别:notice
loglevel verbose
# 设置日志文件的输出方式,如果以守护进程的方式运行redis 默认:""
# 并且日志输出设置为stdout,那么日志信息就输出到/dev/null里面去了
logfile stdout
# 设置密码授权
requirepass <设置密码>
# 监听ip
bind 127.0.0.1
5.配置环境变量
vim /etc/profile
export PATH="$PATH:/usr/local/redis/bin"
# 保存退出
# 让环境变量立即生效
source /etc/profile
6.配置启动脚本
#!/bin/bash
#chkconfig: 2345 80 90
# Simple Redis init.d script conceived to work on Linux systems
# as it does use of the /proc filesystem.
PATH=/usr/local/bin:/sbin:/usr/bin:/bin
REDISPORT=6379
EXEC=/usr/local/redis/bin/redis-server
REDIS_CLI=/usr/local/redis/bin/redis-cli
PIDFILE=/var/run/redis.pid
CONF="/usr/local/redis/etc/redis.conf"
case "$1" in
start)
if [ -f $PIDFILE ]
then
echo "$PIDFILE exists, process is already running or crashed"
else
echo "Starting Redis server..."
$EXEC $CONF
fi
if [ "$?"="0" ]
then
echo "Redis is running..."
fi
;;
stop)
if [ ! -f $PIDFILE ]
then
echo "$PIDFILE does not exist, process is not running"
else
PID=$(cat $PIDFILE)
echo "Stopping ..."
$REDIS_CLI -p $REDISPORT SHUTDOWN
while [ -x ${PIDFILE} ]
do
echo "Waiting for Redis to shutdown ..."
sleep 1
done
echo "Redis stopped"
fi
;;
restart|force-reload)
${0} stop
${0} start
;;
*)
echo "Usage: /etc/init.d/redis {start|stop|restart|force-reload}" >&2
exit 1
esac
7.开启自启动设置
# 复制脚本文件到init.d目录下
cp redis /etc/init.d/
# 给脚本增加运行权限
chmod +x /etc/init.d/redis
# 查看服务列表
chkconfig --list
# 添加服务
chkconfig --add redis
# 配置启动级别
chkconfig --level 2345 redis on
8.启动测试
systemctl start redis #或者 /etc/init.d/redis start
systemctl stop redis #或者 /etc/init.d/redis stop
# 查看redis进程
ps -el|grep redis
# 端口查看
netstat -an|grep 6379
参数 值 说明
daemonize yes 使redis以守护进程的方式运行
dir /var/redis redis服务持久化文件的存放位置
redis-cli -h host -p port -a password 在远程服务上执行命令
daemonize no #修改redis的守护进程为no ,不启用
#bind 127.0.0.1 #注释以下绑定的主机地址
protected-mode no #修改redis的保护模式为no,不启用
删除所有Key
删除所有Key,可以使用Redis的flushdb和flushall命令
//删除当前数据库中的所有Key
flushdb
//删除所有数据库中的key
flushall
MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for details about the error.
Redis被配置为保存数据库快照,但它目前不能持久化到硬盘。用来修改集合数据的命令不能用。请查看Redis日志的详细错误信息。
原因
强制关闭Redis快照导致不能持久化。
解决方案
将stop-writes-on-bgsave-error设置为no
这仅仅是让程序忽略了这个异常,使得程序能够继续往下运行,但实际上数据还是会存储到硬盘失败!
解决办法
http://www.redicecn.com/html/Linux/20131125/468.html
为了修正这个问题,请在/etc/sysctl.conf 添加一项 'vm.overcommit_memory = 1' ,然后重启(或者运行命令'sysctl vm.overcommit_memory=1' )使其生效。)
修改参数
vi /etc/sysctl.conf ,改vm.overcommit_memory=1,然后sysctl -p使配置文件生效
redis配置文件
protected-mode no
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize yes
supervised no
pidfile /var/run/redis_6379.pid
loglevel notice
logfile "/usr/local/redis/logs/redis.log"
databases 16
always-show-logo yes
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir ./
replica-serve-stale-data yes
replica-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
replica-priority 100
requirepass rP9yf2M1jGwNNjAT
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no
appendonly no
appendfilename "appendonly.aof"
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
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-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