【云原生 | 26】Docker运行数据库实战之Redis

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: Redis是一个开源(BSD许可)的基于内存的数据结构存储系统,可以用作数据库、缓存和消息中间件。Redis使用ANSI C实现,2013年起由Pivotal公司资助。Redis的全称意为REmote DIctionary Server。

 作者简介:🏅云计算领域优质创作者🏅新星计划第三季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

image.gif

2.1 Redis持久化数据的机制

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

        优点:还原速度快

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

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

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

2.2 Redis主从同步的原理

image.gif

从服务器向主服务器发送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容器:

$ docker run --name redis-container -d redis 
6f7d16f298e9c505f35ae28b61b4015877a5b0b75c60797fa4583429e4a14e24

image.gif

之后可以通过docker ps指令查看正在运行的redis-container容器的容器ID:

$ docker ps 
CONTAINER ID     IMAGE     COMMAND     CREATED     STATUS     PORTS     NAMES 
6f7d16f298e9     redis     "docker-entrypoint.sh" 32 seconds ago Up 31 seconds 6379/tcp redis-container

image.gif

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

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

image.gif

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

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

image.gif

3.1 连接Redis容器

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

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

image.gif

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

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

image.gif

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

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

image.gif

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

/ # nc db 6379 
PING 
+PONG

image.gif

3.2 使用自定义配置

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

$ docker run -it --link redis-container:db --entrypoint redis-cli redis -h db 
db:6379> ping 
PONG 
db:6379> set 1 2 
OK
db:6379> get 1 
"2"

image.gif

 👑👑👑结束语👑👑👑

image.gif

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
打赏
0
1
0
0
116
分享
相关文章
分布式爬虫框架Scrapy-Redis实战指南
本文介绍如何使用Scrapy-Redis构建分布式爬虫系统,采集携程平台上热门城市的酒店价格与评价信息。通过代理IP、Cookie和User-Agent设置规避反爬策略,实现高效数据抓取。结合价格动态趋势分析,助力酒店业优化市场策略、提升服务质量。技术架构涵盖Scrapy-Redis核心调度、代理中间件及数据解析存储,提供完整的技术路线图与代码示例。
410 0
分布式爬虫框架Scrapy-Redis实战指南
Redis 逻辑数据库与集群模式详解
Redis 是高性能内存键值数据库,广泛用于缓存与实时数据处理。本文深入解析 Redis 逻辑数据库与集群模式:逻辑数据库提供16个独立存储空间,适合小规模隔离;集群模式通过分布式架构支持高并发和大数据量,但仅支持 database 0。文章对比两者特性,讲解配置与实践注意事项,并探讨持久化及性能优化策略,助你根据需求选择最佳方案。
138 5
Redis 实操要点:Java 最新技术栈的实战解析
本文介绍了基于Spring Boot 3、Redis 7和Lettuce客户端的Redis高级应用实践。内容包括:1)现代Java项目集成Redis的配置方法;2)使用Redisson实现分布式可重入锁与公平锁;3)缓存模式解决方案,包括布隆过滤器防穿透和随机过期时间防雪崩;4)Redis数据结构的高级应用,如HyperLogLog统计UV和GeoHash处理地理位置。文章提供了详细的代码示例,涵盖Redis在分布式系统中的核心应用场景,特别适合需要处理高并发、分布式锁等问题的开发场景。
147 38
高并发秒杀系统实战(Redis+Lua分布式锁防超卖与库存扣减优化)
秒杀系统面临瞬时高并发、资源竞争和数据一致性挑战。传统方案如数据库锁或应用层锁存在性能瓶颈或分布式问题,而基于Redis的分布式锁与Lua脚本原子操作成为高效解决方案。通过Redis的`SETNX`实现分布式锁,结合Lua脚本完成库存扣减,确保操作原子性并大幅提升性能(QPS从120提升至8,200)。此外,分段库存策略、多级限流及服务降级机制进一步优化系统稳定性。最佳实践包括分层防控、黄金扣减法则与容灾设计,强调根据业务特性灵活组合技术手段以应对高并发场景。
427 7
|
4月前
|
基于SpringBoot的Redis开发实战教程
Redis在Spring Boot中的应用非常广泛,其高性能和灵活性使其成为构建高效分布式系统的理想选择。通过深入理解本文的内容,您可以更好地利用Redis的特性,为应用程序提供高效的缓存和消息处理能力。
272 79
Docker——阿里云服务器利用docker搭建redis集群
本文详细记录了使用Docker搭建Redis集群的过程,包括检查Docker和Docker Compose的安装、创建Redis配置文件、编写`docker-compose.yml`文件、启动Redis节点、创建Redis集群的具体步骤,以及最终的验证方法。文章还提供了在多服务器环境下搭建Redis集群的注意事项,帮助读者全面了解 Redis 集群的部署流程。
513 70
【赵渝强老师】在Docker中运行达梦数据库
本文介绍了在Docker容器中部署达梦数据库(DM 8)的具体步骤,包括创建文件夹、下载安装包、导入镜像、启动容器、登录数据库及查看状态等操作。同时,通过视频讲解辅助理解。文中还分析了将数据库服务容器化的潜在问题,如数据安全性、硬件资源争用、网络带宽占用和额外隔离带来的挑战,指出数据库服务在生产环境中可能不适合容器化的原因。
208 4
【赵渝强老师】在Docker中运行达梦数据库
Docker平台上的Redis镜像运行
这就是如何在Docker平台上运行Redis镜像的全部过程。走进Docker和Redis的世界,探索更多可能!
287 10
缓存与数据库的一致性方案,Redis与Mysql一致性方案,大厂P8的终极方案(图解+秒懂+史上最全)
缓存与数据库的一致性方案,Redis与Mysql一致性方案,大厂P8的终极方案(图解+秒懂+史上最全)
数据库运维:mysql 数据库迁移方法-mysqldump
本文介绍了MySQL数据库迁移的方法与技巧,重点探讨了数据量大小对迁移方式的影响。对于10GB以下的小型数据库,推荐使用mysqldump进行逻辑导出和source导入;10GB以上可考虑mydumper与myloader工具;100GB以上则建议物理迁移。文中还提供了统计数据库及表空间大小的SQL语句,并讲解了如何使用mysqldump导出存储过程、函数和数据结构。通过结合实际应用场景选择合适的工具与方法,可实现高效的数据迁移。
242 1
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问