Redis初步学习

Redis

1.Nosql

Not only Sql

大数据时代的3V:

  1. 海量Volume

  2. 多样Variety

  3. 实时Velocity

互联网需求的3高:

  1. 高并发

  2. 高可扩

  3. 高性能

文档数据库MongDB

NotSql聚合类型

  • KV键值

  • Bson

  • 列族

  • 图形

NoSQL数据库的四大分类

  1. kv键值:

​ 介绍{新浪:BerkeleyDB+redis,阿里:memcache+redis}

​ 2.文档型数据库

​ bson格式比较多:

  • CouchDB

  • MongoDB:基于分布式文件存储的数据库

​ 3.列存储数据库

  • ​ Cassandra

  • ​ HBase

  • ​ 分布式文件系统

​ 4.图关系数据库

  • ​ 关系图
  • ​ 构建关系图谱
  • ​ Neo4J
  • ​ nfoGrid

四者对比

分布式数据库CAP原理

  1. 传统的ACID分别是
  • ​ A(Atomoicity)原子性

  • ​ C(Consistency)一致性

  • ​ I(Isolation)独立性

  • ​ D(Durability)持久性

    2.CAP

  • ​ C:(Consistency)强一致性

  • ​ A:(Availability)可用性

  • ​ P:(Partition tolerance)分区容错性

  1. BASE
  • ​ 基本可用(Basically Available)

  • ​ 软状态(soft state)

  • ​ 最终一致(Eventually consistent)

2.Redis

Redis:REmote DIctionary Server(远程字典服务器)

Redis特点:

  1. 支持数据的持久化

  2. 支持简单的key-value类型的数据,同时还提供list,set,hash,zset数据类

  3. 支持数据的备份,即master-slave模式的数据备份

Redis默认状态:

1.单进程 -----------以epoll函数包装进行

2.默认16个数据库,从0开始 可以用select 下标 选择库

3.默认端口是6379

命令:http://doc.redisfans.com/index.html

Redis的五大数据类型:

  • String(字符串)

  • Hash(哈希)

  • List(列表)

  • Set(集合)

  • Zset(有序集合)

key
keys *
exists key
move key db
expire key 秒钟
ttl key查看key多少秒过期 -1永不过期 -2已过期
type key查看key的类型
String
set/get/del/append/strlen
Incr/decr/incrby/decrby
getrange/setrange指定区域范围内的值[]/设定区域范围内的值 执行覆盖
setex(set with expire)/setnx键秒值/不存在添加
mset/mget/msetnx
getset先获值 后覆盖值
list(字符串链表)
1.Lpush/rpush/Lrange key start stop反的进 反的出/相反/ 类似foreach
2.Lpop /rpop移除末端数据并输出/移除始端数据并输出
3.Lindex按照索引下标获得元素
4.llen长度
5.lrem key value删除N个Value
6.Ltrim key index index key开始index 结束index 截取指定范围的值赋值给key
7.rpopLpush 源列表 目的列表
8.lset key index value
9.linsert key before/after 值1 值2插值在值1 前/后
Set
1.sadd key 值1 值2 值 /smembers key /sismenmber 是否有元在集合里面
2.scard获取集合里面的元素个数
3. srem key value删除集合中元素
4.srandmember key某个整数(随机出几个数)
5.spop key随机出栈
6.smove key1 key2 value在key1里value值,赋值给key2
7.集合类{差集:sdiff,交集:sinter,并集:sunion}
Hash
1.hset/hget/hmset/hmget/hgetall/hdel
2.hlen长度
3.hkeys/hvals
4.hincrby/hincrbyfloat
5.hsetnx
Zset
1.zadd key score value score2 vlaue2 / zrange withscores
2.zrangebyscore key 开始score 结束score:(不包含 limt 下标 多少步
3.zrem key 某score 下对应的value值 删除
4.zcard/zcount key score区间/zrank key value值,获得下标
5.zrevrank key values 逆序获得下标值
6.zrevrange 逆序打印
7.zrevrangebyscore key socre socre2 结束到开始

3. Redis配置文件

解析配置文件Redis.conf
Redis日志级别
  1. debug
  2. verbose
  3. notice
  4. warning
Redis 6种缓存策略
  1. volatile-lru :使用lru算法移除key,只对设置了过期时间的键
  2. allkeys-lru :使用LRU算法移除key
  3. volatile-random :在过期集合中移除随机的key,只对设置了过期时间的键
  4. allkeys-random:移除随机的key
  5. volatile-ttl :移除那些ttl键最小的key,即那些最近要过期的key
  6. noeviction:不进行移除,只针对写操作,只是返回错误信息
**Redis 持久化 RDB/aof **
RDB(Redis Database)
  • 保存的是dump.rdb文件
  • 默认自动保存三种方式(触发自动保存): save 秒 修改key数量
  1. save 900 1
  2. save 300 10
  3. save 60 10000
  • 如果不设置自动保存 sava “ ”
优势
  • 适合大规模的数据恢复
  • 对数据完整性和一致性要求不高
劣势
  • redis突然down了,会丢失最后一次快照的所有修改
  • fock的时候,内存的数据多一份。大概两倍的膨胀性
如何停止
  • 动态所有停止RDB保存规则的方法:redis-cli config set save “”
总结 :

  • ​ Rdb是一个很紧凑的文件
  • ​ Rdb在保存rdb文件 父进程唯一需要做的就是fock一个子进程,所有工作都从子进程来保存与AOF相比,在恢复大的数据集的时候,RDB方式会更快一些

  • 数据丢失风险大
  • RDB需要经常fock一个子进程来保存数据到硬盘上,当数据集比较大的时候,fock的过程非常耗时导致redis在一些毫秒级不能响应客户端请求
Aof(append only file)

appendonly no 默认关闭

默认文件名字 appendonly.aof

记录每一步操作指令

Appendfsync :Always:同步持续化,性能差数据完整性比较好

​ Everysec:出厂默认推荐,异步操作,每秒记录,一秒内宕机,有数据丢是

​ No

修复 Redis-check-aof --fix 文件 进行修复

Rewrite :

  • 是什么:Aof采用文件追加,越来越大,新增了重写机制,当aof文件大小超过阙值时,redis就会启动Aof文件的内容进行压缩,只保留可以恢复数据的最小指令集,可以使用命令bgrewriteaof

  • 重写原理:Aof文件持续增大 ,会fork出一条新进程将文件重写

  • 触发机制:Redis 会记录上次重写时Aof大小 默认配置是当文件大小是上次Rewrite后大小的一倍且文件大于64MB触发。

优势:

每秒同步,每修改同步,不同步

劣势:
  • 相同数据集的数据 aof > Rdb,恢复速度慢于Rdb / Aof运行效率要慢于rdb,每秒同步策略效率较好,不同步效率和rdb相同
小总结:

  • Aof 只进行追加的日志文件
  • Redis 可以在aof文件过大,自动在后台对aof进行重写
  • Aof有序保存了对数据库执行的所有写入操作,这些操作对Redis协议的格式保存,因此Aof文件的内容非常容易被人读懂。

  • 相同数据集的数据 aof > Rdb,恢复速度慢于Rdb
  • 所使用的fsync策略,aof速度会慢于rdb
Redis:先寻找aof文件 再寻找RDB文件。
总结:

在这里插入图片描述

在这里插入图片描述

Redis的事务

  • 一组命令的集合,所有命令都会序列化

  • 开启事务 MULTi

  • 执行 EXEC

  • 回滚 DISCARD

  • 常用命令:DISCARD ,EXEC ,MULTi,UNWATCH,WATCH KEY

策略
  • 正常执行 MULTI----EXEC
  • 放弃事务 MULTI----DISCARD
  • 全体连坐 指令错误 直接全部DISCARD
  • 冤头再债主 执行时错误,只执行的命令错误 其他执行
  • watch监控 :乐观锁
Redis事务 部分支持。

Redis消息订阅发布

  • SUBSCRIBE 频道1,频道2,频道3
  • PUBLISH 频道 消息
  • 通配符 SUBSCRIBE new*

Redis 的复制

  • master 写,slaver 读 / master down机了, slaver 原地待命, 等待master 回

    / slaver down机了,变回master 需要重新连接 (配置到redis.conf 无视)。

  • 读写分离/容灾恢复

  • 命令

  • slaverof 主机号 端口

  • info replication 查看信息

  • slaverof no one 从slaverof 变为master

复制原理

在这里插入图片描述

方案

  1. 一 master 二 slaver (中心化太深)
  2. 去中心化 master ----- 一(slaver)-----slavers
  3. master(down) ----- slaver~ slaverof no one ~ change master-----slavers ~slaver

哨兵模式

  1. 生成一个sentinel.conf配置文件
  2. sentinel monitor 主机6379 主机号 端口 1
  3. 启动Redis-sentinel 配置文件位置

策略

  1. 当master down了 会从 slaver 投票选出一个当master
  2. 之前的master 又 up了 会是新的master 的slaver

复制延时

  1. 先在master操作,同步更新到salve上, 有一定的延迟,当系统繁忙,延迟会加重,slave机器数量也会使这个问题加重。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值