分类 技术相关 下的文章

Reids是单线程,执行命令时单线程
因为Redis是基于内存的操作,CPU不是Redis的瓶颈,Redis的瓶颈最有可能是机器内存的大小或者网络带宽。既然单线程容易实现,而且CPU不会成为瓶颈,那就顺理成章地采用单线程的方案了

数据结构类型有:String、List、Set、Hash、ZSet这5种。

优点

读写性能优异, Redis能读的速度是110000次/s,写的速度是81000次/s。
支持数据持久化,支持AOF和RDB两种持久化方式。
支持事务,Redis的所有操作都是原子性的,同时Redis还支持对几个操作合并后的原子性执行。
数据结构丰富,除了支持string类型的value外还支持hash、set、zset、list等数据结构。
支持主从复制,主机会自动将数据同步到从机,可以进行读写分离。

缺点

数据库容量受到物理内存的限制,不能用作海量数据的高性能读写,因此Redis适合的场景主要局限在较小数据量的高性能操作和运算上。
Redis 不具备自动容错和恢复功能,主机从机的宕机都会导致前端部分读写请求失败,需要等待机器重启或者手动切换前端的IP才能恢复。
主机宕机,宕机前有部分数据未能及时同步到从机,切换IP后还会引入数据不一致的问题,降低了系统的可用性。
Redis 较难支持在线扩容,在集群容量达到上限时在线扩容会变得很复杂。为避免这一问题,运维人员在系统上线时必须确保有足够的空间,这对资源造成了很大的浪费。

lua脚本

持久化:RDB 和 AOF

RDB(默认):快照方式,允许你每隔一段时间对内存数据做一次快照然后存储到硬盘中。

AOF(append only file)持久化:以独立日志的方式记录每次写、 删除命令, 重启时再重新执行AOF文件中的命令达到恢复数据的目的。AOF的主要作用 是解决了数据持久化的实时性,目前已经是Redis持久化的主流方式

手册在线文档:http://redisdoc.com/

Redis 的几种常见使用方式包括:

  • 单副本(单机)
  • 多副本(主从)
  • Sentinel(哨兵)
    Redis Sentinel 是社区版本推出的原生高可用解决方案,其部署架构主要包括两部分:Redis Sentinel 集群和 Redis 数据集群。其中 Redis Sentinel 集群是由若干 Sentinel 节点组成的分布式集群,可以实现故障发现、故障自动转移、配置中心和客户端通知。Redis Sentinel 的节点数量要满足 2n+1(n>=1)的奇数个。
  • Redis Cluster
    Redis Cluster 是社区版推出的 Redis 分布式集群解决方案,主要解决 Redis 分布式方面的需求,比如,当遇到单机内存,并发和流量等瓶颈的时候,Redis Cluster 能起到很好的负载均衡的目的。

Redis Cluster 集群节点最小配置 6 个节点以上(3 主 3 从),其中主节点提供读写操作,从节点作为备用节点,不提供请求,只作为故障转移使用。

  • 无中心架构;
    数据按照 slot 存储分布在多个节点,节点间数据共享,可动态调整数据分布;

可扩展性:可线性扩展到 1000 多个节点,节点可动态添加或删除;

  • Redis 自研

BIO

优点 可以接收更多连接 缺点 线程内存消耗 cpu调度消耗

NIO

优点 规避多线程问题 缺点 C10K,弊端: 假设 1万个连接 只有一个发来数据每循环一次 必须向内核发送1万次recv的系统调用 那么这里有9999次是无意义的,浪费的,消耗时间和资源的(用户空间向内核空间的循环遍历,复杂度在系统调用上)

多路复用器

select 1024限制 ,poll 无限制
epoll
jdk1.5及以上 epoll_create 内核中开辟空间FD,红黑树 epoll_ctl add(accept) epoll_wait 阻塞(timeout) 等待文件描述符上的事件
AIO JDK1.7中,这部分内容被称作NIO.2 AsynchronousSocketChannel read/write方法都是异步的,完成后会主动调用回调函数 异步非阻塞,服务器实现模式为一个有效请求一个线程,客户端的I/O请求都是由OS先完成了再通知服务器应用去启动线程进行处理,

IO模型模型学习

三者应用场景

BIO 连接数目比较小且固定的架构,对服务器资源要求比较高,并发局限于应用中,JDK1.4以前的唯一选择,但程序直观简单易理解。
NIO 连接数目多且连接比较短(轻操作)的架构,比如聊天服务器,并发局限于应用中,编程比较复杂,JDK1.4开始支持。
AIO连接数目多且连接比较长(重操作)的架构,比如相册服务器,充分调用OS参与并发操作,编程比较复杂,JDK7开始支持。

转载请说明出处

网页内跳转小程序:wx-open-launch-weapp

用于页面中提供一个可跳转指定小程序的按钮。使用此标签后,用户需在网页内点击标签按钮方可跳转小程序。H5通过开放标签打开小程序的场景值为1167。

开放对象

已认证的服务号,服务号绑定“JS接口安全域名”下的网页可使用此标签跳转任意合法合规的小程序。
已认证的非个人主体的小程序,使用小程序云开发的静态网站托管绑定的域名下的网页,可以使用此标签跳转任意合法合规的小程序。

更多详情连接参考:
https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_Open_Tag.html#跳转小程序:wx-open-launch-weapp

示例:

<wx-open-launch-weapp
  id="launch-btn"
  username="gh_xxxxxxxx"
  path="pages/home/index?user=123&action=abc"
>
  <script type="text/wxtag-template">
    <style>.btn { padding: 12px }</style>
    <button class="btn">打开小程序</button>
  </script>
</wx-open-launch-weapp>
<script>
  var btn = document.getElementById('launch-btn');
  btn.addEventListener('launch', function (e) {
    console.log('success');
  });
  btn.addEventListener('error', function (e) {
    console.log('fail', e.detail);
  });
</script>

2021年4月13日起,getUserInfo将不再弹出弹窗,并直接返回匿名的用户个人信息,所以请尽快更新微信小程序授权登录接口。

调整背景:
打开小程序时就通过组件方式唤起getUserInfo弹窗,如果用户点击拒绝,无法使用小程序,这种做法打断了用户正常使用小程序的流程,同时也不利于小程序获取新用户。

getUserProfile接口

接口地址:https://developers.weixin.qq.com/miniprogram/dev/api/open-api/user-info/wx.getUserProfile.html

Bug & Tip

1.tip:仅小程序中 wx.getUserInfo 接口进行调整,小游戏中不受影响;
2.tip:开发者工具中仅 2.10.4 及以上版本可访问 wx.getUserProfile 接口,在真机上可参考示例代码进行判断,无需根据版本号或者 canIUse 进行条件。
3.tip:wx.getUserProfile 返回的加密数据中不包含 openId 和 unionId 字段。
4.bug:开发者工具中 2.10.4~2.16.1 基础库版本通过 <button open-type="getUserInfo"> 会返回真实数据,真机上此区间会按照公告返回匿名数据。

wx.getUserProfile 修改方案参考:https://developers.weixin.qq.com/community/develop/article/doc/00000cc422c12844b4fb644d056813

公告说明链接:
https://developers.weixin.qq.com/community/develop/doc/000cacfa20ce88df04cb468bc52801?highLine=login

免责声明
本博客部分内容来自于互联网,不代表作者的观点和立场,如若侵犯到您的权益,请联系[email protected]。我们会在24小时内进行删除。