码迷,mamicode.com
首页 > 其他好文 > 详细

学习Redis(六)

时间:2019-01-28 13:54:49      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:不同的   客户端连接   配置   chmod   dir   自己   info   pytho   调用   

分布式存储之-Redis

一、简介
redis常用于数据库读缓存和写缓存,通常写缓存需要考虑到数据一致性的问题,读缓存应用较多
redis是一个开源的,使用c语言编写的,支持网络交互的,可基于内存也可持久化的key-value数据库

技术分享图片

二、安装部署

1、安装
wget http://download.redis.io/releases/redis-3.0.7.tar.gz
tar xf redis-3.0.7.tar.gz
cd redis-3.0.7
make PREFIX=/usr/local/redis install
cp redis_init_script /etc/init.d/redis
chmod +x /etc/init.d/redis

2、修改配置文件
vim /etc/init.d/redis
EXEC=/usr/local/redis/bin/redis-server
CLIEXEC=/usr/local/redis/bin/redis-cli
cp /usr/local/redis-3.0.7/redis.conf /etc/redis/6379.conf
vim /etc/redis/6379.conf
daemonize yes

3、启动服务
/etc/init.d/redis start

通过salt-master批量安装:

cp redis-3.0.7.tar.gz   salt/redis/files/
cp 6379.conf              salt/redis/files/
cp /etc/init.d/redis      salt/redis/files/

vim redis.sls

redis-install:
  file.managed: #调用file模块的managed方法
    - name: /usr/local/src/redis-3.0.7.tar.gz #客户端的文件路径
    - source: salt://init/files/redis-3.0.7.tar.gz  #在服务器的路径
    - user: root
    - group: root
    - mode: 755
    
  cmd.run: #执行远程命令,使用cmd的run方法
    - name: cd /usr/local/src/  && tar xvf redis-3.0.7.tar.gz &&  cd redis-3.0.7 &&  make PREFIX=/usr/local/redis  install #编译安装
    - unless: test -d /usr/local/redis #如果目录存在就不安装了
    - require: #依赖
      - file: redis-install  #编译之前需要依赖redis-install执行成功

redis-config:
  file.managed:
    - name: /etc/redis/6379.conf  #客户端的配置文件路径
    - source: salt://init/files/6379.conf #服务器的配置文件路径
    - user: root
    - group: root
    - mode: 644

redis-service:
  file.managed:
    - name: /etc/init.d/redis
    - source: salt://init/files/redis
    - user: root
    - group: root
    - mode: 755 

  cmd.run:
    - name: chkconfig --add redis && chkconfig redis on #设置服务开机启动
    - unless: chkconfig --list |  grep redis #如果已经在chkconfig --list列表就不执行上一步骤

  service.running:  #这是服务启动
    - name: redis
    - enable: True
    - watch:  #监控的文件
      - file: redis-config

    - require: 服务启动依赖 redis-install和redis-service
      - cmd: redis-install
      - cmd: redis-service

三:redis数据类型格式

1、字符串数据格式

SET: 设置key,设置的值都是字符串格式string:

GET: 获取key的值:

KEYS: 显示所有的key

EXISTS: 判断key是否存在:返回1表示存在,0表示不存在

DEL: 删除指定的key:返回0表示没有指定的key可以删除,返回其他整数表示成功删除的key的数量,没有的key不报错

TYPE: 获取key的类型

INFO: 当前服务器的状态

SELECT: 更换数据库,redis默认支持16个数据库,默认在数据库0,可以使用sekect 进行更换数据库

FLUSHALL: 清空整个数据库

APPEND:追加

INCR:自增,如果key不存在就创建并设置value默认为1

DECR:自减,value自减1:

INCRBY :指定自增value的整数值:

DECRBY:指定自减value的值:

INCRBYFLOAT :设置浮点数的value

MSET 和 MGET:批量创建和获取key

STRLEN:获取key字符串的长度

2、散列数据类型:

HSET:命令用于为哈希表中的字段赋值,如果哈希表不存在,一个新的哈希表被创建并进行 HSET 操作,如果字段已经存在于哈希表中,旧值将被覆盖

HGET:获取key:

HGETALL:获取key的所有值

HMSET、HMGET、HMGETALL:批量创建、批量获取并获取所有的key:

HDEL:删除指定的key

3、列表数据类型

不同的数据类型的命令是不通用的,如list与string的命令是不能通用的。出了set命令之外

LPUSH:从左侧添加

RPUSH:从右侧添加

LLEN:获取列表的长度:

LPOP:从左侧弹出列表中的值

RPOP:从右侧弹出列表中的值

LINDEX:获取最后一个元素:

LRANGE :获取指定范围的元素

4、集合数据类型的操作

集合默认是无序的,列表是有序的,有序是只按照添加的循序保持位置

SADD:创建并给集合赋值

SMEMBERS:获取集合中的所有值

SISMEMBER:判断一个值是不是在集合当中,在返回1,否则返回0

SDIFF:求两个集合的差集:

SINTER:求并集,即在多个集合当中共同包含的值,可以是多个集合

SUNION:求并集,即在每个元素都出现的值只统计一次

ZADD:创建有序队列,保持值的位置固定

ZSCORE:获取值的分数

ZRANGE:根据值的分数排序获取值

四、持久化

redis支持两种持久化,分别是rdb和aof

rdb:指定的时间内快照存放在本地

aof: 将所有执行过的命令保存在本地,这种方式更像mysql的binlog

在服务器宕机时,如果是快照的方式,数据将会丢失一部分,而aof则损失的较小,并且在后台会进行重写

save 900 1               #900秒以内有1个key发生变化就快照
save 300 10              #300秒以内有10个key发生变化就快照
save 60 10000            #60秒内有10000个key变化就快照
rdbcompression yes       #持久化到RDB文件时,是否压缩,“yes”为压缩,“no”则反之
rdbchecksum yes          #读取和写入的时候是否支持CRC64校验,默认是开启的
dbfilename dump.rdb      #保存的文件的名称
dir  /usr/local/redis    #快照文件的保存路径

SAVE:阻塞保存

BGSAVE:在后台保存,不阻塞

使用AOF进行持久化:

appendonly yes                    #默认为no,改为yes
appendfilename "appendonly.aof"   #保存的文件名,路径为rdb指定的file目录

五、Redis主从

一个主服务器可以有多个从服务器,而且从服务器也可以有主服务器,主从复制时非阻塞的,通过fork主进程主服务器收到从服务器的sync命令,就在后台执行bgsave,执行完毕后将保持的rdb文件发给客户端,客户端收到后将rdb载入到内存,新版本的支持增量备份

在从服务器执行命令:

SLAVEOF 192.168.4.100 6379       #主服务器的地址和端口

查看从服务器的info信息

六、Redis集群:

1、简介

四种大方案:

1)客户端分片,优势是比较灵活,不存在单点故障,缺点是添加节点需要重新配置,数据要手动同步

2)代理:代理分片,有proxy代理取数据,可以为proxy配置算法,如Twemproxy

3)Redis Cluster:在3.0版本以后支持,无中心,在某种情况下会造成数据丢失

4)Coodis:豌豆荚的开源方案

2、配置集群

使用redis cluster:

需要至少6个机器,3主3从,下面创建8个客户端,另外2个做备用

先将配置文件复制到/opt,然后创建8个目录并生成8个不同端口、不同pid和不同rdb文件的redis.conf配置文件:

cd /opt/
mkdir `seq 7001 7008`
cp /etc/redis/6379.conf  .
sed s/6379/7001/g 6379.conf >> 7001/redis.conf
sed s/7001/7002/g 6379.conf >> 7002/redis.conf
sed s/7002/7003/g 6379.conf >> 7003/redis.conf
sed s/7003/7004/g 6379.conf >> 7004/redis.conf
sed s/7004/7005/g 6379.conf >> 7005/redis.conf
sed s/7005/7006/g 6379.conf >> 7006/redis.conf
sed s/7006/7007/g 6379.conf >> 7007/redis.conf
sed s/7007/7008/g 6379.conf >> 7008/redis.conf

批量启动redis:

for i in `seq 7001 7008`;do cd /opt/$i && /usr/local/redis/bin/redis-server  /opt/$i/redis.conf;done

netstat -lntp|grep :700*

安装ruby管理工具:

yum install ruby rubygems -y
gem install redis

复制ruby的管理脚本:

cp /root/redis-3.0.7/src/redis-trib.rb  /usr/local/bin/redis-trib #是一个ruby脚本,方便redis管理

创建集群:

redis-trib  help
redis-trib  create --replicas 1 192.168.10.205:7001 192.168.10.205:7002 192.168.10.205:7003 192.168.10.205:7004 192.168.10.205:7005 192.168.10.205:7006
M: 9db0386330f3d66d0c7cac48dbf2dda1972c96c4 192.168.10.205:7001 #ID及IP和端口
   slots:0-5460 (5461 slots) master                             #本机对应的分片位置,0-5460

插入的数据是轮训写入到各个redis server

集群操作:

cluster nodes                  #列出当前的主从
cluster info                   #当前的状态

向集群中添加节点:

redis-trib  add-node 192.168.10.205:7007  192.168.10.205:7001
redis-trib  add-node   要添加的节点和端口       添加到的目的节点和端口

添加主机以后需要重新分片:

redis-trib  reshard 192.168.10.205:7007

七、Redis的管理工具

1)phpredisadmin工具

2)rdbtools管理工具

3)saltstack管理redis

4)通过codis完成redis管理

1、phpredisadmin工具

类似于mysqladmin管理mysql一样

安装部署

1、安装环境:
yum install httpd php php-redis -y
2、下载管理包:
git clone https://github.com/erikdubbelboer/phpRedisAdmin.git
3、更改名称并解决依赖:
mv phpRedisAdmin admin
cd admin
git clone https://github.com/nrk/predis.git vendor #解决依赖包
4、启动http服务
/etc/init.d/httpd  restart
5、访问
http://192.168.4.100/admin:

报错解决:

cd /var/www/html/admin/includes/
vim config.inc.php 
      name   => 7001,                #名称
      host   => 192.168.10.205,  #配置为自己的主机IP
      port   => 7001,

vim /var/www/html/admin/includes/common.inc.php
#mb_internal_encoding(utf-8);   将此行改为注释

可以配置多个reids Server

2、rdbtools管理工具:

安装部署

yum install python-pip
pip install rdbtools
https://github.com/sripathikrishnan/redis-rdb-tools
cd /opt/7001/
rdb -c memory dump_7001.rdb  >  memory.csv #然后将memory.csv文件下载到本地,即可用excel打开分析了

 databases,key,大小,格式,长度,如下所示:

 技术分享图片

3、通过saltstack管理redis:

模块名称:redismod

官方文档地址:https://docs.saltstack.com/en/latest/ref/modules/all/index.html 

4、通过codis完成redis管理:

codis简介:

豌豆荚,快速分布式缓存git地址:https://github.com/CodisLabs/codis

所有内容借鉴gitlab-豌豆荚

Codis 由四部分组成:

Codis Proxy (codis-proxy): 代理服务器做请求转发,codis-proxy 本身实现了 Redis 协议,codis-proxy 本身是无状态的.可以执行多个

Codis Dashboard (codis-config): codis工具,包括添加删除节点,并且自带一个dashboard,点一点即可

Codis Redis (codis-server): 基于2.8.13开发的分支,只能使用codis-server

ZooKeeper/Etcd: Codis 依赖 ZooKeeper 来存放数据路由表和 codis-proxy 节点的元信息, codis-config 发起的命令都会通过 ZooKeeper 同步到各个存活的 codis-proxy.

安装部署

1、安装go语言并设置环境变量:
yum install golang -y        #codis是基于go语言编写的,因此要安装go语言环境
mkdir /opt/gopath            #保存go环境的路径
vim /etc/profile
   export GOPATH=/opt/gopath
source  /etc/profile

2、安装配置zookeeper,需要有java环境: wget http://mirrors.cnnic.cn/apache/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz mv zookeeper-3.4.6 /usr/local/zookeeper cd /usr/local/zookeeper/conf/ cp zoo_sample.cfg /opt/zoo.cfg #复制配置文件 cd /opt/ mkdir zk1 zk2 zk3 #准备zookeeper 服务ID,每个服务器的ID是不同的 echo 1 > zk1/myid echo 2 > zk2/myid cho 3 > zk3/myid vim zoo.cfg #编辑配置文件
dataDir
=/opt/zk1 #保存数据的命令
clientPort
=2181 #客户端连接的端口   server.1 = 192.168.10.205:2887:3887   server.2 = 192.168.10.205:2888:3888   server.3 = 192.168.10.205:2889:3889
cp zoo.cfg zk1/zk1.cfg cp zoo.cfg zk2/zk2.cfg cp zoo.cfg zk3/zk3.cfg vim zk2/zk2.cfg #每个服务对应不同的目录
dataDir
=/opt/zk2
clientPort
=2182 vim zk3/zk3.cfg
dataDir
=/opt/zk3
clientPort
=2183

启动每个zookeeper 服务:

/usr/local/zookeeper/bin/zkServer.sh  start  /opt/zk1/zk1.cfg 
/usr/local/zookeeper/bin/zkServer.sh  start  /opt/zk2/zk2.cfg 
/usr/local/zookeeper/bin/zkServer.sh  start  /opt/zk3/zk3.cfg 

查看每个节点的状态:

/usr/local/zookeeper/bin/zkServer.sh  status /opt/zk1/zk1.cfg
/usr/local/zookeeper/bin/zkServer.sh  status /opt/zk2/zk2.cfg 
/usr/local/zookeeper/bin/zkServer.sh  status /opt/zk3/zk3.cfg 

连接到zookeeper节点:

/usr/local/zookeeper/bin/zkCli.sh  -server  192.168.10.205:2181

 

学习Redis(六)

标签:不同的   客户端连接   配置   chmod   dir   自己   info   pytho   调用   

原文地址:https://www.cnblogs.com/wuhg/p/10329468.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!