Redis存储


1:Redis运行过程,也就是读写过程都是基于内存实现的key/value存储。对比与memcached而言,会基于异步方式(快照)同步到文件系统,实现数据的持久性存储。单一进程响应用户的所有的请求,具有主从架构。
2:单台服务器可以响应的100万级别的QPS
3:监听于TCP的6379端口

(一) Redis入门

前言:

  • 安装

 
 
yum install -y redis
  • /etc/redis.conf配置文件简要介绍

 
 
1:指明Redis绑定的IP地址
bind 0.0 .0 .0
2:指明监听TCP的端口
port 6379
3:开启tcp-backlog,避免在高并发过程中,Redis响应速度慢
tcp-backlog 511
4:设置密码
requirepass 123456
5:开启Unixsocket功能,如果客户端和服务端都是本机,将在内存中直接实现C/S数据交换,不会经过TCP拆包和封包处理
unixsocket /tmp/redis.sock
unixsocketperm 700
6:默认的快照速率
save 900 1 (表示:如果在 900秒内有 1条数据发生变化,那么执行快照操作)
save 300 10 (表示:如果在 300秒内有 10条数据发生变化,那么执行快照操作)
save 60 10000 (表示:如果在 60秒内有 10000条数据发生变化,那么执行快照操作)
7:指定redis可以使用的数据库有多少个,默认是 16
databases 16
  • 启动redis

 
 
systemctl start redis.service
  • 连接redis

 
 
1:方式一
redis-cli -h 192.168 .23 .10 -p 6379 (无密码登入,会报错,(error) NOAUTH Authentication required. 可以在redis的shell接口中 auth 123456,完成授权)
2:方式二
redis-cli -h 192.168 .23 .10 -p 6379 -a 123456 (有密码读入,已经被授权)
  • 选择数据库

 
 
由于在配置文件中默认定义使用 16个database,因此每次登入Redis时,可以选择使用哪个数据库
select 0:表示使用 0号数据库
select 1:表示使用 1号数据库
  • 清空数据库

 
 
flushdb :清空当前数据库
flushall :清空所有的库
  • 在Redis中的命令命令组

 
 
1:命令组与命令的联系
一个命令组中包含多个命令,可以使用 help @命令组,查看某个命令组中有多少命令,已经这些命令如何使用
help @string
help @server
2:也可以查看特定命令的用法
help LLEN
help STRLEN

(二) Redis常用命令介绍

Redis命令参考手册 https://redis.io/commands
各种语言的API接口:https://redis.io/clients

  • Redis有很多的常用命令

 
 
1:赋值与取值 (set key value [EX seconds] [PX milliseconds] [NX|XX])
set uplooking ops
get uplooking
EX:表示超时时长
NX:如果一个键不存在则创建,存在不创建
XX:如果一个键存在则创建,不存在不创建
2:判断一个键值是否存在, 如果存在返回整数类型 1 ,否则返回 0
exists uplooking
3:追加值
append uplooking " java"
4:删除键
del key [ key.....]
del uplooking
5:设置一个整数值,让数值增加
set number 1
incr number (加 1
decr number (减 1
6:使用keys命令搜索已经设置的 key
keys 正则表达式
? 匹配一个字符
* 匹配任意个(包括 0个)字符
[] 匹配括号间的任一个字符,可以使用 "-" 符号表示一个范围,如 a[b-d] 可以匹配 "ab", "ac", "ad"
\x 匹配字符x,用于转义符号,如果要匹配 "?" 就需要使用 \?
例如:keys * :查看有哪些 key
  • Redis中的5种数据结构

 
 
Redis的数据结构指的是key-value中value的数据结构,还记得Redis作为ELK的消息中间件吗?使用的是Redis的list数据结构
Redis的数据结构有5中,也就是说,value的结构有五种
1:string
例如:
set uplooking ops
2listvalue就是一个 string数组,操作这组 string时,可以像对待栈一样使用pop和push操作,但是这个栈两端都能进行操作;也可以像对待数组一样使用一个 index参数来操作。 list的操作命令略杂,主要分为两类:L开头的和R开头的,L代表 LEFT或者 LIST,进行一些从列表左端进行的操作,或者一些与端无关的操作;R代表 RIGHT,进行一些从列表右端进行的操作
例如:
使用 help @ list可以查看帮助
lpush uplooking java (给uplooking键对应的列表添加一个值)
lindex uplooking 0 (通过索引从uplooking中取值)
lpush uplooking ops (从左边插入值)
rpush uplooking c++ (从右边插入值)
lpop uplooking (从左边pop一个值)
rpop uplooking (从右边pop一个值)
lset uplooking 0 Python (将索引为 0对应的值改为Python)
3set:用于存储一组不重复的值,也可以进行一些集合的操作,就像数学上的集合,它是无序的,且可以就交集、并集、补集运算
例如:
sadd home laoge dage zhongge xiaoge xiaoxiaoge (创建一个home集合,集合中有五个元素)
sismember home dage (查看home集合中是否有dage元素)
sadd home1 dage xiaoge niubi tainiubi (再创建一个集合)
sinter home home1 (求home和home1两个集合的交集)
sunion home home1 (求home和home1两个集合的并集)
smembers home (查看集合中所有的元素)
spop home1 (在home1集合中随机删除一个元素)
4:sorted set:类似 set,但是sorted set里每个元素都有一个score,这个score可用于排序和排名
例如:
del home home1 (删除之前的两个 set
help @sorted_set
zadd home1 1 niubi 2 tainiubi (创建一个有序集合,给两个元素)
5hashhash结构,其实就是 value本身就是一组 key- value对,不过redis将这里的 key称为 field,也就是 value是一组 field- value
例如:
help @ hash
hset home2 class ops (设置值)
hget home2 class (取值)
hdel home2 class (删除值)
hkeys home2 (查看home2中所有的 field)
hvals home2 (查看home2中所有的 value)

(三) Redis 其他知识点介绍

这里的事务与MySQL的事务类似:多个操作要么一次性执行完毕,要么都不执行

  • 使用multi开启一个事务

 
 
multi (开启一个事务日志)
set name yhy
set age 25
set address changsha
exec (提交,执行)

(四) Redis 其他知识点介绍


  • connection命令介绍

 
 
AUTH password
summary: Authenticate to the server
since: 1 .0 .0
ECHO message
summary: Echo the given string
since: 1 .0 .0
PING [message]
summary: Ping the server
since: 1 .0 .0
QUIT -
summary: Close the connection
since: 1 .0 .0
SELECT index
summary: Change the selected database for the current connection
since: 1 .0 .0
  • server相关的命令介绍

 
 
help @ server
client setname yhy_client (设置客户端名为yhy_client)
client getname (查看当前的客户端的名称)
info (查看服务器端的各个参数)
config get bind (拿到bind指令的值)
ocnfig set bind
dbsize (查看当前数据库的键值对数量)
  • Redis的发布与订阅功能

 
 
1:什么是发布(publish)与订阅功能(subscribe),什么是消费者与生产者
生产者把需要发布的信息发布到固定的队列或者频道,消费者从对应的队列或者频道中取出信息
2:使用subscribe命令订阅一个频道
subscribe uplooking (订阅一个uplooking频道)
3:使用publish发布消息
publish uplooking "hello uplooking" (在uplooking频道发布一条消息“hello uplooking”)
4:使用正则表达式订阅频道
psubscribe uplooking.*
  • Redis持久化实现

 
 
1:RDB
基于snapshot实现持久化存储,数据文件叫dump.rdb
save 900 1
save 300 10
save 60 10000
2:AOF
记录每一次的写操作于文件中,实现数据持久化
appendonly no

(五) Redis 主从复制

准备环境:主-192.168.23.10, 从-192.168.23.11, 从-192.168.23.12

  • 主从复制

 
 
一主可以有多从,支持链式连级
  • 一主多从

 
 
1:修改从服务器的配置文件/etc/redis.conf
bind 0.0 .0 .0
port 6379
slaveof 192.168 .23 .10 6379
masterauth 123456
requirepass 123456
2:先连接至Redis服务端,通过命令设置主从,但是也需要想编辑/etc/redis.conf配置文件
bind 0.0 .0 .0
port 6379
masterauth 123456
requirepass 123456
同步的时候在命令行输入:slaveof 192.168 .23 .10 6379
3:登入主节点,使用info replication查看从节点信息
127.0 .0 .1: 6379> info replication
# Replication
role:master
connected_slaves: 2
slave0: ip= 192.168 .23 .11,port= 6379,state=online,offset= 7715,lag= 0
slave1: ip= 192.168 .23 .12,port= 6379,state=online,offset= 7715,lag= 1
master_repl_offset: 7715
repl_backlog_active: 1
repl_backlog_size: 1048576
repl_backlog_first_byte_offset: 2
repl_backlog_histlen: 7714
4:登入从节点,执行keys * 命令,看看是否可以查看到主节点的keys
keys *
  • Redis的sentinel机制(sentinel节点IP为:192.168.23.10) 
    • 万一主节点打击,主从模型将会停止工作,为了解决这个问题,Redis提供了一个sentinel(哨兵),以此来实现主从切换的功能,一旦主节点宕机了,sentinel将会在从节点中挑一个作为主节点。与zookeeper类似
  • 编辑/etc/redis-sentinel.conf文件

 
 
1: mymaster指定主节点的主机名(可以随便取一个名),127.0.0.1 6379:指明主节点的IP和端口,2:表示一个节点要成为主节点必须拥有的票数,这里默认是2,因此最好启动2个以上centinel进程。这个指令可以写多个,表明sentinel可以监控多个Redis主从架构。这里改为1,启动centinel进程演示
sentinel monitor mymaster 192.168.23.10 6379 1
2:指明主节点多少秒联系不上,认定主服务器宕机,默认30000毫秒
sentinel down-after-milliseconds mymaster 3000
3:从新指定主服务器后,允许几台从服务器去主服务器同步数据
sentinel parallel-syncs mymaster 1
4:指定故障转移的超时时长,如果180000毫秒,无法在从服务器选择主服务器,则故障转移失败
sentinel failover-timeout mymaster 18000
5: 指定与master通信的密码
sentinel auth-pass mymaster 123456
  • 启动systemctl

 
 
systemctl start redis-sentinel.service
  • 登入Sentinel,查看主从状态

 
 
redis- cli -p 26379
127.0 .0 .1: 26379> info Sentinel
# Sentinel
sentinel_masters: 1
sentinel_tilt: 0
sentinel_running_scripts: 0
sentinel_scripts_queue_length: 0
sentinel_simulate_failure_flags: 0
master0:name=mymaster,status=ok,address= 192.168 .23 .10: 6379,slaves= 2,sentinels= 1
  • 停止Redis的master节点,登入sentinel查看节点信息(此时的主节点已经是192.168.23.12了)

 
 
systemctl stop redis.service
[root @7 ~] # redis-cli -p 26379
127.0 .0 .1: 26379> info sentinel
# Sentinel
sentinel_masters: 1
sentinel_tilt: 0
sentinel_running_scripts: 0
sentinel_scripts_queue_length: 0
sentinel_simulate_failure_flags: 0
master0:name=mymaster,status=ok,address= 192.168 .23 .12: 6379,slaves= 2,sentinels= 1
127.0 .0 .1: 26379> sentinel masters

(五) Redis 集群 (扩展)


  • 概念说明

 
 
集群中的各个Redis节点都会保存所有的 key/ value的matadata,但是只会保存一部分的真实数据。也就是说任何一个节点都知道集群中的任意一个 key/ value保存在哪个Redis节点上,但是并不一定保存了这个 key/ value键值对。
  • 业界公认的开源解决方案

 
 
1:codis(豆瓣开源)
2:cerberus(湖南电视台开源)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值