Redis

Go 语言编程 — reflect 反射工具

末鹿安然 提交于 2020-08-20 04:45:09
目录 文章目录 目录 反射机制 reflect 包 Struct Tags 与 Reflect 反射机制 反射是指在程序运行期对程序本身进行访问和修改的能力 。程序在编译时,变量被转换为内存地址,变量名不会被编译器写入到可执行文件。因为可执行文件不存在变量名,所以在程序运行时,就无法通过变量名作为句柄并获取到自身的信息。 支持反射的语言可以在程序编译期将变量的反射信息,如:结构体信息、字段名称、类型信息等整合到可执行文件中,并给程序提供接口访问这些反射信息,这样就可以在程序运行期间通过接口来获取到变量的反射信息,并且有能力修改它们。 reflect 包 Struct Tags 与 Reflect 举一个例子:Golang 中的变量名是大小写敏感的,对于小写的局部变量,在包外无法被引用。但实际上,Golang 程序是经常需要与其它系统进行数据交互的,例如:Redis 数据库访问。这样就需要一种设计,可以灵活的将 Golang 最核心的数据类型 Struct 转换为其他数据格式,这就是 Struct Tags。在需要将 Struct 转换为其它数据格式时,会根据 Tags 中定义的信息进行转换。 Struct Tags 类似注释,使用反引号 “`”,Golang 提供了 reflect 包来对 Struct Tags 进行解析。 示例: package main import (

作为软件测试的前辈你能不能给我点建议?

梦想的初衷 提交于 2020-08-20 02:49:37
说点实在的。 1.买本java基础啃完。 2.买本jmeter基础啃完。 3.下个ide比如eclipse,然后写几个工具类,比如一些get,post的基本请求,json序列号和反序列化,基本的md5,aes/des基于盐的加解密,jdbc循环插入mysql造数据,xls和csv文件的操作等一些可能用到的东西。 4.把写完的打个jar包用jmeter建个beanshell瞎跑跑。 5.下个docker装点镜像,比如装个tomcat和mysql,正好上面用到 6.随便找个网站用fiddler这种抓包,然后里面找个接口用之前写的工具类请求下试试,用jmeter请求试试。 7.了解下Jenkins,如果有工具看下k8s然后把Jenkins和docker弄个最基本的持续集成环境,然后慢慢加一些工具和自己写的东西做自动化。 8.看看常用架构中mq,redis怎么用工具去连接查看,看看常用中间件和db中线程池,连接池的配置,看看表的索引这些东西。 9.看看selenium,在ide中引用它的包去做做功能自动化 10.看下unit,report工具类然后自己写个接口自动化框架测试技术类的基本就这些东西,剩下的项目经验你得去实际工作去慢慢积累。 原文链接:https://www.zhihu.com/question/392607753/answer/1311247386 来源: oschina

阿里云推出全球最强云服务器:第三代神龙云服务器 性能暴涨160%

六月ゝ 毕业季﹏ 提交于 2020-08-20 02:12:08
7 月 15 日,全球领先的云服务商阿里云宣布推出第三代神龙云服务器,向全球提供顶级算力。与上一代相比,第三代神龙云服务器的综合性能提升高达 160%,比目前全球最顶级云服务器还要快 30% 以上,整体算力全球最强。 第三代神龙云服务器产品家族提供了 最多 208 核、最大 6TB 内存、云盘 IOPS 高达 100 万、网络转发高达 2400 万、网络带宽高达 100G ,均为全球最高性能水平,支持 CPU、GPU、NPU、FPGA 等多种计算形态,具备 3 分钟交付 50 万核 vCPU 的极速扩容能力,是云原生的最佳载体。 阿里云弹性计算负责人张献涛展示神龙云服务器核心组件 基于最新款云服务器的阿里云第六代增强型实例,全系搭配 ESSD 系列云盘,存储转发能力最多提升四倍;支持 10Gbps 突发内网带宽,单卷延时大幅下降;性能等级按需配置,在线无损变配;同时 ESSD 使用门槛大幅下降 50%。Mysql 和 Redis 性能提升超过 15%,Nginx 性能提升达 100%。配合 Alibaba Cloud Linux 2 LTS,启动速度最多提升 60%、运行时性能最多提升 30%、稳定性最多提升 50%。 此外,阿里云 ECS 的单实例稳定性从原来的 99.95% 提升到 99.975%,跨 AZ 多实例稳定性从原来的 99.99% 提升到 99.995%

搞不定 Redis,还谈什么缓存

倖福魔咒の 提交于 2020-08-19 23:11:35
如果你是一位后端工程师,面试时八成会被问到 Redis,特别是那些大型互联网公司,不仅要求面试者能简单使用 Redis,还要深入理解其底层实现原理,具备解决常见问题的能力。 可以说,熟练使用 Redis 就是后端工程师的必备技能。 但我发现,在工作或面试时,大家还是会有这样那样的疑问,比如:如何用 Redis 实现分布式锁?Redis 怎样处理过期键?缓存雪崩、穿透、热点问题怎么解决?持久化、集群方案怎么选择?如何优雅地给 Redis 做键值分析?等等。 这里,分享给你一张 Redis 问题画像图 ,帮你快速查找问题对应的 Redis 主线模块,进而定位相应的技术点。 举个例子,如果 Redis 响应变慢了,对照这张图你就可以发现,这个问题与 Redis 性能主线相关,而性能主线又和数据结构、异步机制、RDB、AOF 重写相关。找到了影响因素,解决起来就容易多了。 在学习和使用过程中,你还可以结合自己的实践经验,不断完善这张图。这样一来,你的积累越多,画像就越丰富。 这张图出自蒋德钧,他是中科院计算所副研究员,长期致力于 Redis 研究,与阿里、蚂蚁金服、百度、华为、中兴等公司开展了多种项目合作,具有丰富的 Redis 实战经验,申请了 NVM (非易失内存)相关专利二十多项。 最近,他推出了专栏 《Redis 核心技术与实战》 ,看了目录和部分内容,很想推荐给你。 在专栏中

工作三年经验,一年内我靠这份javaBAT进阶面试题从13K到大厂25K

前提是你 提交于 2020-08-19 23:09:53
我认为对于面试以及进阶最佳的学习方法莫过于 刷题+博客+书籍+总结 ! 前三者我将淋漓尽致地挥毫于这篇文章中,至于总结要靠个人。实际上越到后面你越会发现面试并不难,其次就是在刷题的过程中有没有去思考,刷题只是次之,这又是一个层次了,这里暂时不提后面再谈。 我总结了一系列大厂面试中常问的面试技术点、深入解析以及答案,将为最近准备面试的各位去大厂保驾护航! 何谓面试? 我所理解的面试,它是一个过程,是不断沉淀、不断总结、善于传达自己的专业领域技术以及解决问题能力的过程。 以下是我总结的一些Java面试资料和答案,我靠着这份资料,薪资从12K涨到了30K,对于工作5年来说,这个不算什么。但还是希望可以帮助到大家! 并发篇 并发编程可以说是Java编程的灵魂, 可以让系统性能更高,用户响应速度更快,让我们的程序模块化和异步化,且内部机制与实现原理也是一线互联网面试官比较青睐的。 知识点: Java内存模型 AQS、CAS 锁 并发工具类 …… 面试题:(部分) Synchronized 相关问题 1. Synchronized 用过吗,其原理是什么? 2. 获取对象的锁,这个“锁”到底是什么?如何确定对象的锁? 3. 乐观锁一定就是好的吗? 可重入锁 ReentrantLock 及其他显式锁相关问题 1. 除了 ReetrantLock,你还接触过 JUC 中的哪些并发工具? 2.

Redis 管道(Pipelining)、PUB/SUB

安稳与你 提交于 2020-08-19 22:59:04
http://redis.cn/topics/pipelining.html 是否可以这样理解: 如果是组织大量的、无依赖关系的命令,可以选择管道,当然也可以选择脚本。 如果命令之间有依赖关系,比如后续的命令需要处理先前命令的返回值,只能选择脚本。 Redis 提供了 PUB/SUB 订阅功能,实际我们在使用时,一定要注意,它提供的 不是一个可靠的 订阅系统 Redis 是不持久化 Publish 的消息的 当然,不能说 Redis Pub/Sub 毫无使用的场景,以下艿艿来列举几个: 在使用 Redis Sentinel 做高可用时,Jedis 通过 Redis Pub/Sub 功能,实现对 Redis 主节点的故障切换,刷新 Jedis 客户端的主节点的缓存。 如果出现 Redis Connection 订阅的异常断开,会重新 主动 去 Redis Sentinel 的最新主节点信息, 从而解决 Redis Pub/Sub 可能因为网络问题,丢失消息 Redis Sentinel 节点之间的部分信息同步,通过 Redis Pub/Sub 订阅发布。 在我们实现 Redis 分布式锁时,如果获取不到锁,可以通过 Redis 的 Pub/Sub 订阅锁释放消息,从而实现其它获得不到锁的线程,快速抢占锁。 当然,Redis Client 释放锁时,需要 PUBLISH

负载均衡集群中的session解决方案

耗尽温柔 提交于 2020-08-19 22:20:29
前言 在我们给 Web 站点使用负载均衡之后,必须面临的一个重要问题就是 Session 的处理办法,无论是 PHP 、 Python 、 Ruby 还是 Java ,只要使用服务器保存 Session ,在做负载均衡时都需要考虑 Session 的问题。 分享目录: 问题在哪里?如何处理? 会话保持(案例:Nginx、Haproxy) 会话复制(案例:Tomcat) 会话共享(案例:Memcached、Redis) 问题在哪里? 从用户端来解释,就是当一个用户第一次访问被负载均衡代理到后端服务器 A 并登录后,服务器 A 上保留了用户的登录信息;当用户再次发送请求时,根据负载均衡策略可能被代理到后端不同的服务器,例如服务器 B ,由于这台服务器 B 没有用户的登录信息,所以导致用户需要重新登录。这对用户来说是不可忍受的。所以,在实施负载均衡的时候,我们必须考虑 Session 的问题。 在负载均衡中,针对 Session 的处理,我们一般有以下几种方法: Session 保持 Session 复制 Session 共享 会话保持 Session 保持(会话保持)是我们见到最多的名词之一,通过会话保持,负载均衡进行请求分发的时候保证每个客户端固定的访问到后端的同一台应用服务器。会话保持方案在所有的负载均衡都有对应的实现。而且这是在负载均衡这一层就可以解决 Session 问题。

面试时 Redis 内存淘汰总被问,但是总答不好,怎么解决?

无人久伴 提交于 2020-08-19 22:16:24
什么是内存淘汰 内存淘汰,和平时我们设置redis key的过期时间,不是一回事;内存淘汰是说,假设我们限定redis只能使用8g内存,现在已经使用了这么多了(包括设置了过期时间的key和没设过期时间的key),那,后续的set操作,还怎么办呢? 是不是只能报错了? 那不行啊,不科学吧,因为有的key,可能已经很久没人用了,可能以后也不会再用到了,那我们是不是可以把这类key给干掉呢? 干掉key的过程,就是内存淘汰。 内存淘汰什么时候启用 当我们在配置文件里设置了如下属性时: # maxmemory <bytes> 默认,该属性是被注释掉的。 其实,这个配置项的注释,相当有价值,我们来看看: # Don't use more memory than the specified amount of bytes. # When the memory limit is reached Redis will try to remove keys # according to the eviction policy selected (see maxmemory-policy). # # If Redis can't remove keys according to the policy, or if the policy is # set to 'noeviction', Redis

多图解释Redis的整数集合intset升级过程

泪湿孤枕 提交于 2020-08-19 22:14:03
redis源码分析系列文章 [Redis源码系列]在Liunx安装和常见API 为什么要从Redis源码分析 String底层实现——动态字符串SDS 双向链表都不懂,还说懂Redis? 面试官:说说Redis的Hash底层 我:......(来自阅文的面试题) Redis的跳跃表确定不了解下 前言 大噶好,今天仍然是元气满满的一天,抛开永远写不完的需求,拒绝要求贼变态的客户,单纯的学习技术,感受技术的魅力。(哈哈哈,皮一下很开森) 前面几周我们一起看了Redis底层数据结构,如 动态字符串SDS , 双向链表Adlist , 字典Dict , 跳跃表 ,如果有对Redis常见的类型或底层数据结构不明白的请看上面传送门。 今天来说下set的底层实现 整数集合 ,如果有对set不明白的,常见的API使用这篇就不讲了,看上面的传送门哈。 ​ 整数集合概念 整数集合是Redis设计的一种底层结构,是set的底层实现,当集合中只包含整数值元素,并且这个集合元素数据不多时,会使用这种结构。但是如果不满足刚才的条件,会使用其他结构,这边暂时不讲哈。 下图为整数集合的实际组成,包括三个部分,分别是编码格式encoding,包含元素数量length,保存元素的数组contents。(这边只需要简单看下,下面针对每个模块详细说明哈😝) ​ 整数集合的实现 我们看下intset

tp6中swoole扩展websocket的使用

杀马特。学长 韩版系。学妹 提交于 2020-08-19 22:08:48
相信不少人都已经知道tp6.0已经适配swoole.并推出think-swoole 3.0 ,这次就来介绍下tp6中swoole扩展websocket的使用。 Websocket 继承与Http,进行websocket连接之前需要一次HTTP请求,如果当期地址支持websocket则返回101,然后进行连接。也就是说并不是服务支持websocket后,请求每个连接地址都可以进行websocket连接,而是需要预先适配才可以连接。 thinkphp6.0中新增的一项就是Event,websocket服务这块依赖于Event,因此我们需要先创建一个Event listener php think make:listener WebsocketTest 执行过后,将会在app目录下看到新增的目录和文件 其中handle是用来处理事件。 参考如图进行修改 class WebsocketTest { public $websocket = null; /** * 注入容器管理类,从容器中取出Websocket类,或者也可以直接注入Websocket类, */ public function __construct(Container $container) { $this->websocket = $container->make(Websocket::class); } /** *