Redis

为什么缓存有这么多的弊端,使用的人还有这么多?

China☆狼群 提交于 2020-08-13 04:01:00
文源网络,仅供学习之用,如有侵权请联系删除。 缓存的使用,是一个逐渐演进的过程。 问一下你自己,最直接的使用缓存的原因是什么? 无它,唯快而已! 追溯一下自己最开始使用缓存的场景,一些数据库里存储的不变的配置信息,服务启动时,直接加载到本地公共模块,方便其它功能模块共享使用。这便是最基本,最简单的本地缓存应用。 一、服务与缓存 所谓的服务,简而言之,一层应用 + 一层数据,应用从数据层获取数据然后加工输出。 数据层,通常我们指的是持久化介质上的持久化存储。它有多种形式的,可以是文件,或者数据库。 数据存储在持久化介质上,而应用运行与内存中。内存和持久化介质是两个有着量级速度差别的不同介质,由此,应用和数据之间便有了“矛盾”。 有了这“矛盾”的引子,便有了对缓存的迫切需求。 我们说的缓存,必然要是存放于内存中的,这样它便能距离应用更近,更快的给出应用所需要的数据,以获得更快的服务响应。 当然,并不是缓存完全隔绝持久层数据。缓存,伴随而生的一个词叫做命中率。 当我们查询的数据存在于缓存中的时候,我们称之为“命中”,此时,所需数据可以直接由缓存提供。 而对于未“命中”的数据,则需要穿过缓存层,进一步去持久化数据层获取。此种情景,我们称之为缓存穿透。 数据获取之后,在返回给应用之前,我们需要重新填充缓存,以供下一次“命中”查询。 当然,上述我们所述只是指“读”查询情景。

Asp.net Core认证和授权:Cookie认证

£可爱£侵袭症+ 提交于 2020-08-13 04:00:17
原文: Asp.net Core认证和授权:Cookie认证 这里我只是记录下自己在学习中的点滴和一些不懂的地方 Cookie一般是用户网站授权,当用户访问需要授权(authorization)的页面,程序会判断是否已经授权,并认证 添加认证代码: 引入命名空间:Microsoft.AspNetCore.Authentication.Cookies; 添加服务 public void ConfigureServices ( IServiceCollection services ) { services . AddMvc (). SetCompatibilityVersion ( CompatibilityVersion . Version_2_2 ); services . AddAuthentication ( CookieAuthenticationDefaults . AuthenticationScheme ) . AddCookie (); } 注册中间件,添加到管道 app.UseAuthentication(); 注意:一定要在app.UseMvc之前添加 我们通过源码可以看到cookie的一些默认配置 // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the

Tomcat集群带来的问题和解决思路

若如初见. 提交于 2020-08-13 03:38:51
Tomcat集群 存在问题 解决方案 基于Redis+Cookie+Jackson+Filter的原生解决集群Session共享问题 使用Spring Session零侵入解决Session共享 单点登录实现 Redis构建Session服务器 使用Redis+Cookie+Jackson+Filter实现单点登录 Spring Session实现单点登录 来源: oschina 链接: https://my.oschina.net/jacklinnn/blog/4486147

北京2020-后端程序员面试总结

馋奶兔 提交于 2020-08-13 03:35:57
一、概述 7月20号决定从杭州辞职到北京找工作,在这一段时间里,我大概面试了20家左右的公司,其中有线下面试也有线上的视频面试。 有百度,新浪微博之类的公司,也有好未来,作业帮这样的公司,以及一些不太出名的公司。最后也拿到了两个offer,也还有一些等待复试的。这次想总结一下面试的简单问题,以及自己的未来学习规划。 二、面试的问题 1.数据结构 数据结构这块,可能由于我是web开发,基本上问的不会特别深,也就限制在基本排序和查找,或者链表的基本操作。时间复杂度,空间复杂度,各种排序的应用场景。链表反转,链表是否有环,只有一个公司让写二叉树的反转。所以,我的总结是数据结构不必花大量时间在刷题上,只有对常用常见的熟悉就好,应该把更多时间和精力放在其他部分。 2.操作系统 基本上现在都是使用Linux系统。会问一些Linux你常用的命令,还有日志查找。由于现在的网站,并发都是很大的概念。所以都会问一些进程和线程的概念。还有多路复用,select,poll,epoll区别。还有nginx apche的常用配置。进程和进程之间怎么通讯。再难一点会问到死锁的概念。也不需要花大量时间在这上面准备。 3.网络 网络基本上会问你知道哪些协议。TCP和UDP区别,TCP为什么是可靠的,三次握手四次握手是解决什么问题。TCP和UDP分别用在哪些地方。这个不会问太深

etcd环境安装与使用

别来无恙 提交于 2020-08-13 03:32:04
etcd简介 etcd 是开源的、高可用的分布式key-value存储系统,可用于配置共享和服务的注册和发现,它专注于: 简单:定义清晰、面向用户的API(gRPC) 安全:可选的客户端TLS证书自动认证 快速:支持每秒10,000次写入 可靠:基于Raft算法确保强一致性 etcd与redis差异 etcd和redis都支持键值存储,也支持分布式特性,redis支持的数据格式更加丰富,但是他们两个定位和应用场景不一样,关键差异如下: redis在分布式环境下不是强一致性的,可能会丢失数据,或者读取不到最新数据 redis的数据变化监听机制没有etcd完善 etcd强一致性保证数据可靠性,导致性能上要低于redis etcd和ZooKeeper是定位类似的项目,跟redis定位不一样 为什么用 etcd 而不用ZooKeeper? 相较之下,ZooKeeper有如下缺点: 复杂 :ZooKeeper的部署维护复杂,管理员需要掌握一系列的知识和技能;而 Paxos 强一致性算法也是素来以复杂难懂而闻名于世;另外,ZooKeeper的使用也比较复杂,需要安装客户端,官方只提供了 Java 和 C 两种语言的接口。 难以维护 :Java 编写。这里不是对 Java 有偏见,而是 Java 本身就偏向于重型应用,它会引入大量的依赖。而运维人员则普遍希望保持强一致、高可用的机器集群尽可能简单

阿里云李响荣获 2020 中国开源杰出贡献人物奖,我们找他聊了聊开源和云原生

半城伤御伤魂 提交于 2020-08-13 03:21:43
作者 | 禾易 在第十五届“开源中国开源世界”高峰论坛上,阿里云资深技术专家、etcd 创始人、CNCF TOC 李响荣获 2020 中国开源杰出人物贡献奖。恭喜李响! 去年,全球顶级开源社区云原生计算基金会 CNCF 正式宣布其技术监督委员会席位改选结果。阿里云资深技术专家李响入选,成为该委员会有史以来首张中国面孔。 李响是 CoreOS 最早期的工程师之一,参与创建了 etcd、operator framework、rkt 等开源项目。而在开源社区中,李响作为 etcd 作者被开发者所熟知,etcd 是国际知名且被最为广泛使用的分布式一致性存储系统,被阿里巴巴、腾讯、华为、腾讯、微软、谷歌、VMWare 等企业在生产环境和客户产品中使用,用来解决分布式系统中重要元信息存储、管理和备份的问题,以及分布式系统组件一致性协调的问题。 在加入阿里云后,李响一直在推动云原生领域自动化运维相关理念、Operator 概念、OAM 标准的建立。Operator 给予开发和运维人员在云原生平台构建无状态和复杂应用运维的理论标准和实践基础,大幅度提高了云原生运维平台的覆盖度,在开源生态中涌现出了超过 500 个 Operator 具体实现,覆盖了几乎所有的主流云原生软件的运维,其中包含 RocketMQ、Kafka、ZooKeeper、Consul、Argo、Kubeflow 等

玩转Redis-HyperLogLog统计微博日活月活

旧巷老猫 提交于 2020-08-13 03:19:18
《玩转Redis》系列文章主要讲述Redis的基础及中高级应用。本文是《玩转Redis》系列第【9】篇,最新系列文章请前往 公众号“zxiaofan” 查看,或 百度搜索“玩转Redis zxiaofan” 即可。 本文关键字:玩转Redis、微博日活/月活、UV统计、HyperLogLog; 大纲 日活数据统计面临哪些挑战 Bitmaps可用于统计日活吗? 日活数据统计的特点 HyperLogLog介绍 HyperLogLog必知 HyperLogLog和Sets的区别 HyperLogLog如何使用 HyperLogLog命令对比分析 HyperLogLog命令详解 HyperLogLog命令注意事项 HyperLogLog命令示例 HyperLogLog的应用场景 名词解释 DAU(Daily Active User)日活跃用户数量 常用于反映网站、互联网应用或网络游戏的运营情况。DAU通常统计一日(统计日)之内,登录或使用了某个产品的用户数(去除重复登录的用户); 月活跃用户数量(Monthly Active User,MAU) 月活跃用户数量通常统计一个月(统计月)之内,登录或使用了某个产品的用户数(去除重复登录的用户); Note:日活、月活反映用户的活跃度,但是无法反映用户的粘性。 1. 日活数据统计面临哪些挑战   2020年2月26日

Go语言学习教程

六月ゝ 毕业季﹏ 提交于 2020-08-13 03:07:15
我关于Go语言的博客原本发布于我的个人网站: wwww.liwenzhou.com 。 但是被某些人抄怕了,没办法只好搬运到博客园。 我的Go语言学习之路 《Go语言学习之路》博客目录。 2015年底我因为工作原因接触到了Go语言,那时网上关于Go语言的学习资料不多,好在一直坚持到现在。我把自己学习Go语言的笔记都整理到这里,希望能给Go社区的发展出一点绵薄之力,帮助更多的人加入Gopher大家庭。 Go语言介绍 为什么你应该学习Go语言? → B站视频链接 开发环境准备 从零开始搭建Go语言开发环境 → B站视频链接 VS Code配置Go语言开发环境 → B站视频链接 Go语言基础 Go语言基础之变量和常量 → B站视频链接 Go语言基础之基本数据类型 → B站视频链接 Go语言基础之运算符 → B站视频链接 Go语言基础之流程控制 → B站视频链接 Go语言基础之数组 → B站视频链接 Go语言基础之切片 → B站视频链接 Go语言基础之map → B站视频链接 Go语言基础之函数 B站视频01函数部分 B站视频02匿名函数和闭包部分 Go语言基础之指针 → B站视频链接 Go语言基础之结构体 B站视频01自定义类型和类型别名 B站视频02结构体定义与实例化 B站视频03方法和接收者 B站视频04结构体嵌套 B站视频05结构体字段可见性和JSON

Dockerfile编写制作centos7.7+php5.6+nginx镜像

依然范特西╮ 提交于 2020-08-13 02:51:52
1、新建一个dockerfile文件 touch test.Dockerfile 2、找一个centos基础镜像  可以去docker hub上寻找,链接: docker-hub  在搜索框搜索'centos',或者直接点击 docker-hub-centos 。里面有从centos 6 到最新的centos 8 等各版本的基础镜像,此处我选择版本:centos:7.7.1908,当然也可以选择其它版本。  所以,在test.Dockerfile第一行为: FROM centos:7.7.1908 3、MAINTAINER 指定作者 (非必要) MAINTAINER wu "471515***@qq.com" 4、使用RUN命令安装php5.6   因为我采用yum安装,所在需要先配置和更新yum源,然后再进行php5.6安装,。原本在centos的命令如下: yum install -y epel-release yum -y install wget wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7. repo rpm -ivh http: //rpms.famillecollet.com/enterprise/remi-release-7. rpm yum -y install -

作为一个面试官,我想问问你Redis分布式锁怎么搞?

两盒软妹~` 提交于 2020-08-13 02:37:15
最强面试题推荐: 2020Java面试题及答案,命中率高达90% 总结一下加锁过程:首先选择一台机器,然后发送一段lua脚本,带有三个参数:一个是锁的名字(在代码里指定的)、一个是锁的时常(默认30秒)、一个是加锁的客户端id(每个客户端对应一个id)。然后脚本会判断是否有该名字的锁,如果没有就往数据结构中加入该锁的客户端id。 锁互斥机制 很简单,上面第一个if判断会执行“exists myLock”,如果发现myLock这个锁key已经存在了,就会进行第二个if判断,判断一下myLock锁key的hash数据结构中,是否包含客户端2的ID,但是明显不是的,因为那里包含的是客户端1的ID。 所以,客户端2会获取到pttl myLock返回的一个数字,这个数字代表了myLock这个锁key的剩余生存时间。比如还剩15000毫秒的生存时间。 此时客户端2会进入一个while循环,不停的尝试加锁。直到客户端1释放myLock这个锁。 锁时间自动延迟机制 客户端1加锁的默认时长是30秒,如果超过了30秒,客户端1还想持有这把锁该怎么办呢?机制如下: 只要客户端1一旦加锁成功,就会启动一个watch dog看门狗,他是一个后台线程,会每隔10秒检查一下,如果客户端1还持有锁key,那么就会不断的延长锁key的生存时间。 可重入加锁机制 如果客户端1已经持有这把锁了,还想加锁,该怎么办呢