Redis通常在项目中的使用场景
数据类型 | 使用场景 |
String | 比如:要知道什么时候封锁一个IP地址,incrby命令 |
Hash | 存储用户等信息,hget(),hset(key,field,value)(通常不使用String类型存储) |
List | 实现最新消息排行,还可以利用List的push命令,将任务存在list集合中,同时使用另一个命令pop,将任务从集合中取出,Redis-list数据类型来模拟消息队列(例如,电商中的秒杀可以采用这种方式完成秒杀活动) |
Set | 特殊之处:可以自动排重。比如,微博中将每个人的好友存在set集合中,这样求两个人的共同好友的操作,只需求交集即可 |
Zset | 以某一个条件为权重进行排序。比如,京东:商品详情有一个综合排名,还可以按照价格进行排名 |
Elasticsearch(es)和solr的区别
背景.:都是基于Lucene搜索服务器基础之上开发,优秀的高性能的企业级搜索服务器。
为什么高性能呢?
因为基于分词技术构建的倒排索引的方式进行查询
区别:
- 当实时建立索引的时候,solr会产生阻塞,而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效率更好)
- solr官网提供的功能更多,es本身更注重于核心功能,高级功能需要第三方插件提供
单点登录实现过程
单点登录简单说就是分布式系统中(前提)一处登录多处使用
一个简单的web项目也可以使用单点登录,但是没必要
流程:
例子:参观动物园
检票员=认证中心
- 直接进动物园会被检票员拦下(检查是否有门票),没有,则去售票处买票
登录=买票 - 带着票准备进入动物园,检票员check,有票
票=token - 有票就可以任意参观动物园
京东:单点登录是将token放入到cookie中的。将浏览器的cookie禁用,则登录京东失败
消息队列在项目中的使用
背景:在分布式系统中如何处理高并发?
由于在高并发的环境下,来不及同步处理用户的请求,则会导致请求发生阻塞,比如,大量的insert,update之类的请求同时到达数据库,直接导致无数的行锁,表锁,甚至会导致请求堆积很多,从而触发too many connection错误。
使用消息队列中的异步通信可以解决。
- 异步
- 并行
- 排队
- 消息队列在电商中使用场景
- 消息队列的弊端:消息的不确定性
可以使用延迟队列,轮询技术来解决该问题