redis看这一篇就够了
redis的下载安装
准备相关依赖
yum install gcc
下载安装包
# 切换到存放安装包到目录
cd /usr/local
# 下载安装包
wget http://download.redis.io/releases/redis-4.0.10.tar.gz
# 等待下载完成
解压
# 默认解压是当前目录
tar -zxvf redis-4.0.10.tar.gz
# 解压到制定目录
tar -zxvf redis-4.0.10.tar.gz /tmp
# 等待解压完成
编译安装
# 切换到redis源码目录
cd redis-4.0.10
# 编译源文件
make && make install
# 编译好后,/usr/local/redis-4.0.10/src/下面有编译好的redis指令
配置文件
# 在/etc下创建存放redis配置的目录
mkdir /etc/redis-conf
# 创建配置文件
vim /etc/redis-conf/redis-6379.conf
# 相关配置
编辑配置文件
port 6379 # 运行在6379的redis数据库实例
daemonize yes # 后台运行redis
pidfile /data/6379/redis.pid # 存放redis pid的文件
loglevel notice # 日志等级
logfile "/data/6379/redis.log" # 指定redis日志文件的生成目录
dir /data/6379 # 指定redis数据文件夹的目录
protected-mode yes # 安全模式
requirepass qiuxiang # 设置redis的密码
"""
注意:1./data/6379/这个目录要先创建,不然会报错
"""
redis的启动
启动redis服务
# 指定用哪个配置来启动
redis-server /etc/redis-conf/redis-6379.conf
启动redis客户端
# 根据服务配置的端口指定端口,有密码加 -a password
redis-cli -p6370
redis的基本数据类型及使用
字符串strings
# 设置key set key value
127.0.0.1:6379> set name 'aaa'
OK
# 获取value get key
127.0.0.1:6379> get name
"tt"
# 覆盖key set key value
127.0.0.1:6379> set name 'bbb' #覆盖key
OK
# 获取value get key
127.0.0.1:6379> get name
"bbb"
# 追加key的string
127.0.0.1:6379> append name 'AAA'
(integer) 6
# 获取value
127.0.0.1:6379> get name
"bbbAAA"
# 设置多个键值对 mset key1 value1 key2 value2
127.0.0.1:6379> mset name1 'aaa' name2 'bbb'
OK
127.0.0.1:6379> get name1
"alex"
127.0.0.1:6379> get name2
"xiaopeiqi"
# 找到所有key keys partten
127.0.0.1:6379> keys *
1) "name"
2) "name1"
3) "name2"
# 获取多个value
127.0.0.1:6379> mget name1 name2 name
1) "aaa"
2) "bbb"
3) "bbbAAA"
# 删除key
127.0.0.1:6379> del name
(integer) 1
# 获取不存在的value,为nil
127.0.0.1:6379> get name
(nil)
# string类型实际上不仅仅包括字符串类型,还包括整型,浮点型。redis可对整个字符串或字符串一部分进行操作,而对于整型/浮点型可进行自增、自减操作。
127.0.0.1:6379> set num 10
OK
127.0.0.1:6379> get num
"10"
# 给num string 加一 INCR 命令将字符串值解析成整型,将其加一,最后将结果保存为新的字符串值,可以用作计数器
127.0.0.1:6379> incr num
(integer) 11
127.0.0.1:6379> get num
"11"
# 递减1
127.0.0.1:6379> decr num
(integer) 10
# 递减1
127.0.0.1:6379> decr num
(integer) 9
127.0.0.1:6379> get num
"9"
# 待更新
列表lists
# 从左边插入lpush
127.0.0.1:6379> lpush name3 'aaa' 'bbb' 'ccc'
(integer) 3
# 查看name3中的全部数据
127.0.0.1:6379> lrange name3 0 -1
1) "ccc"
2) "bbb"
3) "aaa"
# 查看name3的长度
llen name3
# 从右边插入rpush
127.0.0.1:6379> rpush name4 'AAA' 'BBB' 'CCC'
(integer) 3
# 查看name4中的全部数据
127.0.0.1:6379> lrange name4 0 -1
1) "AAA"
2) "BBB"
3) "CCC"
# key存在则添加 dsb元素,key不存在则不作处理
lpushx duilie2 'dsb'
# 截取队列的值,从索引0取到2,删除其余的元素
ltrim duilie 0 2
# 删除左边的第一个
lpop
# 删除右边的第一个
rpop
# 待更新
集合sets
# 添加集合,有三个元素,不加引号就当作字符串处理
127.0.0.1:6379> sadd age 18 19 20
(integer) 3
# 查看集合age中的数据
127.0.0.1:6379> smembers age
1) "18"
2) "19"
3) "20"
# 删除age中的某个成员
127.0.0.1:6379> srem age 20
(integer) 1
127.0.0.1:6379> smembers age
1) "18"
2) "19"
# 判断该成员是否是集合age中的信息,不存在返回0,存在返回1
127.0.0.1:6379> sismember age 220
(integer) 0
# 再把该成员添加到age集合中,后查看
127.0.0.1:6379> sadd age 220
(integer) 1
127.0.0.1:6379> smembers age
1) "18"
2) "19"
3) "220"
# 添加新集合gender
127.0.0.1:6379> sadd gender man women 220
(integer) 2
127.0.0.1:6379> smembers gender
1) "women"
2) "man"
3) "220"
# 找出集合gender中有的,而age中没有的元素
127.0.0.1:6379> sdiff gender age
1) "women"
2) "man"
# 找出age中有,而gender没有的元素
127.0.0.1:6379> sdiff age gender
1) "18"
2) "19"
# 找出age和gender的交集
127.0.0.1:6379> sinter age gender
1) "220"
# 找出age和gender的并集
127.0.0.1:6379> sunion age gender
1) "women"
2) "220"
3) "19"
4) "18"
5) "man"
哈希hash
redis hash是一个string类型的field和value的映射表
语法 hset key field value
# 插入一条hash数据
127.0.0.1:6379> hset user:paul age 18
(integer) 1
# 添加一个school内容
127.0.0.1:6379> hset name:paul school qinghua
(integer) 1
# 获取name:paul的学校
127.0.0.1:6379> hget name:paul school
"qinghua"
# 获取多对name:paul的 值
127.0.0.1:6379> hmget name:paul gender school
1) "man"
2) "qinghua"
# 获取name:paul的所有key
127.0.0.1:6379> hkeys name:paul
1) "school"
2) "gender"
3) "age"
# 获取name:paul的所有vals
127.0.0.1:6379> hvals name:paul
1) "qinghua"
2) "man"
3) "18"
# 获取name:paul的多个值
127.0.0.1:6379> hmget name:paul age school
1) "18"
2) "qinghua"
# 判断name:paul是否有age,不存在返回0,存在返回1
127.0.0.1:6379> hexists name:paul age
(integer) 1
# 新增一个字段
127.0.0.1:6379> hset name:aaa age 220
(integer) 1
127.0.0.1:6379> hvals name:aaa
1) "220"
# 待更新
有序集合sorted sets
# 待更新
redis持久化存储
持久化的功能,这个功能可以将redis在内存中的的状态保存到硬盘中,它可以手动执行。也可以在redis.conf中配置,定期执行。
Redis DataBase
RDB持久化产生的RDB文件是一个压缩的二进制文件,这个文件被保存在硬盘中,redis可以通过这个文件还原数据库当时的状态。
其原理是:在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot),它速度快,适合做备份,主从复制就是基于RDB持久化功能实现
# 配置
port 6379
daemonize yes
pidfile /data/6379/redis.pid
loglevel notice
logfile "/data/6379/redis.log"
dir /data/6379
protected-mode yes
requirepass haohaio
dbfilename dbmp.rdb # 持久化存储的文件名
save 900 1 # rdb机制 每900s 内存种有一个修改记录就自动存储
save 300 10 # 每 300s 10个修改记录
save 60 10000 # 每60s 10000修个记录
Append Only File
AOF(append-only log file):记录服务器执行的所有变更操作命令(例如set del等),并在服务器启动时,通过重新执行这些命令来还原数据集。AOF 文件中的命令全部以redis协议的格式保存,新命令追加到文件末尾。
优点:最大程度保证数据不丢失 (比RDB要好,因为RDB有可能丢失数据)
缺点:日志记录非常大
# 配置
daemonize yes
port 6379
logfile /data/6379/redis.log
dir /data/6379
dbfilename dbmp.rdb
requirepass redhat
save 900 1
save 300 10
save 60 10000
appendonly yes
appendfsync always
"""
appendfsync always 总是修改类的操作
appendfsync everysec 每秒做一次持久化
appendfsync no 依赖于系统自带的缓存大小机制
"""
AOF VS RDB
RDB:
"""
优点: 1.适合备份 2.恢复大数据集时速度比AOF快
缺点: 1.手动save 2.耗时长 3.备份时宕机数据易丢失
"""
AOL:
"""
优点: 1.追加到日志文件后面 2.数据不易丢失
缺点: 1.速度较慢 2.文件体积较大
redis主从同步
准备
# 准备三个redis库到配置文件
redis-6379.conf
redis-6380.conf
redis-6381.conf
# 配置三个配置文件的信息,同时在redis-6380.conf/redis-6381.conf添加配置,申明是6379的从库
slaveof 127.0.0.1 6379
# 在data中创建三个文件夹6379/,6380/,6381/
启动三个redis服务
# 启动这三个redis服务
redis-server -p 6379 /opt/redis-conf/redis-6379.conf
redis-server -p 6380 /opt/redis-conf/redis-6380.conf
redis-server -p 6381 /opt/redis-conf/redis-6381.conf
启动redis客户端
# 启动6379 redis的客户端
redis-cli -p 6379
插入数据
# 在启动的这个redis-cli中插入数据
set name 'aaa'
# 退出
exit
# 登录其他两个redis-cli验证
检测同步是否成功
# 登录6380客户端
redis-cli -p 6380
# 检测数据是否存在
keys *
# 退出6380,登录6381检测
故障时身份切换
# kill 6379进程,模拟主库挂掉
kill -9 进程id
# 检测
更改主库信息
# 登录6380
redis-cli -p 6380
# 更改slaveof信息
slaveof no one
# 退出6380
exit
更改从库信息
# 登录6381
redis-cli -p 6381
# 更改从库信息
slave no one
slave 127.0.0.1 6380
查看主从库信息
# 查看6380库的信息
redis-cli -p 6380 info replication
# 查看6381库的信息
redis-cli -p 6381 info replication
#
redis-sentinel
准备
# redis库的准备,同上,准备三个独立的redis库,和配置文件
配置
# redis库配置同上
# 配置三个哨兵
cd /opt/redis_conf
vim redis-26380.conf
vim redis-26381.conf
vim redis-26382.conf
# 写入三个配置文件
port 26379 # 哨兵的端口
dir /var/redis/data/
logfile "26379.log"
sentinel monitor mymaster 127.0.0.1 6379 2 # 监听主库的端口
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000
daemonize yes
启动哨兵
[root@qishi666 redis_conf]# redis-sentinel redis-26379.conf
[root@qishi666 redis_conf]# redis-sentinel redis-26380.conf
[root@qishi666 redis_conf]# redis-sentinel redis-26381.conf
检查哨兵是否成功通信
redis-cli -p 26379 info sentinel
常见问题
- 如果哨兵没有正常启动,那么就在哨兵的配置文件中的ip信息检验
- 如果哨兵没有正常通信,那么就从主从同步开始重新配置
redis集群
准备节点
vim redis-7000.conf
vim redis-7001.conf
vim redis-7002.conf
vim redis-7003.conf
vim redis-7004.conf
vim redis-7005.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 # 集群内部的配置文件
# 不同配置文件的端口不同
启动节点
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
检查
# 随便登录一个端口,写入数据
(error)CLUSTERDOWN Hash slot not served
# 报错,没有hash槽
准备ruby环境
# 下载ruby
wget https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.1.tar.gz
# 安装ruby
tar -xvf ruby-2.3.1.tar.gz
# 释放源
./configure --prefix=/opt/ruby/
# 编译
make && make install
# 配置环境变量
PATH=$PATH:/opt/ruby/bin
# ruby准备完成
安装ruby gem管理工具
# 下载
wget http://rubygems.org/downloads/redis-3.3.0.gem
# 安装
gem install -l redis-3.3.0.gem
#查看gem有哪些包
gem list -- check redis gem
# 安装redis-trib.rb命令
root@yugo /opt/redis/src 18:38:13]#cp /opt/redis/src/redis-trib.rb /usr/local/bin/
一键开始redis-cluster集群
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
# 集群完成
查看集群状态
redis-cli -p 7000 cluster info
redis-cli -p 7000 cluster nodes #等同于查看nodes-7000.conf文件节点信息
# 集群主节点状态
redis-cli -p 7000 cluster nodes | grep master
# 集群从节点状态
redis-cli -p 7000 cluster nodes | grep slave
测试写入数据
# 登录集群必须使用redis-cli -c -p 7000 必须加上-c参数
参考文档
redis看这一篇就够了的更多相关文章
- [转帖]nginx学习,看这一篇就够了:下载、安装。使用:正向代理、反向代理、负载均衡。常用命令和配置文件
nginx学习,看这一篇就够了:下载.安装.使用:正向代理.反向代理.负载均衡.常用命令和配置文件 2019-10-09 15:53:47 冯insist 阅读数 7285 文章标签: nginx学习 ...
- 关于 Docker 镜像的操作,看完这篇就够啦 !(下)
紧接着上篇<关于 Docker 镜像的操作,看完这篇就够啦 !(上)>,奉上下篇 !!! 镜像作为 Docker 三大核心概念中最重要的一个关键词,它有很多操作,是您想学习容器技术不得不掌 ...
- JVM内存模型你只要看这一篇就够了
JVM内存模型你只要看这一篇就够了 我是一只孤傲的鱼鹰 让我们不厌其烦的从内存模型开始说起:作为一般人需要了解到的,JVM的内存区域可以被分为:线程栈,堆,静态方法区(实际上还有更多功能的区域,并且这 ...
- 【java编程】ServiceLoader使用看这一篇就够了
转载:https://www.jianshu.com/p/7601ba434ff4 想必大家多多少少听过spi,具体的解释我就不多说了.但是它具体是怎么实现的呢?它的原理是什么呢?下面我就围绕这两个问 ...
- Java中的多线程=你只要看这一篇就够了
如果对什么是线程.什么是进程仍存有疑惑,请先Google之,因为这两个概念不在本文的范围之内. 用多线程只有一个目的,那就是更好的利用cpu的资源,因为所有的多线程代码都可以用单线程来实现.说这个话其 ...
- 2019-5-25-win10-uwp-win2d-入门-看这一篇就够了
title author date CreateTime categories win10 uwp win2d 入门 看这一篇就够了 lindexi 2019-5-25 20:0:52 +0800 2 ...
- 鸿蒙应用程序Ability(能力)看这一篇就够
本节概述 什么是Ability Ability分类 Ability生命周期 Ability之间跳转 什么是Ability Ability意为能力,是HarmonyOS应用程序提供的抽象功能.在Andr ...
- windows server 2019 域控批量新增不用,只看这一篇就够了,别的不用看
windows server 2019 域控批量新增不用,只看这一篇就够了,别的不用看 1. 新建excel表格 A B C D E 姓 名 全名 登录名 密码 李 四 李四 李四 test123!@ ...
- 什么是 DevOps?看这一篇就够了!
本文作者:Daniel Hu 个人主页:https://www.danielhu.cn/ 目录 一.前因 二.记忆 三.他们说-- 3.1.Atlassian 回答"什么是 DevOps?& ...
随机推荐
- stm32f407使用Keil uV5建立工程日志
目录结构 Common ——包括延时函数等公用函数 STM32F4_FWLIB ——固件库 Project ——UV5工程相关文件 Main ...
- [Redis-Python]发布订阅通过Redis异步发送邮件
接收订阅 #!/usr/bin/env pyhton # coding:utf-8 # @Time : 2020-02-16 21:36 # @Author : LeoShi # @Site : # ...
- Angular 从入坑到挖坑 - 组件食用指南
一.Overview angular 入坑记录的笔记第二篇,介绍组件中的相关概念,以及如何在 angular 中通过使用组件来完成系统功能的实现 对应官方文档地址: 显示数据 模板语法 用户输入 组件 ...
- 【全集】大数据Linux基础
课程介绍 本课程是由猎豹移动大数据架构师,根据公司大数据平台的运维情况,精心设计和打磨的大数据必备Linux课程.通过本课程的学习大数据新手能够少走弯路,快速掌握Linux常用命令及Shell编程,为 ...
- C# 获取鼠标在屏幕上的位置
获取鼠标位置及鼠标单击了哪个按键.private void GetMousePoint() { Point ms = Control.MousePosition; this.label ...
- 限制input输入框只能输入 数字
<input type="text" oninput = "value=value.replace(/[^\d]/g,'')">
- redis主从同步,总是显示master_link_status:down的解决方法
小编使用的redis的版本号是5.0.5,可能会略有不同,例如redis.conf配置文件中,没有slaveof这一项配置 使用命令配置主从复制 今天在使用命令slaveof或者是replicaof命 ...
- hydra-爆破工具的使用
0x01简介 hydra 是一个支持众多协议的爆破工具,在kali上集成,但也可以在windows上下载运行: github上的源码: https://github.com/vanhauser-thc ...
- 安全师(网络安全类pdf电子书籍)
2020-02-17 天气晴,西安. 今天找到一个可以下载网络安全(渗透,kali,web)电子书籍网站. https://www.secshi.com/
- 刷题79. Word Search
一.题目说明 题目79. Word Search,给定一个由字符组成的矩阵,从矩阵中查找一个字符串是否存在.可以连续横.纵找.不能重复使用,难度是Medium. 二.我的解答 惭愧,我写了很久总是有问 ...