Browsed by
分类:Redis缓存

高性能短链设计

高性能短链设计

閱讀本文約花費: 17 (分鐘) 前言 今天,我们来谈谈如何设计一个高性能短链系统,短链系统设计看起来很简单,但每个点都能展开很多知识点,也是在面试中非常适合考察侯选人的一道设计题,本文将会结合我们生产上稳定运行两年之久的高性能短链系统给大家简单介绍下设计这套系统所涉及的一些思路,希望对大家能有一些帮助。 本文将会从以下几个方面来讲解,每个点包含的信息量都不少,相信大家看完肯定有收获 短链有啥好处,用长链不香吗短链跳转的基本原理短链生成的几种方法高性能短链的架构设计 注:里面涉及到不少布隆过滤器,snowflake 等技术,由于不是本文重点,所以建议大家看完后再自己去深入了解,不然展开讲篇幅会很长 短链有啥好处,用长链不香吗 来看下以下极客时间发我的营销短信,点击下方蓝色的链接(短链) 浏览器的地址栏上最终会显示一条如下的长链。 那么为啥要用短链表示,直接用长链不行吗,用短链的话有如下好外 1、链接变短,在对内容长度有限制的平台发文,可编辑的文字就变多了 最典型的就是微博,限定了只能发 140 个字,如果一串长链直接怼上去,其他可编辑的内容就所剩无几了,用短链的话,链接长度大大减少,自然可编辑的文字多了不少。 再比如一般短信发文有长度限度,如果用长链,一条短信很可能要拆分成两三条发,本来一条一毛的短信费变成了两三毛,何苦呢。另外用短链在内容排版上也更美观。 2、我们经常需要将链接转…

Read More Read More

kafka平台架构

kafka平台架构

閱讀本文約花費: 1 (分鐘) Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据。 Kafka基本架构介绍 kafka架构原理 [图文]消息队列 [图文]kafka-0.10 知识点总结 [图文]消息中间件Kafka资料 图文:Kafka架构设计与实施 kafka中文文档 kafka介绍与概念 – 图文 [图文]Kafka介绍 Kafka安装配置及使用说明 kafka架构与原理 Kafka的架构原理,你真的理解吗? 课程: Kafka原理与实践 课程:Kafka 原理剖析及实战演练 

后端架构师技术图谱

后端架构师技术图谱

閱讀本文約花費: 5 (分鐘) 数据结构 二叉树完全二叉树平衡二叉树二叉查找树(BST)红黑树B-,B+,B*树LSM 树队列集合链表、数组字典、关联数组栈树BitSet 常用算法 KPM 算法选择排序冒泡排序插入排序快速排序归并排序希尔排序堆排序计数排序桶排序基数排序二分查找Java 中的排序工具排序、查找算法布隆过滤器字符串比较深度优先、广度优先贪心算法回溯算法剪枝算法动态规划朴素贝叶斯推荐算法最小生成树算法最短路径算法 并发 Java中的锁和同步类公平锁 & 非公平锁悲观锁 & 乐观锁 & CASABA 问题CopyOnWrite容器RingBuffer可重入锁 & 不可重入锁互斥锁 & 共享锁死锁事务 ACID 特性事务的隔离级别多线程线程安全一致性、事务锁 操作系统 计算机原理进程线程协程Linux 设计模式 康威定律设计模式的六大原则23种常见设计模式应用场景单例模式责任链模式MVCIOCAOPUML微服务思想 运维 & 统计 & 技术支持 OpenStackDockerKVMXenOpenVZTDD 理论单元测试压力测试全链路压测A/B TestAnsiblepuppetchefJenkins环境分离常规监控APM统计分析持续集成(CI/CD)自动化运维测试虚拟化容器技术云技术DevOps文档管理 中间件 日志搜…

Read More Read More

@FeignClient注解的深度交流

@FeignClient注解的深度交流

閱讀本文約花費: 8 (分鐘) 那天晚上和@FeignClient注解的深度交流 Feign 基本介绍 首先来个基本的普及,怕有些同学还没接触过 Spring Cloud。Feign 是 Netflix 开源的一个 REST 客户端,通过定义接口,使用注解的方式描述接口的信息,就可以发起接口调用。 GitHub 地址: https://github.com/OpenFeign/feign[1] 下面是 GitHub 主页上给的一个最基本的使用示列,示列中采用 Feign 调用 GitHub 的接口。 interface GitHub { @RequestLine(“GET /repos/{owner}/{repo}/contributors”) List contributors(@Param(“owner”) String owner, @Param(“repo”) String repo); @RequestLine(“POST /repos/{owner}/{repo}/issues”) void createIssue(Issue issue, @Param(“owner”) String owner, @Param(“repo”) String repo); } public static class Contributor { String login; int con…

Read More Read More

Redis 分布式锁工具类

Redis 分布式锁工具类

閱讀本文約花費: 1 (分鐘) @Component public class RedisLock { private static final Long RELEASE_SUCCESS = 1L; private static final String LOCK_SUCCESS = “OK”; private static final String SET_IF_NOT_EXIST = “NX”; // 当前设置 过期时间单位, EX = seconds; PX = milliseconds private static final String SET_WITH_EXPIRE_TIME = “EX”; //lua private static final String RELEASE_LOCK_SCRIPT = “if redis.call(‘get’, KEYS[1]) == ARGV[1] then return redis.call(‘del’, KEYS[1]) else return 0 end”; @Autowired private StringRedisTemplate redisTemplate; /** 该加锁方法仅…

Read More Read More

Nginx代理80、代理443端口的说明

Nginx代理80、代理443端口的说明

閱讀本文約花費: 2 (分鐘) 端口协议80http443https 首先要安装nginx,这里采用yum安装方式 #yum -y install nginx安装完成后编辑其配置文件 #vim /etc/nginx/nginx.conf 配置代理80端口 server { listen 80; server_name www.prometheus.test.com; #自定义域名 root /usr/share/nginx/html; # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; location / { proxy_pass http://192.168.100.158:9090; #填写对应主机IP } } 配置代理443端口 因https方式需要涉及到证书,我这里使用openssl自创建证书 #openssl genrsa -out tls.key 2048 #openssl req -new -x509 -days 365 -key tls.key -out tls.crt -subj /C=CN/ST=Beijingshi/L=Beijing/O=devops/CN=cn server { listen 80; listen 443…

Read More Read More

Redis集群搭建详细与卡槽迁移遇到的坑

Redis集群搭建详细与卡槽迁移遇到的坑

閱讀本文約花費: 17 (分鐘) 前言 redis5.0.0之前操作 redis集群用的是 ruby写的脚本 redis-trib.rb,这样带来的弊端就是需要安装 ruby, gems环境,官方拉取的 docker镜像里是没有 redis-trib.rb等 ruby环境的,需要自己安装,在国内网络环境下还是比较费时复杂的,也不容易成功,而且最后制作的docker镜像也比较大。再者安装的 ruby、redis扩展版本不对,也会导致操作集群时,报各种各样的错误。 最重要的硬伤是 redis-trib.rb不能操作带密码的 redis集群,虽然 github上有人在 redis-trib.rb脚本基础上已经加了密码支持。但对于 move_slots的迁移卡槽相关的操作,我试了还是没加。可以查看以下的提交记录: Redis-Cluster: Add support to auth in redis-trib.rb #4288 redis5.0.0之后的 redis-cli可以直接操作 redis集群,可以支持带密码操作,可以说带来了很大的方便。但是在 redis4.0.7版本之前迁移卡槽本来就是不支持密码 auth参数的,以下命令中的 [AUTH password]是 redis4.0.7版本才支持。 MIGRATE host port key|”” destination-db tim…

Read More Read More

Linux运维需要知道的Redis经验

Linux运维需要知道的Redis经验

閱讀本文約花費: 8 (分鐘) Redis 在当前的技术社区里是非常热门的。从来自 Antirez 一个小小的个人项目到成为内存数据存储行业的标准,Redis已经走过了很长的一段路。随之而来的一系列最佳实践,使得大多数人可以正确地使用 Redis。 下面我们将探索正确使用 Redis 的10个经验。 1、停止使用 KEYS * Okay,以挑战这个命令开始这篇文章,或许并不是一个好的方式,但其确实可能是最重要的一点。很多时候当我们关注一个redis实例的统计数据,我们会快速地输入”KEYS *”命令,这样key的信息会很明显地展示出来。平心而论,从程序化的角度出发往往倾向于写出下面这样的伪代码: for key in’keys *’:doAllTheThings()  但是当你有1300万个key时,执行速度将会变慢。因为KEYS命令的时间复杂度是O(n),其中n是要返回的keys的个数,这样这个命令的复杂度就取决于数据库的大小了。并且在这个操作执行期间,其它任何命令在你的实例中都无法执行。 作为一个替代命令,看一下 SCAN 吧,其允许你以一种更友好的方式来执行… SCAN 通过增量迭代的方式来扫描数据库。这一操作基于游标的迭代器来完成的,因此只要你觉得合适,你可以随时停止或继续。 2、找出拖慢 Redis 的罪魁祸首 由于 Redis 没有非常详细的日志,要想知道在 Redis…

Read More Read More

Back-to-Basics Weekend Reading – Bloom Filters

Back-to-Basics Weekend Reading – Bloom Filters

閱讀本文約花費: 1 (分鐘) By Werner Vogels on 03 February 2017 11:00 AM | Permalink | Comments (0) Listening to the “Algorithms to Live By” audio on my commute this morning, once again I was struck by the beauty of Bloom Filters. So, I decided it is time to resurrect the ‘Back-to-Basics Weekend Reading’ series, as I will be re-reading some fundamental CS papers this weekend. In the past, I have done some weekend reading about Counting Bloom Filters, but now I am going even more fundamental, and I invite you to join me. Bloom Filters, conceived by Burton B…

Read More Read More

Back-to-Basics Weekend Reading – Bloom Filters

Back-to-Basics Weekend Reading – Bloom Filters

閱讀本文約花費: 1 (分鐘) Back-to-Basics Weekend Reading – Bloom Filters By Werner Vogels on 03 February 2017 11:00 AM | Permalink | Comments (0) Listening to the “Algorithms to Live By” audio on my commute this morning, once again I was struck by the beauty of Bloom Filters. So, I decided it is time to resurrect the ‘Back-to-Basics Weekend Reading’ series, as I will be re-reading some fundamental CS papers this weekend. In the past, I have done some weekend reading about Counting Bloom Filters, but now I am going even more fundamental, and I invite…

Read More Read More