Redis数据类型
五种基本数据类型Redis支持五种基础数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。三种特殊数据类型:geospatial(地理位置),hyperloglog(基数统计),bitmaps(位图场景)
String(字符串)
命令
描述
INCR key
将 key 中储存的数字值增一
DECR key
将 key 中储存的数字值减一
INCRBY key
increment 将 key 所储存的值加上给定的增量值(increment)
DECRBY key
decrement key 所储存的值减去给定的减量值(decrement)
STRLEN key
返回 key 所储存的字符串值的长度。
12345678910111213141516127.0.0.1:6379> set string 1OK# 自增 1127.0.0.1:6379> incr string(integer) 2# 自减 1127.0.0.1:6379> decr string(in ...
Redis缓存穿透,缓存击穿和雪崩
缓存穿透缓存穿透是指查询一个不存在的数据,由于缓存是不命中时被动写的,并且出于容错考虑,如果从存储层查不到数据则不写入缓存。这将导致这个不存在的数据每次请求都要到存储层去查询,失去了缓存的意义。
穿透解决方案
布隆过滤器 布隆过滤器是一种数据结构,对所有可能查询的参数以hash形式存储,在控制层先校验,不符合则丢弃,从而避免对底层查询系统的压力
缓存空对象 在存储不命中后,即便返回的空对象也将其缓存起来,同时设置一个过期时间,之后访问这个数据会从缓存中获取,保护后端数据源 但是这种方法存在两个问题:
如果空值能够被缓存,意味着缓存需要更多的空间存储更多的键,因为其中可能有很多空值的键
即便对空值设置了过期时间,还是会存在缓存层和存储层的数据会有一段时间的不一致,对于保持一致性的业务可能有影响
缓存击穿对于一些设置了过期时间的key,如果这些key可能会在某些时间点被超高并发地访问,是一种非常“热点”的数据。这个时候,需要考虑一个问题:缓存被“击穿”的问题,这个和缓存雪崩的区别在于这里针对某一key缓存,后者则是很多key。
缓存在某个时间点过期的时候,恰好在这个时间间隔对这个Ke ...
Redis持久化
概念持久化的功能:Redis是内存数据库,数据都是存储在内存中,为了避免进程退出导致数据的永久丢失,需要定期将Redis中的数据以某种形式(数据或命令)从内存保存到硬盘;当下次Redis重启时,利用持久化文件实现数据恢复。除此之外,为了进行灾难备份,可以将持久化文件拷贝到一个远程位置。
Redis持久化分为RDB持久化和AOF持久化:前者将当前数据保存到硬盘,后者则是将每次执行的写命令保存到硬盘;由于AOF持久化的实时性更好,即当进程意外退出时丢失的数据更少,因此AOF是目前主流的持久化方式,不过RDB持久化仍然有其用武之地
RDB持久化RDB持久化是指在指定的时间间隔内将内存中的数据集快照写入磁盘。也是默认的持久化方式,这种方式是就是将内存中数据以快照的方式写入到二进制文件中,默认的文件名为dump.rdb。当Redis重新启动时,可以读取快照文件恢复数据。
触发条件对RDB来说,有手动触发和自动触发两种情况
手动触发手动触发对应save和bgsave命令,两者都会生成RDB文件
savesave命令会阻塞Redis服务器进程,直到RDB文件创建完毕为止,在Redis服务器阻塞期间 ...
Redis
NoSQL介绍
NoSQL = Not Only SQL
为什么使用NoSQL关系型数据库:表格,行,列随着互联网的高速发展,传统的关系型数据库在应付超大规模,超大流量以及高并发的时候力不从心
大数据时代的3V和3高
大数据3V(问题)
海量Volume
多样Variety
实时Velocity
互联网3高(性能)
高并发
高可拓
高性能
NoSQL特点
方便扩展(数据之间没有关系)
快速读写(Redis一秒写8万次,读取11万次)
成本低廉(大部分分布式数据库都是开源)
数据类型是多样型的(不需要事先设计数据库)
传统的RDBMS和NoSQL
传统的 RDBMS(关系型数据库管理系统)
结构化组织
SQL
数据和关系都在单独的表中
严格的一致性
基础的事务
。。。。。。
NoSQL
不仅仅是数据
没有固定的查询语言
键值对存储,列存储,文档存储,图形数据库(社交关系)
最终一致性
CAP定理和BASE(异地多活)
高性能,高可用,高可扩
。。。。。。
NoSQL类型KV键值对
新浪:Redis
美团:Redis+Tair
阿里,百度:Redis+meme ...