Redis

ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 26. 缓存

风格不统一 提交于 2020-12-17 15:39:42
In-Memory 使用IMemeryCache接口 注册缓存 HomeController注入进来 建一个类,用来存缓存的常量 判断缓存里面是否有数据,如果没有就读数据库存起来。 设置缓存事件,可调的 30秒。如果缓存的值被访问了就延长30秒 绝对过期,600秒 缓存被清空之后,调用回调方法,再填充回去 Cache Tag Helper 属性: enabled:是否启用 expires-on:绝对过期时间 expires-after: expires-sliding vary-by-header:如果请求的 header 变了,缓存就需要刷新 vary-by-query vary-by-route vary-by-cookie vary-by-user vary-by priority 过期事件设置为30秒 分布式缓存 分布式缓存的特点 类型: 分布式 Memory Cache(仅适合开发时使用) 分布式 Sql Server Cache 分布式 Redis Cache(推荐) 从docker中拉取redis的镜像 简历容器 正在运行 注册redis 转换成json字符串后还需要转换成byte类型 else的情况 容器内把端口暴露出来 运行页面走到断点这里了 Response 缓存 它是一种客户端的缓存,减轻服务端压力 再设置另外一个 在客户端缓存 另外一种用法 压缩

一文掌握 Redisson 分布式锁原理(值得收藏)

戏子无情 提交于 2020-12-17 15:33:14
Redisson 可以直接查看 Github Redisson官网 介绍, 没有了解过的小伙伴, 看一下 Redisson 的 WIKI 目录, 仔细瞅瞅 Redis 是如何被 Redisson 武装到牙齿的 这里先过一下和文章有关的一部分内容 通过项目简介可以看出来, 写这个项目介绍的人水平非常哇塞哈, 从第一段咱们就知道了两个问题 Redisson 是什么 Redisson 是架设在 Redis 基础上的一个 Java驻内存数据网格框架 , 充分利用 Redis 键值数据库提供的一系列优势, 基于 Java 使用工具包中常用接口 , 为使用者提供了 一系列具有分布式特性的常用工具类 Redisson 的优势 使得原本作为协调单机多线程并发程序的工具包 获得了协调分布式多机多线程并发系统的能力 , 大大降低了设计和研发大规模分布式系统的难度 同时结合各富特色的分布式服务, 更进一步 简化了分布式环境中程序相互之间的协作 了解到这里就差不多了, 就不向下扩展了, 想要了解详细用途的, 翻一下上面的目录 Redisson 重入锁 由于 Redisson 太过于复杂, 设计的 API 调用大多用 Netty 相关, 所以这里只对 如何加锁、如何实现重入锁进行分析以及如何锁续时进行分析 创建锁 我这里是将 Redisson 的源码下载到本地了 下面这个简单的程序, 就是使用

Apache shiro 权限绕过漏洞汇总

生来就可爱ヽ(ⅴ<●) 提交于 2020-12-17 14:13:25
声明 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,雷神众测以及文章作者不为此承担任何责任。 雷神众测拥有对此文章的修改和解释权。如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经雷神众测允许,不得任意修改或者增减此文章内容,不得以任何方式将其用于商业目的。 No.1 简述 前段时间太忙了,忙到很多东西,只是记录了笔记,没有成文,刚好最近阶段又出来了shiro权限绕过漏洞,因此本文将这三个权限绕过的洞进行对比,他们的编号分别是 CVE-2020-1957、CVE-2020-11989、CVE-2020-13933 。 No.2 漏洞细节 1、CVE-2020-1957 原理 首先在 admin 位置下断点,可以看到,我们网络请求,是先经过 shiro 处理之后,再转发到 springboot 进行路由分发工作。 这里直接定位到 shiro 处理 url 的方法位置: WebUtils# getPathWithinApplication public static String getPathWithinApplication(HttpServletRequest request) { String contextPath = getContextPath(request); String requestUri =

为什么大厂面试,都喜欢考算法?

妖精的绣舞 提交于 2020-12-17 12:00:35
“ 语言只是工 具,而算法才是程序的灵魂 。”这句话,我估计你已经听到过无数次。 可一旦具体到日常工作中,我们还是会遇到各类的 「困扰」 : 像数据结构和算法这种脱离实际工作的知识,是不是除了面试,这辈子也用不着?那还有学的必要吗? 哪怕不懂算法,只要把 Java API、开发框架用得熟练,同样能让代码“飞”起来,为什么还要花精力去学? 先不急着解答你的问题,我先问你, 作为一名开发工程师,你真的愿意做一辈子的 「CRUD boy 」 ? 大部分程序员整天都在重复「增删改查」,哪怕是在所谓的“业务开发”中,也只不过是利用已经封装好的现成的接口、类库来堆砌或者翻译业务逻辑。 确实,这很少能用到数据结构或者算法之类的知识。 但是, 不需要自己实现,并不代表什么都不需要了解和掌握! 举个例子,假如你不懂这些类库背后的原理,不懂时间、空间复杂度分析,那又何谈能用好、用对?存储某个业务数据时,又怎么选择用 ArrayList,还是 LinkedList ?调用了某个函数后,又该如何去评估代码的性能和资源的消耗? 清醒一点, 初级程序员才比招式,高级程序员只看内功。 仅仅是一个简单的 ArrayList或Linked List 的选择,就可能带来成千上万倍的性能差别。 这时候,数据结构和算法的价值就完全凸显出来。只要你理解背后的数据结构,可以迅速看出这些类的本质区别。届时根本用不上死记硬背

Github Actions 中 Service Container 的使用

╄→尐↘猪︶ㄣ 提交于 2020-12-17 08:54:59
Github Actions 中 Service Container 的使用 Intro 之前写过一个 StackExchange.Redis 的一个扩展,测试项目依赖 redis,所以之前测试一直只是在本地跑一下,最近通过 Github Action 中的 Service Container 来通过 CI 来跑测试,分享一下如何使用 service container 来跑测试,不仅仅是 Redis,数据库等依赖也可以使用这样的方式来测试 Redis Service Container Sample jobs: # Label of the runner job runner-job: # You must use a Linux environment when using service containers or container jobs runs-on: ubuntu-latest # Service containers to run with `runner-job` services: # Label used to access the service container redis: # Docker image image: redis:alpine # Set health checks to wait until redis has started

022.掌握Pod-Pod升级和回滚

£可爱£侵袭症+ 提交于 2020-12-17 08:52:28
一 deploymentPod升级和回滚 1.1 deployment升级 若Pod是通过Deployment创建的,可以在运行时修改Deployment的Pod定义(spec.template)或镜像名称,并应用到Deployment对象上,系统即可完成Deployment的自动更新操作。 如果在更新过程中发生了错误, 则还可以通过回滚操作恢复Pod的版本。 示例: 1 [root@uk8s-m-01 study]# vi nginx-deployment.yaml 2 apiVersion: apps/v1beta1 3 kind: Deployment 4 metadata: 5 name : nginx-deployment 6 spec: 7 replicas: 3 8 template: 9 metadata: 10 labels: 11 app: nginx 12 spec: 13 containers: 14 - name : nginx 15 image: nginx:1.7.9 16 ports: 17 - containerPort: 80 18 19 [root@uk8s-m-01 study]# kubectl create -f nginx-deployment.yaml 20 [root@uk8s-m-01 study]# kubectl get

京东后台一面面经

孤街醉人 提交于 2020-12-17 06:25:58
4月13号 16:00 40分钟 自我介绍 你们信管出了程序语言课都学啥?(经济学、管理学) IT项目管理学过吗?讲讲呗(??十大知识领域??) 封装继承多态详细介绍,举个多态的例子。 有抽象方法一定是抽象类吗?抽象类一定有抽象方法吗? list和set的区别。 有没有有序的set?(有,LinkedHashSet) HashMap和HashTable的区别。 HashTable为什么是线程安全的?(synchronized锁住了)(然后不问我synchronized) 有没有既线程安全效率又高的Map?(ConcurrentHashMap) BlockQueue见过没?(线程池的排队策略) 线程池的排队策略和拒绝策略的试用条件和具体内容。 介绍一下spring中的IOC和AOP。 IOC是那几个单词? spring如何生成一个Bean?配置文件写完了之后又怎么生成? AOP的应用场景,具体介绍,配置文件中需要写什么?具体注解需要写啥? 说几个springMVC的几个注解,都是干啥的? @PathVariable是干啥的? 说说filter、servlet、listener。 Redis知道吗?缓存呢?缓存是干啥的?有啥作用? 看过啥书。(jvm&大型网站技术架构,看博客比较多,感觉博客更有针对性) 介绍项目。 做项目中的问题。技术问题,如何沟通&解决?(用完ajax之后

喧哗的背后:Serverless 的概念及挑战

我是研究僧i 提交于 2020-12-17 04:22:14
作者 | 许晓斌 阿里云高级技术专家,目前负责阿里集团 Serverless 研发运维平台建设,《Maven 实战》作者,曾经是 Maven 中央仓库的维护者。 **导读:**本文作者作为阿里集团 Serverless 研发运维平台负责人,从应用架构的角度去分析 Serverless 为何会让那么多人着迷,它的核心概念究竟是什么,并总结了一些落地 Serverless 必然会面临的问题。 前言 我曾在 《Serverless 的喧哗与骚动》 一文中对 Serverless 今天在行业中所处的状态做了一个比喻,这个比喻是这么说的: Serverless is like teenage sex: Everyone talks about it, nobody really knows how to do it, everyone thinks everyone else is doing it, so everyone claims they are doing it. 虽然距离写那篇文章已经过去了半年的时间,但是这种状态在我看来其实没有发生太大的变化,有很多的一线研发或者管理者对 Serverless 技术的理解是非常片面的,有些甚至是错误的。如果缺乏对应用架构演进的理解,缺乏对于云基础设施能力的理解,缺乏对风险的判断,盲目的上新技术可能不仅无法兑现业务价值,浪费精力

redis源码之SDS

心不动则不痛 提交于 2020-12-17 00:56:53
#1:SDS介绍 我们在redis中执行命令 set key name 的时候,key和name都是字符串类型,而且字符串(string)在redis中是会经常用到的类型,那redis是如何保存字符串的呢?我们接下来往下看 众所周知,redis是c写的,在c中使用char来保存字符串,并且用\0作为字符串的结尾,但是redis不是这样保存的,redis是使用一种叫SDS的结构来保存字符串的。结构如下(redis3.2以前) struct sdshdr{ int len; int free; char buf[]; } 那么问题来了,redis为什么 会用SDS的结构,而不直接用c语言的字符串,我们来看看他们的区别 ###1:计算字符串长度的区别 对于c来说,计算字符串的长度的方式就是遍历,遇到\0就停止,所以复杂对是O(n),而SDS直接保存了字符串的长度,复杂度是O(1) ###2:保证二进制的安全 因为SDS并不是以\0为结尾的标志,自然就保证了二进制的安全 ###3:内存管理策略(预分配内存和惰性空间释放策略) redis是一个高速的缓存数据库,需要频繁的对字符串进行操作,如果内存分配错误,会导致很严重的后果,就算内存分配没问题,频繁的内存分配也是非常耗费时间的,所以这些都是应该去避免的 #####惰性空间释放策略 在SDS中首先用到了惰性空间释放策略

Redis 2.8.9源码

谁都会走 提交于 2020-12-17 00:45:42
本文为作者原创,转载请注明出处: http://my.oschina.net/fuckphp/blog/269167 在C中子字符串的实现都是用 char *来实现的,用起来很不方便,而且容易出现内存泄露,并且效率不高,在Redis内部,字符串采用了 sds 的方式进行了封装,似的字符串在Redis中可以方便、高效的使用,Redis字符串的实现如要依赖一下两个数据类型和结构(以下代码可以在 src/sds.h中找到): typedef char *sds; sds 存放了字符串的具体值 struct sdshdr { int len; //字符串对象已经使用的内存数量 int free; //字符串对象剩余的内存数量 char buf[]; //字符串对象的具体值(其实就是sds字符串) }; sdshdr 实现了字符串对象 这样设计的好处有很多,比如使得Redis在获取字符串长度的时候可以达到o(1)的复杂度,在进行追加等字符串操作的时候,可以减少内存分配(提高性能),sdshdr的结构使得根据sds字符串获取对应的sds对象的时候可以非常方便的获取。 创建字符串 init 为需要初始化的字符串值。initlen表示为初始化字符串的长度,该函数创建一个sds字符串对象并返回sds字符串 (以下代码可以在 src/sds.c中找到): sds sdsnewlen(const