Redis介绍和伪分布式搭建

Redis

Redis 是一种开源(BSD 许可)、内存中数据结构存储,用作数据库、缓存和消息代理。Redis 提供了诸如字符串、散列、列表、集合、带范围查询的排序集合、位图、超级日志、地理空间索引和流等数据结构。Redis 内置复制、Lua 脚本、LRU 驱逐、事务和不同级别的磁盘持久化,并通过 Redis Sentinel 和 Redis Cluster 自动分区提供高可用性.

Redis 安装

官网:https://redis.io/download下载redis
下载gcc,tcl 命令编译器 yum -y install gcc tcl
解压tar -zxvf redis-6.2.5.tar.gz
cd redis-6.2.5
make && make PREFIX=/usr/local/redis install 
配置环境变量
EXPORT REDIS_PREFIX=/usr/local/redis 
utils 目录,服务脚本安装:./install_server.sh 
启动客户端:redis-cli 

Redis 源语命令

string

1.127.0.0.1:6379> set name wuyanzu 设置键值
2.127.0.0.1:6379> get name  获取键的值
    "wuyanzu"
3.mset age 18 add HK 设置多个键值
4.mget name age add  获取多个键值
    1) "wuyanzu"
    2) "18"
    3) "HK"
5.append name gutianle 向name中添加新的值
6 bitcount name [start end] 统计name中起始至终止字符一共占用多少位,默认统计所有
7.SETBIT name 7 1  将偏移量为7的值设置为1,偏移量起始值为0,即第一个字节最后一位设置为1,结果转化为对应的阿斯克码
8.GETBIT name 7  获取第7位的值
9.BITCOUNT name 1 1 获取起始字符为1,终止字符为1区间段统计位的值位1的个数
10.BITPOS name 1 0 1 返回起始字符位0,终止字符位1区间段第一个位为1的下标,如果没有返回-1
11.set score 100  decr score 将score的值减1
12.decrby score 20 将score的值减20
13.getrange name 0 5 返回key起始下标至终止下标的字符,左闭右闭
14.incr incrby 命令同decr
15.setex height 300 180 设置height的值为180,过期时间为300秒,如果键已经存在则会覆盖,ttl height查看剩余有效时间
16.SETNX name zhangjaihui 如果key不存在时设置键值,存在不做任何操作
17.SETRANGE name 7 jinchengwu
用 jinchengwu 参数覆写name所储存的字符串值,从偏移量 7开始。不存在的 key 当作空白字符串处理。
18.STRLEN name返回 key 所储存的字符串值的长度

hash

1.hset com it 200 将com的域it设置为200
2.hget com it 获取com的域it
3.hmset com num 50, office m1 给多个域设置值
4.hmget com num office 获取多个域的值
5.hsetnx com num 100 如果域存在,不做任何操作,不存在设置为100
6.hkeys com 获取所有的域
7.hvals com 获取所有域的值
8.hlen com 获取包含所有域的数量
9.hdel com num 删除指定域
10.hexists com it 判断域是否存在

list

1.lpush list1 111 222 333 从列表左边插入,队列先进先出
2.rpush list2 111 222 333 从列表右边插入,栈先进后出
3.lrange list1 0 -1 返回list1中所有元素 
4.ltrim list1 0 1 截取list1下标 0-1的元素,左闭右闭区间
5.lpop list1 从左边弹出一个元素
6.rpop list1 从右边弹出一个元素
7.lpushx/rpushx key存在添加值,不存在处理 

set

1.sadd s1 111 222 333 将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略
2.srem s1 222 删除元素
3.sismember s1 222 判断222是否在集合中
4.smembers s1 返回集合中的所有元素
5.sdiff s1 s2 返回s1 - (s1 & s2) 返回s1存在,s2中不存在元素的集合
6.sinter s1 s2 返回两个集合的交集
7.sunion s1 s2 返回两个集合的并集
8.scard s1 返回集合 key 的基数(集合中元素的数量)
9.spop s1 移除并返回集合中的一个随机元素
10.srandmember s1 和SPOP相似,但SPOP将随机元素从集合中移除并返回,而SRANDMEMBER则仅仅返回随机元素,而不对集合进行任何改动。

SortedSet(有序集合)

1.zadd zs1 100 xiaoming 80 xiaohuang 90 xiaozhang 添加有序集合
2.zrem zs1 xiaoming 删除元素
3.zrevrange zs1 0 -1 倒叙排列元素
4.zrange zs1 0 -1 正序排列
5.zcard zs1 返回有序集合元素个数
6.zscore zs1 xiaohuang 返回集合中元素的权重
7.zrank zs1 xiaohuang 返回集合中元素的排名
8.zcount zs1 80 100 返回有序集合中,score值在 min和 max之间(左闭右闭)的成员的数量
9. zrangebyscore zs1 -inf +inf withscores 返回有序集合中score在负无穷至正无穷之间的元素,元素按score值递增排列;没有withsores只是取出元素
10.zremrangebyrank zs1 0 0 移除起始下标为0,终止下标为0的元素
11. zremrangebyscore zs1 0 200 移除集合中权重在0-200之间的元素(左闭右闭)

http://doc.redisfans.com/index.html

Redis 持久化

Redis 提供了不同级别的持久化方式:
1.RDB持久化方式能够在指定的时间间隔能对你的数据进行快照存储.
2.AOF持久化方式记录每次对服务器写的操作,当服务器重启的时候会重新执行这些命令来恢复原始的数据,AOF命令以redis协议追加保存每次写的操作到文件末尾.Redis还能对AOF文件进行后台重写,使得AOF文件的体积不至于过大.
如果你只希望你的数据在服务器运行的时候存在,你也可以不使用任何持久化方式.你也可以同时开启两种持久化方式, 在这种情况下, 当redis重启的时候会优先载入AOF文件来恢复原始的数据,因为在通常情况下AOF文件保存的数据集要比RDB文件保存的数据集要完整.

RDB

RDB提供了三种机制:save、bgsave、自动化在这里插入图片描述

RDB的优点:
    (1)RDB文件紧凑,全量备份,非常适合用于进行备份和灾难恢复。
    (2)生成RDB文件的时候,redis主进程会fork()一个子进程来处理所有保存工作,主进程不需要进行任何磁盘IO操作。
    (3)RDB 在恢复大数据集时的速度比 AOF 的恢复速度要快。
RDB的缺点:
    RDB快照是一次全量备份,存储的是内存数据的二进制序列化形式,存储上非常紧凑。当进行快照持久化时,会开启一个子进程专门负责快照持久化,子进程会拥有父进程的内存数据,父进程修改内存子进程不会反应出来,所以在快照持久化期间修改的数据不会被保存,可能丢失数据。

AOF

在这里插入图片描述

AOF的优点:
(1)AOF可以更好的保护数据不丢失,一般AOF会每隔1秒,通过一个后台线程执行一次fsync操作,最多丢失1秒钟的数据。
(2)AOF日志文件没有任何磁盘寻址的开销,写入性能非常高,文件不容易破损。
(3)AOF日志文件即使过大的时候,出现后台重写操作,也不会影响客户端的读写。
(4)AOF日志文件的命令通过非常可读的方式进行记录,这个特性非常适合做灾难性的误删除的紧急恢复。比如某人不小心用flushall命令清空了所有数据,只要这个时候后台rewrite还没有发生,那么就可以立即拷贝AOF文件,将最后一条flushall命令给删了,然后再将该AOF文件放回去,就可以通过恢复机制,自动恢复所有数据。
AOF的缺点:
(1)对于同一份数据来说,AOF日志文件通常比RDB数据快照文件更大。
(2)AOF开启后,支持的写QPS会比RDB支持的写QPS低,因为AOF一般会配置成每秒fsync一次日志文件,当然,每秒一次fsync,性能也还是很高的。
(3)以前AOF发生过bug,就是通过AOF记录的日志,进行数据恢复的时候,没有恢复一模一样的数据出来。

如何选择使用哪种持久化方式?

需要根据实际的业务场景选择持久化的方式。一般来说, 如果想达到足以媲美 PostgreSQL 的数据安全性, 应该同时使用两种持久化功能。

Redis 伪分布式集群搭建

redis开机启动设置
在/etc/init.d/目录下配置redis文件
#!/bin/sh
# chkconfig: 2345 10 90  
# description: Start and Stop redis   

REDISPORT=6379
EXEC=/usr/local/redis/redis-server
CLIEXEC=/usr/local/redis/redis-cli

PIDFILE=/var/run/redis_${REDISPORT}.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
        ;;
    restart)
        "$0" stop
        sleep 3
        "$0" start
        ;;
    *)
        echo "Please use start or stop or restart as first argument"
        ;;
esac
yum install chkconfig
chconfig redis on

redis 集群搭建
mkdir /usr/local/redisCluster 
mkdir /usr/local/redisCluster/redis0{1,2,3,4,5,6}
cp /usr/local/bin/* /usr/local/redisCluster/redis01/  
# 将redis目录下redis-cli redis.conf redis-server分别拷贝到redis01-redis06
vi /usr/local/redisCluster/redis01/redisconf  
第1处: port 6379              ————> 值 改成 7001  
第2处: daemonize no           ————> 值 改成 yes  
第3处: pidfile /var/run/redis_6379.pid    ————> 值 改成 ./redis_7001.pid  
第4处: logfile ""                 ————> 值 改成 "./logs/redis_7001.log"  
第5处: bind 127.0.0.1             ————> 值 改成 本机IP(如我这里是172.16.189.74)  
第6处: protected-mode yes             ————> 值 改成 no  
第7处: # cluster-enabled yes      ————> 去掉注释  
第8处: # cluster-config-file nodes-6379.conf————> 去掉注释,并把数字改成对应端口号,如这里是7001  
第9处: # cluster-node-timeout 15000   ————> 去掉注释   
第10处:  appendonly no            ————> 值 改成 yes
将redis01/redisconf重新命名为7001.conf,拷贝至其他redis节点。更改其中配置文件,主要改端口,pid,cluster-config-file,改完之后重新命令文件

创建启动集群,停止集群的脚本文件
touch /usr/local/redisCluster/startCluster.sh  

在这里插入图片描述
touch /usr/local/redisCluster/shutdownCluster.sh
在这里插入图片描述
touch /usr/local/redisCluster/createCluster.sh
redis-cli --cluster create 172.16.189.74:7001 172.16.189.74:7002 172.16.189.74:7003 172.16.189.74:7004 172.16.189.74:7005 172.16.189.74:7006 --cluster-replicas 1

先启动集群,在创建集群
ps-aux|grep redis 就可以看到集群的运行情况了

配置哨兵
在每个节点下面配置 sentinel.conf

在这里插入图片描述
其他节点更改端口,监听的端口,日志目录,dir即可

建立启动和关闭哨兵的脚本
startsentinel.sh 

在这里插入图片描述
stopsentinel.sh
kill -9 ps -ef | grep sentinel| grep -v grep|awk '{print $2}'

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值