redis基础

一:简介

redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

 
Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,使用很方便。 [1] 
 
Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这使得Redis可执行单层树复制。存盘可以有意无意的对数据进行写操作。由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。同步对读取操作的可扩展性和数据冗余很有帮助。
redis的官网地址,非常好记,是redis.io。(特意查了一下,域名后缀io属于国家域名,是british Indian Ocean territory,即英属印度洋领地)

1.1存储

redis使用了两种文件格式:全量数据和增量请求。
全量数据格式是把内存中的数据写入磁盘,便于下次读取文件进行加载;
增量请求文件则是把内存中的数据序列化为操作请求,用于读取文件进行replay得到数据,序列化的操作包括SET、RPUSH、SADD、ZADD。
redis的存储分为内存存储、磁盘存储和log文件三部分,配置文件中有三个参数对其进行配置。
save seconds updates,save配置,指出在多长时间内,有多少次更新操作,就将数据同步到数据文件。这个可以多个条件配合,比如默认配置文件中的设置,就设置了三个条件。
appendonly yes/no ,appendonly配置,指出是否在每次更新操作后进行日志记录,如果不开启,可能会在断电时导致一段时间内的数据丢失。因为redis本身同步数据文件是按上面的save条件来同步的,所以有的数据会在一段时间内只存在于内存中。
appendfsync no/always/everysec ,appendfsync配置,no表示等操作系统进行数据缓存同步到磁盘,always表示每次更新操作后手动调用fsync()将数据写到磁盘,everysec表示每秒同步一次。
1.不适用操作系统提供的内存分配机制
2.在启动时,一次性向操作系统申请一部分内存区域

1.1.2 软件获取和帮助

官方网站:https://redis.io

官方各版本下载地址:http://download.redis.io/releases/

Redis 中文命令参考:http://redisdoc.com

中文网站1:http://redis.cn

中文网站2:http://www.redis.net.cn

 

1.13功能特性

• 高速读写

• 数据类型丰富

• 支持持久化

• 多种内存分配及回收策略

• 支持事务

• 消息队列、消息订阅

• 支持高可用

• 支持分布式分片集群

1.14企业缓存数据库解决方案对比

Memcached: 优点:高性能读写、单一数据类型、支持客户端式分布式集群、一致性hash 多核结构、多线程读写性能高。 缺点:无持久化、节点故障可能出现缓存穿透、分布式需要客户端实现、跨 机房数据同步困难、架构扩容复杂度高

 

Redis: 优点:高性能读写、多数据类型支持、数据持久化、高可用架构、支持自定 义虚拟内存、支持分布式分片集群、单线程读写性能极高 缺点:多线程读写较Memcached慢

 

Tair: 优点:高性能读写、支持三种存储引擎(ddb、rdb、ldb)、支持高可用、 支持分布式分片集群、支撑了几乎所有淘宝业务的缓存。 缺点:单机情况下,读写性能较其他两种产品较慢

1.15Redis应用场景

• 数据高速缓存

• web会话缓存(Session Cache)

• 排行榜应用

• 消息队列

• 发布订阅等

二:安装

环境检查

[root@docker1 local]# cat /etc/redhat-release
CentOS Linux release 7.5.1804 (Core)
[root@docker1 local]# uname -r
3.10.0-862.2.3.el7.x86_642018-05-17

 
下载,解压,编译:
cd /user/local
$ tar xzf redis-4.0.9.tar.gz
$ cd redis-4.0.9
由于makefile文件已经写好,我们只需要直接在源码目录执行make命令进行编译即可:
$ make
make命令执行完成后,会在当前目录下的下级目录src中生成本个可执行文件,分别是redis-server、redis-cli、redis-benchmark,它们的作用如下:
redis-server:Redis服务器的daemon启动程序
redis-cli:Redis命令行操作工具。当然,你也可以用telnet根据其纯文本协议来操作
redis-benchmark:Redis性能测试工具,测试Redis在你的系统及你的配置下的读写性能
 
建立软连接 ln -s /user/local/redis-4.0.9 /user/local/redis    把/user/local/redis指向/usr/local/redis-4.0.9
redis -> /usr/local/redis-4.0.9
 至此服务配置完成
 

2.2客户端连接

二进制文件是编译完成后在src目录下,通过下面的命令启动Redis服务:
cd /usr/local/redis/src
$ ./redis-server    ##启动redis
你可以使用内置的客户端命令redis-cli进行使用:

[root@docker1 src]# ./redis-cli

127.0.0.1:6379> set foo ba
OK
127.0.0.1:6379> get foo
"ba"
127.0.0.1:6379>

2.3编写配置文件

2.31精简化配置文件

[root@docker1 ~]# cd /usr/local/redis

[root@docker1 redis]# cp redis.conf{,.bak}

[root@docker1 redis]# grep -Ev '^$|#' redis.conf.bak > redis.conf

[root@docker1 redis]# cp redis.conf /etc/

2.32编辑配置文件

vim /etc/redis.conf

bind 127.0.0.1
protected-mode yes
port 6379                                  ##默认端口
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize no                           ##是否后台运行
supervised no
pidfile /var/run/redis_6379.pid
appendonly no/yes  AOF         ##日志开关是否打开:
logfile /var/log/redis.log            ##日志文件位置
dbfilename dump.rdb               ##RDB持久化数据文件:
requirepass 'passwd'               ##添加密码访问
https://www.cnblogs.com/zhang-ke/p/5981108.html    配置文件详细说明

 

2.42Redis安全配置

• Bind 指定IP进行监听 bind ip1 ip2 ip3 ip4

• 禁止protected-mode protected-mode yes/no (保护模式,是否只允许本地访问)

• 增加requirepass {password}

requirepass root

• 在redis-cli中使用 auth {password} 进行认证

2.43编写启动脚本

#!/bin/sh
#
# Simple Redis init.d script conceived to work on Linux systems
# as it does use of the /proc filesystem.
# chkconfig: - 85 15
REDISPORT=6379
EXEC=/usr/local/src/redis-server
CLIEXEC=/usr/local/src/redis-cli

PIDFILE=/var/run/redis.pid
CONF="/usr/local/redis/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
        ;;
    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
        ;;
    status)
    if [ -f $PIDFILE ]
    then
        echo "redis server is running....."
    else
        echo "redis is stopped"
    fi
    ;;
    *)
        echo "Please use start or stop or status"
        ;;
esac
View Code redis启动脚本

 2.5 redis多实例

注意:本次多实例配置基于单实例配置完成后

启动三个redis多实例

mkdir /data/redis

mkdir 6380 6381 6382

复制redis的启动文件到不同的redis实例中

[root@docker1 redis]# cp /usr/local/redis/src/redis-server /data/redis/6380

[root@docker1 redis]# cp /usr/local/redis/src/redis-server /data/redis/6381

[root@docker1 redis]# cp /usr/local/redis/src/redis-server /data/redis/6382

复制redis配置文件到不同的redis实例中

[root@docker1 redis]# cp /etc/redis.conf /data/redis/6380
[root@docker1 redis]# cp /etc/redis.conf /data/redis/6381
[root@docker1 redis]# cp /etc/redis.conf /data/redis/6382

修改不同redis实例的配置文件

    # 修改程序存储目录
    sed -i  "/dir/s#.*#dir /application/redis/6380/#g" /data/redis/6380/redis.conf 
    # 修改其他端口信息
    sed -i  "s#6379#6380#g" /data/redis/6380/redis.conf
    #允许远程连接redis
sed -i '/protected-mode/s#yes#no#g' /data/redis/6380/redis.conf
启动多实例
[root@docker1 6380]# /data/redis/6380/redis-server /data/redis/6380/redis.conf 
[root@docker1 6380]# /data/redis/6380/redis-server /data/redis/6381/redis.conf 
[root@docker1 6380]# /data/redis/6380/redis-server /data/redis/6382/redis.conf 

复制redis启动文件到/usr/bin下,这样就可以在任意目录直接执行redis-cli连接客户端了

[root@docker1 ~]# cp /usr/local/redis/src/redis-cli /usr/bin/
[root@docker1 ~]# redis-cli
127.0.0.1:6379>

至此:服务配置完成 

 

 

posted @ 2018-05-17 16:08  爱夜  阅读(187)  评论(0编辑  收藏  举报