https://blog.csdn.net/qq_38815856/article/details/90107122
https://blog.csdn.net/qq_38815856/article/details/90114864
RDB持久化:
是指在指定的时间间隔内将内存中的数据集快照写入磁盘,实际操作过程是fork一个子进程,先将数据集写入临时文件,写入成功后,再替换之前的文件,用二进制压缩存储。
优点:
节省磁盘空间恢复速度快缺点:
虽然redis在fork是使用了写实拷贝技术,但是如果数据庞大还是比较耗费性能。在备份周期在一定时间做一次备份,所以如果redis意外down掉,会丢失最后一次修改。
AOF持久化:
以日志的形式记录服务器所处理的每一个写、删除操作。查询操作不会记录,以文本的方式记录,可以打开文件看到详细的操作记录。
优点:
备份机制更稳健,丢失数据概率更低可读日志文本查询处理误操作缺点:
比RDB占用更多的磁盘空间恢复备份更慢每次读写都同步,有一定性能压力redis持久化的两种方式
https://www.cnblogs.com/chenliangcl/p/7240350.html
定义:可以理解为“排好序的快速查找数据结构”。
优势:
提高检索效率,降低数据库的IO成本通过索引列对数据进行排序,降低数据排序的成本,降低了CPU消耗劣势:
降低了更新表的速度,对表进行insert、update和delete都会对调整因为更新所带来的键值变化后的索引信息,因为更新表会更新这些索引信息所以也是一张表,保存了逐渐与索引字段,并指向实体表的记录,所以要占用空间。使用场景:
主键自动创建唯一索引频繁作为查询条件的字段查询中与其他表关联的字段,外键关系建立索引单键/组合索引的选择问题,组合索引性价比更高查询中排序的字段,排序字段若通过索引去访问将大大提高排序速度查询中统计或者分组字段不适用场景:
记录太少经常改动where条件里用不到的字段过滤性不好的字段(比如性别难以定义出单条数据)
数据类型
使用场景
String
比如说 ,我想知道什么时候封锁一个IP地址。Incrby命令
Hash
存储用户信息【id,name,age】
Hset(key,field,value)
Hset(userKey,id,101)
Hset(userKey,name,admin)
Hset(userKey,age,23)
----修改案例----
Hget(userKey,id)
Hset(userKey,id,102)
为什么不使用String 类型来存储?
Set(userKey,用信息的字符串)
Get(userKey)
它会取出多余的字段序列化,影响性能
List
实现最新消息的排行,还可以利用List的push命令,将任务存在list集合中,同时使用另一个命令,将任务从集合中取出[pop]。
Redis—list数据类型来模拟消息队列。【电商中的秒杀就可以采用这种方式来完成一个秒杀活动】
Set
特殊之处:可以自动排重。比如说微博中将每个人的好友存在集合(Set)中,
这样求两个人的共通好友的操作。我们只需要求交集即可。
Zset
以某一个条件为权重,进行排序。
京东:商品详情的时候,都会有一个综合排名,还可以按照价格进行排名。
背景:它们都是基于Lucene搜索服务器基础之上开发,一款优秀的,高性能的企业级搜索服务器。【是因为他们都是基于分词技术构建的倒排索引的方式进行查询】
区别:
当实时建立索引的时候,solr会产生io阻塞,而es则不会,es查询性能要高于solr。在不断动态添加数据的时候,solr的检索效率会变的低下,而es则没有什么变化。Solr利用zookeeper进行分布式管理,而es自身带有分布式系统管理功能。Solr一般都要部署到web服务器上,比如tomcat。启动tomcat的时候需要配置tomcat与solr的关联。【Solr 的本质 是一个动态web项目】Solr支持更多的格式数据[xml,json,csv等],而es仅支持json文件格式。Solr是传统搜索应用的有力解决方案,但是es更适用于新兴的实时搜索应用。单纯的对已有数据进行检索的时候,solr效率更好,高于es。Solr官网提供的功能更多,而es本身更注重于核心功能,高级功能多有第三方插件。