Redis是一个基于内存的keyvalue形式存储数据的数据库
常用的五种数据格式指的是value
1string(字符串)
2hash(哈希键值对存储对象)Hashmap
3list(列表 linklist)
4集合(set)无需集合 无重复元素 类似于java中的hashset
5有序集合(sorted set/zset)有排序无重复元素
第一种:
String字符串
- SET** key value 设置指定key的值
- GET key 获取指定key的值
- SETEX key seconds value 设置指定key的值,并将 key 的过期时间设为 seconds 秒
- SETNX key value 只有在 key 不存在时设置 key 的值
第二种
hash哈希 - HSET** key field value 将哈希表 key 中的字段 field 的值设为 value
- HGET key field 获取存储在哈希表中指定字段的值
- HDEL key field 删除存储在哈希表中的指定字段
- HKEYS key 获取哈希表中所有字段
- HVALS key 获取哈希表中所有值
第三种
list列表 - LPUSH** key value1 [value2] 将一个或多个值插入到列表头部
- LRANGE key start stop 获取列表指定范围内的元素
- RPOP key 移除并获取列表最后一个元素
- LLEN key 获取列表长度
- BRPOP key1 [key2 ] timeout 移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超 时或发现可弹出元素为止
第四种
set集合 - SADD** key member1 [member2] 向集合添加一个或多个成员
- SMEMBERS key 返回集合中的所有成员
- SCARD key 获取集合的成员数
- SINTER key1 [key2] 返回给定所有集合的交集
- SUNION key1 [key2] 返回所有给定集合的并集
- SREM key member1 [member2] 移除集合中一个或多个成员
第五种
zset有序集合
通用命令
!keys pattern
查看所有复合给定模式的key
exists 检查给定的key是否存在
type key
返回key所存储的值的类型
del key 用在key存在就删除key
spring-data-redis
第一步:导入坐标
第二步:配置redis的数据源:host passwprd data base
第三部:编写配置类 创建redisTemplate的bean
使用redisTemplate进行操作 opsForValue
redis的简单配置
port 6379 设置redis的端口号 默认6379
database 16 redis内部分成多个库 默认是16个 每个库的数据互不干扰他们是独立的
bind 127.0.0.1 redis允许那些ip进行连接 当注释掉之后所有的ip都可以连
requirepass 123456 redis设置密码 注释掉 无需身份验证
daemo on redis霸屏启动 yes 改为后台运行 windows不支持
redis单节点存在的问题
- 数据丢失的问题
数据持久化
1 RDB持久化
触发的时间:1、正常地关闭redis服务
2、save
3、bgsave
4、当我们在配置文件中修改配置 redis.conf save times(时间) changes(次数)
数据存储的位置:当前路径下的dump.rdb中
bgsave的实现原理:
2AOF持久化
什么时候触发:redis.conf打开aof的开关
执行增删改操作
触发的频次:everysec每秒
存在的问题:记录所有的增删改文件比较大
解决方案:1aof文件进行重写通过bgrewriteaof命令
2配置阈值:1增长率100
2aof文件的最小大小64mb
RDB和AOF的优点和缺点
1AOF的文件大小大于RDB
2RDB的数据恢复速度快于AOF
3数据丢失的时间RDB丢失的数据在两次快照之间AOF最多丢失一秒数据
- 并发受到限制
主从集群
A B 两个redis实例让B作为A的从节点
B节点执行命令 slaveof A ip 和A的port
主节点负责读和写从节点负责读
全量同步:
1从指定的ip和端口发送repld,offset给主节点
2主节点根据id判断是不是他的从节点
3如果不是 生成id和offset吧信息发送给从节点 从保存
4主节点执行rdb文件生成rdb文件吧文件发给从
5从几点使用rdb文件进行数据恢复
6当从节点在恢复的过程中还有命令的话主节点吧命令记录到日志文件中
7把日志文件的内容发给从节点让他执行
增量同步
1从指定的ip和port发送请求id offset给主节点
2主节电判断从节点是不是他自己的丛及诶单
3如果是 吧id和offset发给从节点
4判断offset有没有覆盖
有的话就是全量同步
没有的话就是增量同步吧从节点的offset之后的命令发给从节点 - 自动故障修复
哨兵模式
问题:当主从集群中的主节点出现问题之后 实现故障的自动恢复
哨兵的所用
1监控主从各个节点的状态
2实现故障转移 - 1监控主节点是否宕机
主关下线 一个从节点发请求没有响应
客观下线规定的从节点发请求没响应
2 从从节点中选择一个当主节点:数据最新
{
1断开连接的时间越短越好
2offset越大越好
3根据设置的优先级越小越好 0的话不选
}
如果其他的都一样的话id小的优先
切换
选中的从节点 skaveif no one
广播给所有的从节点slaveof newMasterIp newMasterPort
给已经宕机的主节点添加配置文件replicaof newMasterIp newMasterPort
3通知redis客户端
设置哨兵的数量的话:奇数
存储容量问题
分片集群(解决的问题主从加哨兵无法实现存储空间拓展的问题)
散片插槽 16384
添加节点
移除节点