无题
在上一节课中,我们介绍完了 Redis Hash 表中比较重要的命令。这一节紧接着上一节的内容,我们来介绍一下 Hash 结构在实战中的应用场景,并结合 Lettuce 客户端模拟这些应用场景的核心代码。
本节课程中,我们将使用 Redis 的哈希结构实现用户资料缓存以及购物车缓存两个实战应用场景。其中,用户资料缓存示例会结合哈希表的读写命令以及批量命令,演示用户资料如何在 Redis 中进行存储;购物车示例中,除了哈希表读写命令之外,还会使用到递增命令,以实现一个相对完整的、基于 Redis 的购物车功能。
用户资料缓存有开发经验的小伙伴可能知道,在开发系统的时候,用户模块是最基本、最基础的模块之一。用户模块设计简单点,可能存几列信息,例如存储用户名、手机号、密码之类的基本信息;设计复杂点,可能有四五十列,例如存储用户的头像、昵称、签名等信息。
一个 C 端产品的用户量一般都会比较大,每个用户每次登录的时候,都要校验密码,登录成功之后,返回头像、昵称这些基础信息,这个时候就比较适合用 Redis Hash 结构来存用户的这些信息,活跃用户的信息进 Redis 进行缓存,非活跃用户留 ...
无题
在前面的文章中,我们已经介绍完了 Redis 中的 String、List、Hash、Set 这四种核心数据结构的命令以及应用场景。本讲作为本模块的最后一节,我们将介绍 Redis 中独有的一种数据结构 —— Sorted Set(也被称为 ZSet) 的核心命令以及实战应用。
下图对 Sorted Set 相关的命令进行了一个简单的分类,本节也将按照这个分类进行介绍。
Sorted Set 命令详解如上图所示,按照命令执行效果,我们可以将 Sorted Set 的相关命令划分为基础命令、弹出命令、范围查询、集合操作四大类。
下面我们先来介绍基础命令这一个分类。
1. 基础命令Sorted Set 中最基础的命令就是 ZADD 命令,它会向 Sorted Set 集合里面添加新元素,ZADD 命令后面可以跟多个元素。
在下面的示例中,就是用 ZADD 命令往 myzset 这个集合里面添加 zhangsan、lisi 两个字符串,同时 zhangsan 这个元素对应的 score 值为 100, lisi 对应的 score 值为 90 ,score 值也被称为“评分”,Sorted ...
无题
在前面的文章中,我们已经介绍完了 Redis 中的 String、List、Hash 三种核心数据结构的命令以及应用场景。这一节,我们将继续介绍 Redis 中另一个数据结构相关的命令 —— Set 集合。下图对 Set 相关的命令进行了一个简单的分类,本节也将按照这分类进行介绍。
Set 命令详解如上图所示,按照命令执行的效果,可以将 Set 相关的命令划分为基本操作和集合操作两大类,下面我们先来介绍基础命令这一个分类。
1. 基础命令Set 里面最基础的命令就是 SADD 命令,它会往 Set 集合里面添加新元素,SADD 命令后面可以跟多个元素。
在下面的示例中,就是用 SADD 命令往 myset 这个集合里面添加 kouzhao、xujie 两个字符串,第一次执行的时候,返回 2,意思就是成功添加了 2 个元素进去;第二次再执行这条命令的时候,返回 0 ,表示这两个元素添加失败了,这是因为 Set 集合的特性就是相同的元素只能有一个。
1234127.0.0.1:6379> SADD myset "kouzhao" "xuejie&quo ...
无题
你好,我是杨四正。有多年互联网一线开发经验,曾在多家互联网企业任职,涉及电商、新零售、短视频、直播等多个领域。目前在某短视频大厂任职 **资深技术专家**,参与公司多款中间件开发,工作中深入研究并改造过多种开源产品的实现,在架构设计方面经验丰富。
我平时特别热衷于技术分享,目前已经出品了 Kafka、Dubbo、MyBatis、etcd、OpenTSDB、Promethus 等多个主题的书籍和课程。
为什么我要讲 Redis?已经出过这么多主题的书籍和课程了,这次我为什么要选择 Redis 这个主题呢?
那自然是因为 Redis 是我们实际开发中不可或缺的组件之一,也是目前全球最流行的 KV 数据库。相信小伙伴们在工作中也会频繁接触到 Redis,但可能并没有量化 Redis 到底有多流行,下面我们一起来看一下,DB-Engines 这个全球知名的数据库排名网站对 Redis 的排名:
在 Complete Ranking 列表(不分类的列表)中,Redis 排名第六,排在它前面的都是关系型数据库,可以说 Redis 和它们都不是一个赛道的产品;在 Key-Value Store 这 ...
无题
镜像与容器镜像和容器作为 Docker 里最基础的概念,我们很有必要了解 Docker 对它们的很多定义以及其他与它们有关的知识。在这一小节里,我们就专门针对镜像与容器两个概念展开,细致的梳理与这两者有关的概念和定义。
Docker 镜像如果进行形象的表述,我们可以将 Docker 镜像理解为包含应用程序以及其相关依赖的一个基础文件系统,在 Docker 容器启动的过程中,它以只读的方式被用于创建容器的运行环境。
从另一个角度看,在之前的小节里我们讲到了,Docker 镜像其实是由基于 UnionFS 文件系统的一组镜像层依次挂载而得,而每个镜像层包含的其实是对上一镜像层的修改,这些修改其实是发生在容器运行的过程中的。所以,我们也可以反过来理解,镜像是对容器运行环境进行持久化存储的结果。
深入镜像实现与其他虚拟机的镜像管理不同,Docker 将镜像管理纳入到了自身设计之中,也就是说,所有的 Docker 镜像都是按照 Docker 所设定的逻辑打包的,也是受到 Docker Engine 所控制的。
这么说起来也许还不够具体,让我们来做一个比较。我们常见的虚拟机镜像,通常是由热心的提供 ...
无题
运行和管理容器容器是基于容器技术所建立和运行的轻量级应用运行环境,它是 Docker 封装和管理应用程序或微服务的“集装箱”。在 Docker 中,容器算是最核心的部分了,掌握容器的操作也是 Docker 中最基础的技能了。在这一节中,我们会深入了解容器,展示关于容器的操作。
容器的创建和启动在了解容器的各项操作之前,我们再来回顾一下之前我们所提及的容器状态流转。
在这幅图中,我们可以看到,Docker 容器的生命周期里分为五种状态,其分别代表着:
Created:容器已经被创建,容器所需的相关资源已经准备就绪,但容器中的程序还未处于运行状态。
Running:容器正在运行,也就是容器中的应用正在运行。
Paused:容器已暂停,表示容器中的所有程序都处于暂停 ( 不是停止 ) 状态。
Stopped:容器处于停止状态,占用的资源和沙盒环境都依然存在,只是容器中的应用程序均已停止。
Deleted:容器已删除,相关占用的资源及存储在 Docker 中的管理信息也都已释放和移除。
创建容器当我们选择好镜像以后,就可以通过 docker create 这个命令来创建容器了。
123$ ...
无题
了解 Docker 的核心组成在掌握 Docker 的一些背景知识后,我们还不得不花费一节的篇幅来简单介绍有关 Docker 核心的一些知识。当然,大家不要觉得有“核心”这类的词,我们就要在这一节中深入 Docker 底层去讲解原理性的东西,更确切的说这一节更像一张词汇表,在掌握这些与 Docker 紧密相关的词汇后,大家可以更好的理解之后小节中的内容。
四大组成对象在之前的小节里,我们提到了 Docker 实现容器引擎的一些技术,但那些都是一些相对底层的原理实现,在 Docker 将它们封装后,我们并不会直接操作它们。在 Docker 中,另外提供出了一些软件层面的概念,这才是我们操作 Docker 所针对的对象。
在 Docker 体系里,有四个对象 ( Object ) 是我们不得不进行介绍的,因为几乎所有 Docker 以及周边生态的功能,都是围绕着它们所展开的。它们分别是:**镜像 ( Image )、容器 ( Container )、网络 ( Network )、数据卷 ( Volume )**。
镜像镜像 ( Image ) 这个概念相信大家不会陌生,因为它是其他虚拟化技 ...
无题
管理和存储数据数据是应用程序重要的产出,所以很好的管理和存储数据,是对应用程序劳动结果的尊重。特别是在大数据时代,所有的数据都是重要的资产,保护好数据是每个开发者必须掌握的技能。我们知道,在 Docker 里,容器运行的文件系统处于沙盒环境中,与外界其实是隔离的,那么我们又要如何在 Docker 中合理的通过文件与外界进行数据交换呢?在这一小节中,我们就来介绍 Docker 中与文件数据有关的内容。
数据管理实现方式Docker 容器中的文件系统于我们这些开发使用者来说,虽然有很多优势,但也有很多弊端,其中显著的两点就是:
沙盒文件系统是跟随容器生命周期所创建和移除的,数据无法直接被持久化存储。
由于容器隔离,我们很难从容器外部获得或操作容器内部文件中的数据。
当然,Docker 很好的解决了这些问题,这主要还是归功于 Docker 容器文件系统是基于 UnionFS。由于 UnionFS 支持挂载不同类型的文件系统到统一的目录结构中,所以我们只需要将宿主操作系统中,文件系统里的文件或目录挂载到容器中,便能够让容器内外共享这个文件。
由于通过这种方式可以互通容器内外的文件,那么文件 ...
无题
浅谈虚拟化和容器技术相信所有对 Docker 有所耳闻的朋友都知道,它是一款以容器虚拟化技术为基础的软件,因此在了解有关 Docker 的概念知识和使用方法之前,虚拟化和容器技术是我们不可或缺的基础知识。在本小册的第一个小节里,我们就先来尝一尝这道有关虚拟化和容器技术的开胃菜吧。
虚拟化技术如果要用简单的语句来阐述虚拟化技术的话,那么可以这么解释:
虚拟化技术是一种将计算机物理资源进行抽象、转换为虚拟的计算机资源提供给程序使用的技术。
这里所指的计算机资源,就包括了 CPU 提供的运算控制资源,硬盘提供的数据存储资源,网卡提供的网络传输资源等。
为程序跨平台兼容而生虚拟化这个概念并不是什么新事物了,早在 20 世纪 60 年代,IBM 就用它来描述一套能够抽象硬件资源的实验性系统。
在计算机技术发展的早期,各类计算平台、计算资源所提供的接口、调用方式十分杂乱,没有像今天这样相对统一的标准。由于要适配不同的平台,写各种兼容代码,这无形给开发者带来了很多的困扰。这种混乱甚至都出现在 IBM 这一家公司下不同机型的机器上,所以 IBM 的工程师们创造了虚拟化技术,用来帮助程序快速适配不 ...
无题
这是 Docker 的简历在了解虚拟化和容器技术后,我们就更容易理解 Docker 的相关知识了。在这一小节中,我将介绍关于 Docker 的出现和发展,Docker 背后的技术。同时,我们将阐述 Docker 在虚拟化领域中的定位以及其带来的变革。
Docker 开源项目如果说 Docker 的诞生,就必须从 Docker 这个开源项目提起 ( 虽然它现在已经不叫 Docker 了 )。Docker 项目是一个由 Go 语言实现的容器引擎,它最初由 dotCloud 这家做云服务的公司在 2013 年开源。
由于 Docker 带来的巨大的便利,让很多开发、测试和运维等软件开发环节上的工作被简化甚至省去,所以在短短的几年间便成为虚拟化乃至整个技术领域的热词。同时,许多开发者乃至大型科技企业都参与到了 Docker 相关领域的贡献中来,为 Docker 及其生态圈贡献了许多优秀的软件项目,这大大提高了 Docker 生态的完整性,也让 Docker 日益健壮。
也许 dotCloud 自己也没有想到,云服务没卖出几个钱,反倒是 Docker 越来越火。拥有商业头脑的他们,干脆不再做云服 ...
