目录

程序员子悠 · 好记性不如烂笔头

技术人生 X 人生技术

存档: 2020 年 02 月 (7)

远程办公与在公司办公有什么不同

今天是 2020 年 2 月 24 日 周一,今天是疫情隔离结束后的第一个正式工作日,之前都是在家远程办公,周末的时候收到公司通知提到广东的疫情已经控制的很好了,只要在家隔离过三天的都可以正常回公司上班了,只要全程戴好口罩配合测量体温就好。 这个春节的假期有点长,长的让人有点在家待不住,虽然在家也是远程办公,但是毕竟还是会被各种杂事和诱惑打扰到,确实比较难以静下心来。所以既然今天是第一天复工,在这个不寻常的日子记录一下一天的过程和状态,另外也说说在家办公和在公司办公整个人的感受。 早上洗漱完后,背上双肩包,带上 N95 就出门上班了,由于住的距离公司比较近,全程都是走过去的,只是由于特殊情况,一些小道被封闭了,只能走正门进入。早上出公寓和园区的时候还是很快,因为是出门,所以没有量体温,到公司楼下的时候就不一样了,排队测量体温的人和私家车很多。由于我今天是第一天复工还没有办理出入证,所以除了测量体温还需要使用身份证登记,并且还有查一下 15 天之内的行程轨迹,因为担心是从重灾区过来的。 一切还是很顺利的,因为作者老家也并不是重灾区,进到公司大楼的时候,同样的操作又来了一遍。经过两次的登记....

【Redis 06】聊聊 Redis 的事务

背景 提到事务想必大家一定不会陌生,工作面试中多多少少都会了解到,这篇文章主要带大家再简单回忆一下事务的基本知识,然后重点介绍下 Redis 的事务,关于 Redis 的事务有何不同我们继续往下看就知道了。 什么事务 说到事务,首先我们需要知道什么是事务。首先事务是作为单个逻辑工作单元执行的一系列操作,这些操作作为一个整体一起向系统提交,要么都执行,要么都不执行。事务是一个不可分割的逻辑单元。 事务的四大特性 A(原子性)事务的各步操作是不可分的,保证一系列的操作要么都完成,要么都不完成; C(一致性)事务完成,数据必须处于一致的状态; I(隔离性)对数据进行修改的所有并发事务彼此之间是相互隔离,这表明事务必须是独立的,不应以任何方式依赖或影响其他事务; D(持久性)表示事务对数据处理结束后,对数据更改必须持久化,不管是事务成功还是回滚。事务日志都能够保持事务的永久性。 以上是常规的事务以及事务的特性。下面我们来看一下什么是 Redis 的事务,以及 Redis 事务有什么特殊性质。 Redis 事务 关于 Redis 的性质官方文档如下 MULTI, EXEC, DISCARD an....

【Redis 05】一文带你了解 Redis 的发布与订阅的底层原理

01、前言 发布订阅系统在我们日常的工作中经常会使用到,这种场景大部分情况我们都是使用消息队列的,常用的消息队列有 Kafka,RocketMQ,RabbitMQ,每一种消息队列都有其特性,关于 Kafka 的使用和源码分析,公号前面有相关的文章,大家可以前往回顾一下,另外两款消息队列大家有需要可以自行研究,后续我们会出相应的介绍文章。这篇文章主要是给大家介绍 Redis 的发布订阅系统,很多时候我们可能不需要独立部署相应的消息队列,只是简单的使用,而且数据量也不会太大,这种情况下,我们就可以使用 Redis 的 Pub/Sub 模型。 02、使用方式 2.1 发布与订阅 Redis 的发布订阅功能主要由 PUBLISH,SUBSCRIBE,PSUBSCRIBE 命令组成,一个或者多个客户端订阅某个或者多个频道,当其他客户端向该频道发送消息的时候,订阅了该频道的客户端都会收到对应的消息。 上图中有四个客户端,Client 02,Client 03,Client 04 订阅了同一个 Sport 频道(Channel),这时当 Client 01 向 Sport Channel 发送消息 ....

【Redis 04】一文带你了解 Redis 的慢日志相关底层原理

01、前言 相信很多小伙伴在使用 Redis 的时候都知道 Redis 有相关慢日志的查询功能,并且多多少少都看过。那 Redis 底层到底是如果创建慢日志以及慢日志的结构是什么样子的呢?这篇文章就带大家认识一下。我们先看一张慢日志的截图 使用 slowlog get 2 命令查看最近的两条慢日志信息,如上图,我们可以看到每条日志中包含的信息有六个部分组成,从上到下编号为 0-5,依次代表的意思是 0:日志的唯一编号 ID 1:命令执行的当前时间戳 2:命令执行的耗时时长,单位微妙 3:具体的执行命令和参数 4:客户端的 ip 和端口(4.0 版本以上才支持) 5:客户端名称(4.0 版本以上支持) 如上图所示,第一条慢日志的 ID 是 41,命令执行的时间戳是 1575729996,并且执行了 16129 微妙,具体执行的命令就是 slowlog get ,ip 和端口是 27.38.56.88:8223 ,客户端的名称没有设置。 02、慢日志命令设置 查看命令 上面我们已经大概的知道的一条慢日志的格式,自然的我们可以想到的问题是一个命令执行多长时间,我们就可以认为是慢查询,以及慢日....

【Redis 03】一文看懂 Redis 的内存回收策略和 Key 过期策略

01、前言 Redis 作为当下最热门的 Key-Value 存储系统,在大大小小的系统中都扮演着重要的角色,不管是 session 存储还是热点数据的缓存,亦或是其他场景,我们都会使用到 Redis。在生产环境我们偶尔会遇到 Redis 服务器内存不够的情况,那对于这种情况 Redis 的内存是如何回收处理的呢?另外对于带有过期时间的 Key Redis 又是如何处理的呢? 02、Redis 内存设置 我们都知道如果我们要设置 Redis 的最大内存大小只需要在配置文件 redis.conf 中配置一行 maxmemory xxx 即可,或者我们通过 config set 命令在运行时动态配置 Redis 的内存大小。 03、Redis 内存过期策略 3.1、过期策略的配置 那么当 Redis 内存不够的时候,我们要知道 Redis 是根据什么策略来淘汰数据的,在配置文件中我们使用 maxmemory-policy 来配置策略,如下图 我们可以看到策略的值由如下几种: volatile-lru: 在所有带有过期时间的 key 中使用 LRU 算法淘汰数据; alkeys-lru: 在....

【Redis 02】Redis 简单动态字符串

大家好,我是鸭血粉丝(大家会亲切的喊我 「阿粉」),是一位喜欢吃鸭血粉丝的程序员,之前给大家总结了线上 OOM 的情况,相信大家也能从中学到一些东西,身为一名有追求的程序员,阿粉我的理解是光会吃老本是不行的,所以我一直也在学习,今天大家就跟我一起来了解一下 Redis 的 SDS 吧(不是 SOS 哦~)。 01、SDS 数据结构 Redis 底层是基于 C 语言来开发的,但是它没有采用 C 语言传统的字符串表示方式,而是自定义了一种叫做 SDS(Sample Dynamic String,简单动态字符串)的数据结构来表示字符串。传统的 C 语言的字符串是采用空字符(\0)作为结尾的字符数组,SDS 的数据结构稍微复杂一点,整个结构包含三个部分,是 Redis 的基础。(阿粉猜测这里就是传说中的青出于蓝而胜于蓝)。 1.1、数据结构 在源码 sds.h/sdshdr 结构体中定于了 SDS 的数据结构,包括三个部分,free,len,buf[],依次含义如下 buf[]:字节数组,用于存放实际的字符串; len:记录 buf 数组中已经使用的字节数量,等同于 SDS 所保存的字符串的长....

【Redis 01】Redis 基本概述与安装

Redis 作为当下主流的 NoSQL 数据库,已经成为企业级开发不可或缺的一个重要组件了,现在大大小小的项目都会用到它,并且最新的版本已经达到 5.x 了。从这篇文章开始,我们会用一个系列的文章详细的给大家介绍一下 Redis 底层实现和使用场景,希望能帮助大家更好的使用。 01、概述 本篇是 Redis 系列的第一篇文章,我们主要对 Redis 做一下概述,以及详细的安装教程和简单使用,后面的文章会一步一步带大家走进 Redis 的细节部分。 1.1 Redis 简介 学任何一个技术,我们首先看的必定是官网,Redis 的官网是这样介绍的 Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache and message broker. It supports data structures such as strings, hashes, lists, sets, sorted sets with range queries, bitmaps, ....