redis第一章:简介和安装

redis简介和安装

简介和特点

redis(remote ditionary server)是开源、高性能、基于内存的轻量级键值的存储系统,于2009年,由意大利一家公司的创始人Salvatore Sanfilippo开源发布,它具有以下特点:

  1. 丰富的数据结构:(redis重要贡献者Matt Stancliff说,将redis称作一种数据机构服务器更为恰当)
    • 字符串
    • 列表
    • 集合
    • 有序集合
    • 散列
  2. 高性能存储且可持久化: 10万键值/1秒
  3. 功能丰富: 即是缓存系统(TTL),又是消息队列,还支持“pub/sub”的消息模式
  4. 高可靠性/扩展性

源码安装

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

save 300 10

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 可以

你可能感兴趣的:(redis第一章:简介和安装)