linux上安装redis

Redis简介

  • Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。
  • Redis是 NoSQL技术阵营中的一员,它通过多种键值数据类型来适应不同场景下的存储需求,借助一些高层级的接口使用其可以胜任,如缓存、队列系统的不同角色

Redis特性

  • Redis 与其他 key - value 缓存产品有以下三个特点:
  • Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
  • Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
  • Redis支持数据的备份,即master-slave模式的数据备份。

Redis 优势

  • 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
  • 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
  • 原子 – Redis的所有操作都是原子性的。
  • 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。

Redis应用场景

  • 用来做缓存(ehcache/memcached)——redis的所有数据是放在内存中的(内存数据库)
  • 可以在某些特定应用场景下替代传统数据库——比如社交类的应用
  • 在一些大型系统中,巧妙地实现一些特定的功能:session共享、购物车
  • 只要你有丰富的想象力,redis可以用在可以给你无限的惊喜…….

NoSQL的特点

  • 存储结构与mysql这一种关系型数据库完全不同,nosql存储的是KV形式

Nosql与sql的区别

  • sql支持关系复杂的数据查询,nosql不支持
  • sql支持事务性,nosql不支持

ubuntu上安装radis

当前redis最新稳定版本是4.0.9

当前ubuntu虚拟机中已经安装好了redis,以下步骤可以跳过 最新稳定版本下载链接:

 http://download.redis.io/releases/redis-4.0.9.tar.gz

step1:下载

wget http://download.redis.io/releases/redis-4.0.9.tar.gz

step2:解压

tar xzf redis-4.0.9.tar.gz

step3:移动,放到usr/local⽬录下

sudo mv ./redis-4.0.9 /usr/local/redis/

step4:进⼊redis⽬录

cd /usr/local/redis/

step5:生成

sudo make

step6:测试,这段运⾏时间会较⻓

sudo make test

step7:安装,将redis的命令安装到/usr/local/bin/⽬录

sudo make install

step8:安装完成后,我们进入目录/usr/local/bin中查看

cd /usr/local/bin
ls -all

  1. redis-server                         redis服务器
  2. redis-cli                               redis命令行客户端
  3. redis-benchmark                 redis性能测试工具
  4. redis-check-aof                   AOF文件修复工具
  5. redis-check-rdb                   RDB文件检索工具

step9:配置⽂件,移动到/etc/⽬录下

配置⽂件⽬录为/usr/local/redis/redis.conf

sudo cp /usr/local/redis/redis.conf /etc/redis/

centos7上安装redis

yum安装redis

yum install redis -y

启动

systemctl start redis

源码安装redis

下载redis源码

wget http://download.redis.io/releases/redis-4.0.10.tar.gz

解压缩

tar -zxf redis-4.0.10.tar.gz

切换redis源码目录

cd redis-4.0.10/

编译源文件 不需要指定位置 默认在/usr/local/bin 因为有Makefile

make && make install

更改redis的配置文件 启动redis ,支持密码和更改端口方式

在/opt/redis-4.0.10目录下创建redis.s18.conf文件

touch redis.s18.conf

写入以下内容

bind 192.168.81.133             #redis启动地址
protected-mode yes               #开启redis安全模式
port 6800                        #更改redis端口 
daemonize yes                    #redis后台启动 
pidfile /var/run/redis_6379.pid
loglevel notice
logfile ""
requirepass  123            #设置redis的密码

启动服务

redis-server redis.s18.conf 

然后启动redis

redis-cli -h 192.168.81.133 -p 6800  #参数解释 -h 指定主机地址  -p  指定redis端口 -a 指密码

登录之后通过auth指令 验证密码 

AUTH 123

使用ping命令,确保redis正常可用回复了一个pong

Docker上安装容器

下载镜像

docker pull redis

运行镜像

docker run -d --name redis6 -p 6379:6379 redis redis-server --appendonly yes --requirepass "123456"

查看所有容器

docker ps -a

进入容器

docker attach 容器id

或者

docker exec -it 容器id /bin/bash

启动容器

docker start 容器id

停止容器

docker stop 容器id

查看容器详细信息

docker inspect 容器id

redis数据结构

基本命令

keys *  #查看所有的key
type key  #查看key的数据类型
ttl  key  #查看key的剩余过期时间
persist key  #取消key的过期时间
dbsize    #计数key
exists key #判断key是否存在  返回1存在,0不存在

strings类型

set   设置key
get   获取key
append  追加string
mset   设置多个键值对
mget   获取多个键值对
del  删除key
incr  递增+1
decr  递减-1

list类型

lpush         从列表左边插
rpush         从列表右边插
lrange          获取一定长度的元素  lrange key  start stop
ltrim               截取一定长度列表
lpop                 删除最左边一个元素
rpop                     删除最右边一个元素
lpushx/rpushx                key存在则添加值,不存在不处理

sets集合

sadd/srem   添加/删除 元素
sismember   判断是否为set的一个元素
smembers    返回集合所有的成员
sdiff             返回一个集合和其他集合的差异
sinter           返回几个集合的交集
sunion          返回几个集合的并集

哈希数据集合

hset 设置散列值
hget  获取散列值
hmset  设置多对散列值
hmget  获取多对散列值
hsetnx   如果散列已经存在,则不设置(防止覆盖key)
hkeys     返回所有keys
hvals     返回所有values
hlen      返回散列包含域(field)的数量
hdel     删除散列指定的域(field)
hexists    判断是否存在

 redis发布订阅

接收消息

SUBSCRIBE yinyue 

发送消息

PUBLISH yinyue nihao 

正则表达式接收消息

PSUBSCRIBE yi* 

redis持久化

redis提供了RDB持久化的功能

RDB持久化产生的RDB文件是一个经过压缩二进制文件,这个文件被保存在硬盘中,redis可以通过这个文件还原数据库当时的状态

redis持久化指RDB实践

优点:速度快,适合做备份,主从复制就是基于RDB持久化功能实现

rdb通过再redis中使用save命令触发 rdb

开启rdb功能,需要修改redis-rdb.conf

vim redis-rdb.conf

内容为

daemonize yes
port 6379
logfile /data/6379/redis.log
dir /data/6379              
dbfilename  dbmp.rdb 
bind  127.0.0.1           
save 900 1           
save 300 10         
save 60  10000  

递归创建 data/6379目录

mkdir -p /data/6379

开启redis服务端,支持rdb功能

 redis-server redis-rdb.conf

进入redis

redis-cli

创建数据

set addr alex

查看所有数据

keys *

保存数据

save

查看保存数据的位置 数据保存在dbmp.rdb

cd /data/6379/

redis持久化之AOF

优点:最大程序保证数据不丢
缺点:日志记录非常大

修改redis-aof.conf配置如下

vim redis-aof.conf

修改内容

daemonize yes
port 6379
logfile /data/6379/redis.log
dir /data/6379
appendonly yes
appendfsync everysec

在启动前确保

data/6379的目录下没有数据

cd /data/6379/

删除内容

rm -rf *

指定aof配置文件启动

redis-server redis-aof.conf  

redis 持久化方式有那些 有什么区别

rdb: 基于快照的持久化,速度更快,一般用于备份,主从复制也依赖rdb持久化功能

aof: 以追加的方式记录redis操作日志的文件.可以最大程度的保证redis数据安全,类似于mysql的binlog

 redis不重启RDB切换到AOF备份

查看redis-server版本信息

redis-server -v

创建一个新的配置文件redis-new-rdb.conf

vim redis-new-rdb.conf 

修改内容

daemonize yes
port 6379
logfile /opt/6379/redis.log
dir /opt/6379
appendonly yes
appendfsync everysec

创建文件夹

mkdir -p /opt/6379

查看redis是否启动

ps -ef|grep redis

杀死进程

kill -9 4851

启动服务

redis-server redis-new-rdb.conf 

启动客户端

redis-cli

 redis主从同步

准备3个配置文件

redis-6379.conf

vim redis-6379.conf

内容

port 6379
daemonize yes
pidfile /data/6379/redis.pid
loglevel notice
logfile "/data/6379/redis.log"
dbfilename dump.rdb
dir /data/6379
protected-mode no

创建文件夹

mkdir -p /data/6379

redis-6380.conf

vim redis-6380.conf

内容

port 6380
daemonize yes
pidfile /data/6380/redis.pid
loglevel notice
logfile "/data/6380/redis.log"
dbfilename dump.rdb
dir /data/6380
protected-mode no
slaveof  127.0.0.1  6379

创建文件夹

mkdir -p /data/6380

redis-6381.conf

vim redis-6381.conf

内容

port 6381
daemonize yes
pidfile /data/6381/redis.pid
loglevel notice
logfile "/data/6381/redis.log"
dbfilename dump.rdb
dir /data/6381
protected-mode no
slaveof  127.0.0.1  6379

创建文件夹

mkdir -p /data/6381

分别启动三个redis数据库实例

redis-server redis-6379.conf
redis-server redis-6380.conf
redis-server redis-6381.conf 

查看配置信息方法

redis-cli p 6379

进入后输入

info replication

手动切换主库,模拟主库挂掉

在主库下输入

shutdown

退出 选6380当主库

登录6381从库

redis-cli -p 6380 

去掉slave身份

slaveof on one

6380就变成了主库

退出6380

登录6381从库

redis-cli -p 6381

绑定主库6380

slaveof  127.0.0.1 6380 

6381就是6380的主库

redis自动切换主从库,是哨兵功能

先清除数据

rm -rf /data/*

创建目录

mkdir -p /data/{6379,6380,6381}

杀死所有redis进程

pkill redis

分别启动三个redis数据库实例

redis-server redis-6379.conf 
redis-server redis-6380.conf 
redis-server redis-6381.conf 

查看主库配置信息

redis-cli -p 6379 info replication

创建三个哨兵,检测redis主从状态

redis-26379.conf

配置文件 在写入文件要把注释删除

port 26379  
dir /var/redis/data/
logfile "26379.log"

// 当前Sentinel节点监控 127.0.0.1:6379 这个主节点
// 2代表判断主节点失败至少需要2个Sentinel节点节点同意,少数服从多数 
// s18ms是主节点的别名
sentinel monitor s18ms 127.0.0.1 6379 2

//每个Sentinel节点都要定期PING命令来判断Redis数据节点和其余Sentinel节点是否可达,如果超过30000毫秒30s且没有回复,则判定不可达
sentinel down-after-milliseconds s18ms 30000

//当Sentinel节点集合对主节点故障判定达成一致时,Sentinel领导者节点会做故障转移操作,选出新的主节点,
原来的从节点会向新的主节点发起复制操作,限制每次向新的主节点发起复制操作的从节点个数为1
sentinel parallel-syncs s18ms 1

//故障转移超时时间为180000毫秒
sentinel failover-timeout s18ms 180000
daemonize yes  

快速写入其他数据方法

sed  "s/26379/26380/g"  redis-26379.conf > redis-26380.conf
sed  "s/26379/26381/g"  redis-26379.conf > redis-26381.conf

redis-26380.conf

port 26380 
dir /var/redis/data/
logfile "26380.log"
sentinel monitor s18ms 127.0.0.1 6380 2
sentinel down-after-milliseconds s18ms 30000
sentinel parallel-syncs s18ms 1
sentinel failover-timeout s18ms 180000
daemonize yes  

redis-26381.conf

port 26381 
dir /var/redis/data/
logfile "26381.log"
sentinel monitor s18ms 127.0.0.1 6380 2
sentinel down-after-milliseconds s18ms 30100
sentinel parallel-syncs s18ms 1
sentinel failover-timeout s18ms 180000
daemonize yes  

创建数据存储目录

mkdir -p /var/redis/data/

分别启动三个哨兵

redis-sentinel redis-26379.conf 
redis-sentinel redis-26380.conf 
redis-sentinel redis-26381.conf 

查看哨兵身份信息

redis-cli -p 26379 info sentinel

redis-cluster的集群搭建

准备6个节点,配置6个配置文件

关闭redis的所有服务

pkill redis

配置redis-7000.conf

vim redis-7000.conf

内容

port 7000
daemonize yes
dir "/opt/redis/data"
logfile "7000.log"
dbfilename "dump-7000.rdb"
cluster-enabled yes
cluster-config-file nodes-7000.conf
cluster-require-full-coverage no

配置其他redis-7001.conf ,redis-7002.conf ,redis-7003.conf ,redis-7004.conf ,redis-7005.conf   

sed "s/7000/7001/g" redis-7000.conf > redis-7001.conf
sed "s/7000/7002/g" redis-7000.conf > redis-7002.conf
sed "s/7000/7003/g" redis-7000.conf > redis-7003.conf
sed "s/7000/7004/g" redis-7000.conf > redis-7004.conf
sed "s/7000/7005/g" redis-7000.conf > redis-7005.conf

创建日志文件夹

mkdir -p /opt/redis/data

启动6个redis数据库

redis-server redis-7000.conf 
redis-server redis-7001.conf 
redis-server redis-7002.conf 
redis-server redis-7003.conf 
redis-server redis-7004.conf 
redis-server redis-7005.conf 

现在还不能写数据要进行redis-cluster集群槽位的分配
redis官方提供了ruby语言的脚本,进行自动的槽位分配

安装准备ruby语言的环境,用于自动化创建redis集群

wget https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.1.tar.gz

解压

tar -xvf ruby-2.3.1.tar.gz

进入ruby-2.3.1

cd ruby-2.3.1/

配置路径

./configure --prefix=/opt/ruby/

安装软件

make && make install

配置环境变量

cd /opt/ruby/bin
pwd

编辑文件

vim /etc/profile

写如配置信息

PATH="/opt/python36/bin/:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/opt/s18tngx/sbin:/opt/node-v8.6.0-linux-x64/bin:/opt/ruby/bin"

读取配置信息

 source /etc/profile

查看是否配置成功

ruby -v

安装ruby gem 包管理工具

wget http://rubygems.org/downloads/redis-3.3.0.gem
gem install -l redis-3.3.0.gem

找到ruby创建redis集群的脚本工具

find /opt  -name redis-trib.rb

显示路径

/opt/redis-4.0.10/src/redis-trib.rb

此时就可以通过ruby来创建redis的集群工具了,进行槽位分配

/opt/redis-4.0.10/src/redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005

然后输入yes大功告成

 可以运行redis客户端

redis-cli -p 7000  -c    #-c 开启集群模式 

 

posted @ 2019-04-06 20:40  等待の喵  阅读(255)  评论(0编辑  收藏  举报