Ajax跨域问题, 和redis缓存问题记录

首先了解域名:  域名是以英文符号“."来隔开,顶级域名是固定的,如.com/.cn/.net等等。在购买域名的时候选择自己想要的顶级域名,然后再从顶级域名左边输入自己想要注册的二级域名,组成一个完整的域名。

 

跨域问题来自于javaScript 的同源测略, 只有相同主机+端口+ 协议的资源, 才能够互相访问

但为什么JavaScript会有这样的策略呢,:   因为JavaScript是可以直接操纵web文档资源的, 如果不加以限制,  那我登陆A网站, 却可以获取访问 B网站的数据, 那就会很混乱, 没有安全可言

 

有两种解决方案,

一种是被调用方解决问题

  1. 在响应头中添加字段, 告诉浏览器支持跨域访问    Access-Control-Allow-Origin     跨域访问的解决方案的安全基础是基于"JavaScript无法控制该HTTP头"

  2.  httpClient内部转发, 服务器执行完传递过来的请求返回结果, 效率低

  3.  nginx搭建企业级接口网关方式     统一通过公司的域名访问转接但具体项目名

 

另一种是在调用方解决问题

  1. jsonp 只支持get请求不支持post请求    dataType : "jsonp",//数据类型为jsonp 一般服务端返回都是json数据, 但是jsonp返回回来的是javasrcipt代码, 动态加载<script>标签的src属性, 参数通过url方式传递所以只能是get方法

 

 

 

 

 

redis持久化  AOF 持久化, 保存每一条执行语句

                    RDB 持久化, 保存在硬盘上

缓存雪崩是同一时刻大量key值失效, 大量请求到服务器db造成死机,  解决办法是 key失效时间设置成随机值

缓存穿透,  访问redis 和数据库中都没有的数据,    解决: 做参数校验, 不合理的id请求直接return 或者直接设置此key的值为null

缓存击穿,  热点key值永久不过期 

 

 

但是你没对分页参数的大小做限制,调用的人万一一口气查 Integer.MAX_VALUE 一次请求就要你几秒,多几个并发你不就挂了么?是公司同事调用还好大不了发现了改掉,但是如果是黑客或者竞争对手呢?在你双十一当天就调你这个接口会发生什么,就不用我说了吧。这是之前的Leader跟我说的,我觉得大家也都应该了解下

 

熔断:当这个接口不可用了,然后下次掉服务的时候就不会再访问到这个节点了,然后后台还有一个程序,去实时监控这个服务节点,等他好了,你又可以访问了。简单理解就是——比方说排队买票,有3个窗口,其中一个窗口与排了很多人,然后那个售票员有事走开了,那群人不可能一直等,就去别的窗口买了,然后那个售票员回来了,会通知买票的人,这里可以买票了。

降级:简单理解就是——比方说返回很多人再买票,还有人在问路,或者在咨询问题,那些问路的,咨询问题的就不处理了,只处理买票。

 

布隆过滤器:   布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率和删除困难。

 

Bloom Filter 原理

布隆过滤器的原理是,当一个元素被加入集合时,通过K个散列函数将这个元素映射成一个位数组中的K个点,把它们置为1。检索时,我们只要看看这些点是不是都是1就(大约)知道集合中有没有它了:如果这些点有任何一个0,则被检元素一定不在;如果都是1,则被检元素很可能在。这就是布隆过滤器的基本思想。

Bloom Filter跟单哈希函数Bit-Map不同之处在于:Bloom Filter使用了k个哈希函数,每个字符串跟k个bit对应。从而降低了冲突的概率。

 

分布式锁   :    setnx 加锁..key值不存在     解锁是设置过期时间或者删除   为了防止忘记解锁, 好像可以设置成一条语句

 

RDB的原理是什么?

你给出两个词汇就可以了,fork和cow。fork是指redis通过创建子进程来进行RDB操作,cow指的是copy on write,子进程创建后,父子进程共享数据段,父进程继续提供读写服务,写脏的页面数据会逐渐和子进程分离开来。

Memcache与Redis的区别都有哪些?

1)、存储方式

Memecache把数据全部存在内存之中,断电后会挂掉,数据不能超过内存大小。

Redis有部份存在硬盘上,这样能保证数据的持久性。

2)、数据支持类型

Memcache对数据类型支持相对简单。

Redis有复杂的数据类型。

3)、使用底层模型不同

它们之间底层实现方式 以及与客户端之间通信的应用协议不一样。

Redis直接自己构建了VM 机制 ,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求。

4),value大小

redis最大可以达到1GB,而memcache只有1MB

 

 

redis采用单线程,避免了不必要的上下文切换和竞争条件,也不存在多进程或者多线程导致的切换而消耗 CPU,

那他是单线程的,我们现在服务器都是多核的,那不是很浪费?

是的他是单线程的,但是,我们可以通过在单机开多个Redis实例嘛。

既然提到了单机会有瓶颈,那你们是怎么解决这个瓶颈的?

我们用到了集群的部署方式也就是Redis cluster,并且是主从同步读写分离,类似Mysql的主从同步,Redis cluster 支撑 N 个 Redis master node,每个master node都可以挂载多个 slave node。

 

这样整个 Redis 就可以横向扩容了。如果你要支撑更大数据量的缓存,那就横向扩容更多的 master 节点,每个 master 节点就能存放更多的数据了

 

 

主从数据一致,  启动一个slave时候, 第一次连接master, 会触发一个全量复制, 启动一个线程专门生成RDB文件, 给slave 

但是你让这个master机器去写,数据同步给别的slave机器,他们都拿去读,分发掉大量的请求那是不是好很多,而且扩容的时候还可以轻松实现水平扩容。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值