• 猿创征文|【云原生 | 25】Docker运行数据库实战之Redis


    作者简介:🏅云计算领域优质创作者🏅新星计划第三季python赛道第一名🏅 阿里云ACE认证高级工程师🏅
    ✒️个人主页:小鹏linux
    💊个人社区:小鹏linux(个人社区)欢迎您的加入!

    目录

    1. 关于NoSQL

    1.1 NoSQL的概念

    1.2 NoSQL的特性

    1.3 NoSQL优点

    2. 关于Redis 

    2.1 Redis持久化数据的机制

    2.2 Redis主从同步的原理 

    2.3 Redis及其优缺点 

    3.  在Docker中运行Redis

    3.1 连接Redis容器 

    3.2 使用自定义配置

      👑👑👑结束语👑👑👑


    1. 关于NoSQL

    1.1 NoSQL的概念

    NoSQL(NoSQL = Not Only SQL ),不意为反SQL运动,是一项全新的数据库革命性运动,2000年前就有人提出,发展至2009年趋势越发高涨。它是指运用非关系型的数据存储,相对于铺天盖地的关系型数据库运用,这一概念无疑是一种全新的思维的注入。

    随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题。

    分类

    Examples举例

    典型应用场景

    数据模型

    优点

    键值(key-value

    Tokyo Cabinet/Tyrant, Redis, Voldemort, Oracle BDB

    内容缓存,主要用于处理大量数据的高访问负载,也用于一些日志系统等等。

    Key 指向 Value 的键值对,通常用hash table来实现

    查找速度快

    列存储数据库

    Cassandra, HBase, Riak

    分布式的文件系统

    以列簇式存储,将同一列数据存在一起

    查找速度快,可扩展性强,更容易进行分布式扩展

    文档型数据库

    CouchDB, MongoDB

    Web应用(与Key-Value类似,Value是结构化的,不同的是数据库能够了解Value的内容)

    Key-Value对应的键值对,Value为结构化数据

    数据结构要求不严格,表结构可变,不需要像关系型数据库一样需要预先定义表结构

    图形(Graph)数据库

    Neo4J, InfoGrid, Infinite Graph

    社交网络,推荐系统等。专注于构建关系图谱

    图结构

    利用图结构相关算法。比如最短路径寻址,N度关系查找等

    1.2 NoSQL的特性

    NoSQL是key-value形式存储,和传统的关系型数据库不一样,不一定遵循传统数据库的一些基本要求,比如说遵循SQL标准、ACID属性、表结构等等。

    这类数据库主要有以下特点:

            非关系型的、分布式、开源的、水平可扩展的

            处理超大量数据

            击碎了性能瓶颈

            对数据高并发读写

            对海量数据的高效率存储和访问

            对数据的高扩展性和高可用性

    1.3 NoSQL优点

    易于数据分散,数据间相对独立,没有关联

    提升性能和扩展,是水平扩展的解决方案

    速度较快,绝大多数数据存储在内存之中

    2. 关于Redis 

    2.1 Redis持久化数据的机制

    RDB:定期的 或 具备触发条件 或 手动执行的完整备份的方式

            优点:还原速度快

            缺点:较大的资源浪费(时间、空间)

    AOF:仅仅只保存修改的数据(数据结构被替换)- 增量备份

            根据企业自己需求确定开启哪一个(只做缓存都不开启也没事

    2.2 Redis主从同步的原理 

    从服务器向主服务器发送SYNC请求;

    主服务器执行BGSAVE命令,将当前内存里的所有数据拍照为快照文件,将快照文件发送给从服务器,在此期间所有有修改的命令会被记录下来;

    从服务器执行快照;

    从服务器执行快照,若主服务器有数据被修改,就发送缓存的命令,从服务器执行;

    (等同于先发送完整备份在发送增量备份)

    2.3 Redis及其优缺点 

     Redis是一个开源的,先进的key-value存储。它通常被称为数据结构服务器,因为键可以包含string(字符串)、hash(哈希)、list(链表)、set(集合)和zset(sorted-set--有序集合)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作。

    Redis和Memcached类似,它支持存储的value类型相对更多,与memcached一样,为了保证效率,数据都是缓存在内存中,区别是Redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

    优点

             保证数据的一致性和原子性

             数据更新的开销很小

             可以进行复杂处理

             存在较多成熟案例和模板信息

    缺点

             大量的数据写入

             表结构的变更

             查询速度

             集群化的难度

    3.  在Docker中运行Redis

    通过docker run指令可以直接启动一个redis-container容器:

    1. $ docker run --name redis-container -d redis
    2. 6f7d16f298e9c505f35ae28b61b4015877a5b0b75c60797fa4583429e4a14e24
    之后可以通过docker ps指令查看正在运行的redis-container容器的容器ID:
    1. $ docker ps
    2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    3. 6f7d16f298e9 redis "docker-entrypoint.sh" 32 seconds ago Up 31 seconds 6379/tcp redis-container

    同样可以通过env指令查看环境变量的配置:

    1. $ docker exec -it 6f7d16f298e9 bash
    2. root@6f7d16f298e9:/data# uptime
    3. 12:26:19 up 20 min, 0 users, load average: 0.00, 0.04, 0.10
    4. root@6f7d16f298e9:/data# free
    5. total used free shared buffers cached
    6. Mem: 1020096 699280 320816 126800 50184 527260
    7. -/+ buffers/cache: 121836 898260
    8. Swap: 1181112 0 1181112

    也可以通过ps指令查看当前容器运行的进程信息:

    1. root@6f7d16f298e9:/data# env
    2. HOSTNAME=6f7d16f298e9
    3. REDIS_DOWNLOAD_URL=http://download.redis.io/releases/redis-3.0.7.tar.gz
    4. PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    5. PWD=/data
    6. SHLVL=1
    7. HOME=/root
    8. REDIS_DOWNLOAD_SHA1=e56b4b7e033ae8dbf311f9191cf6fdf3ae974d1c
    9. REDIS_VERSION=3.0.7
    10. GOSU_VERSION=1.7 _=/usr/bin/env

    3.1 连接Redis容器 

    用户可以使用--link参数,连接创建的redis-container容器:

    1. root@6f7d16f298e9:/data# ps -ef
    2. UID PID PPID C STIME TTY TIME CMD
    3. redis 1 0 0 12:16 ? 00:00:02 redis-server *:6379
    4. root 30 0 0 12:51 ? 00:00:00 sh
    5. root 39 3 0 0 12:52 ? 00:00:00 ps -ef

    进入alpine系统容器后,可以使用ping指令测试redis容器:

    1. $ docker run -it --link redis-container:db alpine sh
    2. / # ls

    还可以使用nc指令(即NetCat)检测redis服务的可用性:

    1. / # ping db
    2. PING db (172.17.0.2): 56 data bytes
    3. 64 bytes from 172.17.0.2: seq=0 ttl=64 time=0.088 ms
    4. 64 bytes from 172.17.0.2: seq=1 ttl=64 time=0.103 ms
    5. --- db ping statistics ---
    6. 2 packets transmitted, 2 packets received, 0% packet loss
    7. round-trip min/avg/max = 0.088/0.095/0.103 ms

    官方镜像内也自带了redis客户端,可以使用以下指令直接使用:

    1. / # nc db 6379
    2. PING
    3. +PONG

    3.2 使用自定义配置

    可以通过数据卷实现自定义redis配置,如下所示:

    1. $ docker run -it --link redis-container:db --entrypoint redis-cli redis -h db
    2. db:6379> ping
    3. PONG
    4. db:6379> set 1 2
    5. OK
    6. db:6379> get 1
    7. "2"

      👑👑👑结束语👑👑👑

  • 相关阅读:
    python实现的TopologySort
    java 通过 冰蓝 word 转pdf ,最大程度包装pdf 样式和word接近
    七、Linux中一些符号的含义和宿主目录的介绍
    软考 -- 计算机学习(2)
    BP神经网络算法基本原理,bp神经网络算法详解
    值类型和引用类型的区别 I 数据结构中的堆和栈和内存中的堆和栈的区别
    1990-2021年全国各省城市化水平数据
    【Linux】守护进程
    【Git管理工具】使用Docker部署GitLab服务器
    【Java】栈和队列的模拟实现(包括循环队列)
  • 原文地址:https://blog.csdn.net/qq_62294245/article/details/126642871