redis简介和安装
简介和特点
redis(remote ditionary server)是开源、高性能、基于内存的轻量级键值的存储系统,于2009年,由意大利一家公司的创始人Salvatore Sanfilippo开源发布,它具有以下特点:
- 丰富的数据结构:(redis重要贡献者Matt Stancliff说,将redis称作一种数据机构服务器更为恰当)
- 字符串
- 列表
- 集合
- 有序集合
- 散列
- 高性能存储且可持久化: 10万键值/1秒
- 功能丰富: 即是缓存系统(TTL),又是消息队列,还支持“pub/sub”的消息模式
- 高可靠性/扩展性
源码安装
redis官方兼容大部分POSIX系统,推荐的生产系统是linux,官方并不支持win,但微软提交了一个补丁,redis才可以在win下运行,因此win只适合于学习,下面是官网通过源码安装的命令
$ wget http://download.redis.io/releases/redis-5.0.5.tar.gz
$ tar xzf redis-5.0.5.tar.gz
$ cd redis-5.0.5
$ make
安装完成后,redis-server、redis-cli运行文件,会出现在redis-5.0.5/src目录中
启动redis
$ src/redis-server
# redis 服务器默认端口是6379,可以通过--port自定义端口号
# 还可以指定配置文件:redis-server conf/redis.conf
neo@neo:~/install/redis-5.0.5$ src/redis-server --port 6380
# 对应的redis客户端访问时要加上自定义端口
neo@neo:~/install/redis-5.0.5/src$ ./redis-cli -p 6380
访问redis
$ src/redis-cli
redis> set foo bar
OK
redis> get foo
"bar"
# 如果已经进入src目录,./运行二进制文件
neo@neo:~/install/redis-5.0.5/src$ redis-cli
bash: redis-cli: 未找到命令
neo@neo:~/install/redis-5.0.5/src$ /redis-cli
bash: /redis-cli: 没有那个文件或目录
neo@neo:~/install/redis-5.0.5/src$ ./redis-cli
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> ping hi
"hi"
127.0.0.1:6379>
停止redis
强行停止redis进程可能导致数据丢失,更优雅的方式是向redis发生shutdown信号,以保持数据一致性
当redis接收到shutdown信号,会先断开所有客户端连接,再根据配置保存数据,而后关闭
redis可以妥善处理sigterm信号,所以kill redis进程的pid,效果和shutdown相同
127.0.0.1:6379> shutdown save
随机启动
redis源码目录的utils文件夹中有一个脚本文件:redis_init_script,通过它可以随系统启动
# 1.配置初始化脚本:将脚本复制到/etc/init.d目录中,重命名为redis_端口号;并将脚本REDISPORT变量值改为相同端口号
sudo cp redis-5.0.5/utils/redis_init_script /etc/init.d/
sudo mv /etc/init.d/redis_init_script /etc/init.d/redis_6379
# 2.建立文件夹
sudo mkdir /etc/redis #存放redis配置文件
sudo mkdir /var/redis/6379 #存放redis持久化文件
# 3.修改配置文件:将配置文件复制到/etc/redis目录中,并重命名为端口号;修改参数如下表格
sudo cp redis-5.0.5/redis.conf /etc/redis/
sudo mv /etc/redis/redis.conf /etc/redis/6379.conf
# 4.执行随系统启动的命令
sudo update-rc.d redis_6379 defaults
redis脚本启中,配置文件需要修改的参数
参数 | 值 | 说明 |
---|---|---|
daemonize | yes | redis是否以守护进程运行 |
pidfile | /var/run/redis_端口号.pid | 设置redis的pid文件位置 |
port | 端口号 | 设置redis监听的端口号 |
dir | /var/redis/端口号 | 设置持久化文件存放位置 |
填坑
# 掐指一算,第4步会有下面的坑
insserv: Script redis_6379 is broken: incomplete LSB comment.
insserv: missing `Required-Start:' entry: please add even if empty.
insserv: missing `Renequired-Stop:' entry: please add even if empty.
# 填坑对策:redis_6379初始化脚本,加入Required-Start、Required-Stop, 为啥注释里加上有作用呢??
### BEGIN INIT INFO
# Provides: redis_6379
# Required-Start: $local_fs $network
# Required-Stop: $local_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Redis data structure server
# Description: Redis data structure server. See https://redis.io
### END INIT INFO
redis启动脚本
#!/bin/sh
#
# Simple Redis init.d script conceived to work on Linux systems
# as it does use of the /proc filesystem.
### BEGIN INIT INFO
# Provides: redis_6379
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Redis data structure server
# Description: Redis data structure server. See https://redis.io
### END INIT INFO
REDISPORT=6379
EXEC=/usr/local/bin/redis-server
CLIEXEC=/usr/local/bin/redis-cli
PIDFILE=/var/run/redis_${REDISPORT}.pid
CONF="/etc/redis/${REDISPORT}.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
;;
stop)
if [ ! -f $PIDFILE ]
then
echo "$PIDFILE does not exist, process is not running"
else
PID=$(cat $PIDFILE)
echo "Stopping ..."
$CLIEXEC -p $REDISPORT shutdown
while [ -x /proc/${PID} ]
do
echo "Waiting for Redis to shutdown ..."
sleep 1
done
echo "Redis stopped"
fi
;;
*)
echo "Please use start or stop as first argument"
;;
esac
关于配置
# redis-server的启动参数除了port,还有是否开启持久化、日志级别等,由于配置项众多,所以redis-server启动参数可以通过配置文件来传递(redis提供了配置文件模板,位于源代码目录的根目录中),如:
$ redis-server 配置文件路径
# 命令行参数可以覆盖同名的配置文件参数,如:
$ redis-server 配置文件路径 --loglevel warning
# redis还支持冬动态修改部分配置,即通过config set命令,在redis运行且不重启的情况下修改配置;
# config get命令获取当前配置情况(通过config set配置的情况??)
127.0.0.1:6379> config set loglevel warning
OK
127.0.0.1:6379> config get loglevel
1) "loglevel"
2) "warning"
redis部分配置参数列表
参数名 | 默认值 | 使用config set设置 |
---|---|---|
daemonize | no | 不可以 |
pidfile | /var/run/redis/pid | 不可以 |
port | 6379 | 不可以 |
databases | 16 | 不可以 |
save | save 900 1<br /><br />save 300 10<br /><br />save 60 10000 | 可以 |
rdbcompression | yes | 可以 |
rdbchecksum | yes | 可以 |
dbfilename | dump.rdb | 可以 |
dir | ./ | 不可以 |
slaveof | 无 | 不可以 |
masterauth | 无 | 可以 |
slave-serve-stale-data | yes | 可以 |
slave-read-only | yes | 可以 |
reqirepass | 无 | 可以 |
rename-command | 无 | 不可以 |
maxmemory | 无 | 可以 |
maxmemory-policy | volatile-lru态修改部分配置,即通过config set命令,在 | 可以 |
maxmemory-samples | 3 | 可以 |
appendonly | no | 可以 |
appendfsync | everysec | 可以 |
auto-aof-rewrite-percentage | 100 | 可以 |
auto-aof-rewrite-min-size | 64mb | 可以 |
lua-time-limit | 5000 | 可以 |
slowlog-log-slower-than | 10000 | 可以 |
slowlog-max-len | 128 | 可以 |
hash-max-ziplist-entries | 512 | 可以 |
hash-max-ziplist-value | 64 | 可以 |
list-max-ziplist-entries | 512 | 可以 |
list-max-ziplist-value | 64 | 可以 |
set-max-intset-entries | 512 | 可以 |
zset-max-ziplist-entries | 128 | 可以 |
zset-max-ziplist-value | 64 | 可以 |
网友评论