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
- redis-server redis服务器
- redis-cli redis命令行客户端
- redis-benchmark redis性能测试工具
- redis-check-aof AOF文件修复工具
- 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 开启集群模式