redis再战之基础常识和安装《一》

本文详细介绍了Redis的安装过程及如何在CentOS7.x环境下搭建Redis5.x版本,探讨了Redis作为高性能内存数据库的优势,包括其数据结构支持、内存管理和磁盘持久化策略。同时,文章还分析了在高并发场景下,如何通过合理利用内存缓存和磁盘存储能力,提高数据库查询速度,减少I/O流量。

文章目录

常识

在计算机当中,数据是在磁盘中还是内存中,涉及到两方面。

  • 数据在磁盘:
  1. 寻址:查找数据的地址时间,它是毫秒级别的。
  2. 带宽:单位时间有多少个字节流过去。一般是G或者M的级别。
  • 数据在内存:
  1. 寻址:纳秒级别的。‘’
  2. 带宽:远远超过磁盘,好像是每秒几十个G

I/O buffer :
磁盘有磁道和扇区,一个扇区是512byte,如果我们访问一个硬盘都是以最小力度一个扇区512byte来查找数据,同样引发一个问题,如果一个区域足够小,那么索引就会变大(表示很大一个数的区间,可能就不是四个字节,甚至可能需要8个字节或者16个字节才能索引住这么多的512byte),所以在我们格式化磁盘的时候,就会有一个4K对齐,也就是真正使用硬件的时候,并不是以512byte来做一次读写量,就是说读取数据量哪怕是1byte,硬盘也会返回4K,这样索引就会变小。

关系型数据库建表:

  • 必须给出schema
  • 类型:建表宽度

存:倾向于行级存储,内存维护一个b+树,
磁盘:存储数据和索引
在这里插入图片描述

总结:
数据库合理的利用了各自内存寻址快和磁盘存储的能力,并且在磁盘是分而治之的存储,所以获取数据的速度及其快,最终目的是减少IO的流量,不让磁盘发生大量的IO。

问题:如果数据库的表很大,性能会降低吗?

  1. 如果表有索引,增删改变慢。
    因为修改表都需要找索引页,总是需要调整索引的位置(维护索引)。
  2. 有索引查询的话一个或少量的查询,依然会很快。
    查询会先走B+Tree找到数据所在区间,根据所在区间找到对应索引映射的数据。(局部I/O)。
  3. 并发大的时候会受硬盘带宽影响速度。如果是并发状态下,大量的请求进入数据库来请求数据,一个人4K,10个人,100个人?数据吞吐就会增大,会影响查询的速度。

折中做法

将内存中的一部分数据做缓存
关于缓存的技术有很多,比如memcached、Redis …
在这里插入图片描述
memcached
key value结构,value没有类型的概念

对比总结:
计算向数据移动获得优势
1、Memcached:如果很多人都这么获取的话,网卡IO就会成为最大的瓶颈,Client端要有你实现的代码去解码计算。
2、Redis:因为有类型,但是类型有不是太重要的,重要的是Redis服务器对每种类型都有自己的方法index(),lpop(),Client端的代码也会比较轻盈。

redis(秒级十万操作)
同为key value结构,value有类型,string(字符,数值,bitmaps),hashes,lists,sets,sorted sets

reidis安装

redis官网介绍:
Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。
.
它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。
.
Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)。

安装步骤

  • 安装环境
    操作系统:CentOS 7.x
    Redis版本:Redis5.x
    下载地址:http://download.redis.io/releases/redis-5.0.5.tar.gz

make:在linux中属于编译命令,跟随文件makefile,但是这个命令需要config执行之后才会生成

[root@z8524210 /]# mkdir soft						//建立一个soft目录,用来安装Redis
[root@z8524210 /]# cd soft/							//进入到目录并且下载Redis,这里我已经下载好了
[root@z8524210 soft]# tar xf redis-5.0.4.tar.gz 	//解压
[root@z8524210 redis-5.0.4]# yum install gcc		//安装C语言编译器
[root@z8524210 redis-5.0.4]# make					//执行make
[root@z8524210 redis-5.0.4]# make install PREFIX=/opt/zxj/redis5	//迁移出执行文件到指定目录
[root@z8524210 bin]# vi /etc/profile							//配置环境变量
[root@z8524210 bin]# source /etc/profile						//重新加载配置文件
[root@z8524210 bin]# cd /soft/redis-5.0.4/utils/				//进入到/soft/redis-5.0.4/utils/	目录
[root@z8524210 utils]# ./install_server.sh 						//执行这个脚本,生成服务
[root@z8524210 init.d]# ps -fd | grep redis						//查看启动的redis进程
[root@z8524210 utils]# service redis_6379 stop					//停止服务
[root@z8524210 utils]# service redis_6379 start					//开启服务
[root@z8524210 utils]# service redis_6379 status				//查看服务状态
<think>好的,我现在需要帮用户介绍非关系型数据Redis。首先,我得确保自己正确理解这两个概念,然后组织信息,用清晰易懂的方式表达出来。 用户可能对数据库不太熟悉,所以要从基础讲起。先解释什么是非关系型数据,对比传统的关系型数据库,说明其特点优势。然后引入Redis,作为非关系型数据库个典型例子,介绍它的主要特性、使用场景以及为什么它适合这些场景。 需要注意用户可能的需求:他们可能在选择数据库时遇到困惑,或者需要优化现有系统性能。因此,我应该强调非关系型数据库的优势,比如高扩展性、灵活的数据模型,以及Redis的高性能丰富的数据结构。 还要检查技术细节是否正确,比如Redis支持的数据类型、持久化机制、集群模式等。避免使用过于专业的术语,或者如果用了,要适当解释。例如,提到内存存储时,可以指出这带来了速访问,但可能需要考虑内存成本。 结构方面,先分点介绍非关系型数据,再专门讲解Redis,最后总结两者的关系。确保每个部分有清晰的标题,使用例子帮助理解,比如用键值存储的例子说明数据结构的不同。 另外,用户可能想知道何时选择Redis,所以需要给出典型的应用场景,如缓存、会话存储、实时排行榜等,并解释为什么Redis适合这些情况,比如它的高速读写数据结构支持。 最后,检查是否有遗漏的重要点,比如Redis的持久化选项(RDBAOF),或者与其他非关系型数据库的比较(如MongoDB、Cassandra),但根据用户的问题,可能不需要深入比较,点到为止即可。 确保语言口语化,避免生硬,让用户容易理解。同时,按照系统指令正确使用LaTeX格式,数学表达式公式用$包裹,独立公式用$$,但在这个回答中可能用到的LaTeX不多,主要是在提到数据结构或示例时可能需要,比如集合操作或哈希结构。 总结思考步骤后,组织成两个主要部分,每个部分下分点说明,结合示例应用场景,让用户全面了解非关系型数据Redis的特点及用途。</think>好的,我将从基础概念到实际应用为您梳理非关系型数据Redis的核心知识点: 🌐 **、非关系型数据(NoSQL)** 1️⃣ **定义** 非关系型数据采用非表格形式存储数据,打破传统关系型数据库的行列结构,适用于海量数据、高并发场景。其特点可概括为: - ✅ **无固定模式**:无需预定义表结构(如$User\{id,name,age\}$) - ✅ **分布式架构**:天然支持横向扩展(如Cassandra的环状节点布局) - ✅ **高性能读写**:牺牲部分ACID特性换取速度(如MongoDB每秒数万次操作) 2️⃣ **常见类型** | 类型 | 数据结构 | 典型应用 | 案例 | |------|----------|----------|------| | 键值存储 | $Key \rightarrow Value$ | 缓存系统 | Redis, DynamoDB | | 文档存储 | JSON/XML树形结构 | 内容管理 | MongoDB, CouchDB | | 列族存储 | 动态列+行键 | 日志分析 | HBase, Cassandra | | 图形数据库 | 节点+关系边 | 社交网络 | Neo4j, ArangoDB | 3️⃣ **适用场景** - 实时推荐系统(如用户点击流分析) - IoT设备高频数据采集(如每秒百万级传感器数据) - 社交网络关系图谱(好友推荐路径计算) 🔴 **二、Redis深度解析** 1️⃣ **核心特性** ```python # Redis典型操作示例(Python伪代码) redis.set("user:1001", json.dumps({"name":"Alice","points":2500})) redis.zadd("leaderboard", {"Alice": 2500, "Bob": 1800}) redis.incrby("total_visits", 100) # 原子计数器 ``` 2️⃣ **八大数据结构** - **String**:支持位操作(BITCOUNT)、过期时间(EXPIRE) - **List**:实现消息队列(LPUSH+BRPOP) - **Hash**:存储对象属性(HSET user:1001 age 28) - **Set**:求交集(SINTER)用于共同好友 - **Sorted Set**:带权重的排行榜(ZRANGEBYSCORE) - **Bitmap**:日活统计(SETBIT 20230801 1001 1) - **HyperLogLog**:UV统计(PFADD/PFCOUNT) - **Stream**:消息持久化(类似Kafka的消费组) 3️⃣ **持久化策略对比** | 机制 | 触发方式 | 恢复速度 | 数据安全性 | 性能影响 | |------|----------|----------|------------|----------| | RDB | 定时照 | | 可能丢失分钟级数据 | 低 | | AOF | 日志追加 | 慢 | 秒级数据安全 | 较高 | | 混合模式 | RDB+AOF | 中等 | 最佳保护 | 可调节 | 4️⃣ **集群方案演进** - 主从复制(Master-Slave):读写分离但单点故障 - Sentinel哨兵:自动故障转移(需要3节点以上) - Cluster模式:16384个哈希槽分片(官方推荐方案) 5️⃣ **典型应用场景** - 🚀 **缓存雪崩防护**:采用随机过期时间+永不过期热数据 - 💡 **分布式锁**:RedLock算法实现(SETNX+Lua脚本) - 🎮 **游戏场景**:使用Sorted Set实现实时战斗排行榜 - 📊 **实时统计**:HyperLogLog统计UV误差率仅0.81% - 🔄 **消息总线**:Stream支持多消费者组消息回溯 6️⃣ **性能优化技巧** - Pipeline批量操作减少RTT(提升5-10倍吞吐) - Lua脚本实现原子操作(如库存扣减) - 合理选择数据结构(如用Hash代替多个String) - 控制大Key(超过10KB需拆分) 📈 **三、选型建议** 当您的业务出现以下特征时,Redis是理想选择: - 需要亚毫秒级响应(<1ms 延迟) - 数据结构复杂但需要原子操作 - 流量存在明显波峰(如电商大促) - 需要实现发布订阅模式 最新趋势显示,Redis正与AI结合(如RedisVL向量搜索),在推荐系统语义搜索领域展现新价值。建议通过`redis-benchmark`进行压力测试,结合业务场景选择合适的数据持久化策略集群方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值