首页 > 数据库 >1. redis 及NIO原理介绍

1. redis 及NIO原理介绍

时间:2022-11-25 15:44:42浏览次数:37  
标签:NIO 数据库 redis cd 索引 磁盘 原理 数据

要了解redis之前,要先知道一些常识:

基础知识

  • 磁盘:数据保存在磁盘的
    • 寻址:ms
    • 带宽:G/M
  • 内存:
    • 寻址:ns2 纳秒级别
    • 带宽:很大

结论:秒>毫秒>微秒>纳秒  所以磁盘比内存在寻址上慢了10W倍

I/O buffer:有个成本问题:
磁盘与磁道,扇区:一扇区 512Byte,带来一个成本变大:索引
所以磁盘都格式化为4K大小,操作系统,无论你读多少,都是最少4k从磁盘拿

随着文件变大,速度变慢,硬盘i/o成为瓶颈,所以有了数据库的出现
数据库把4k大小的页给通过索引串联了起来,因为不管一次io读多少数据(就算读1k数据),硬盘还是分成4k小的,所以数据库这个软件等于给每个4k大小的页分了一个关联id,就可以在查的时候直接把数据拿出来。
如果只是把每个数据都给一个关联id,当查找数据的时候等于还是全量索引查找,所以通过一个数据的标识唯一性熟悉来关联起来,比如通过身份证号关联到一个用户的数据。
image
当我们建表的时候,关系型数据库建表:必须给出schema,每个列的类型:字节宽度。存的时候:倾向于行级存储
数据和索引都是存在磁盘当中的,所以在内存中准备个b+树,如果用户想查的时候,通过b+树找到索引id,比如身份证号,把身份证号读取到磁盘里,通过身份证号就知道找的是那条数据,然后查找到数据。

比如一个面试题,数据库表很大,性能会下降?如果表有索引,增删改变慢,查询速度呢?

  • 1个或少量查询依然很快,因为有b+树索引,可以快速查找到数据
  • 并发大的时候会受硬盘带宽影响速度,因为查的数据多,数据都通过磁盘io读取

数据在磁盘中速度很慢,在内存中快,可以内存型数据快太贵,买不起(比如HANA数据库),所以有了折中方案,缓存的概念。(比如memcached、redis)

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)。
image

使用redis有什么好处
image
比如memcached 数据库,它也是key-value 类型数据库,也是基于缓存的,为什么后来会被redis取代地位?
memcached 的value没有类型的概念,也就说什么都可以存,使用json就可以存所有复杂的类型。
redis的value有类型概念,客户端调用对应的api,redis服务端返回想要的数据就行。
所以有个大数据方面的一个概念计算向数据移动,使用memcached时候,返回了所有数据,在客户端通过代码解析出想要的数据,redis直接返回的就是想要的数据结果。

redis安装

yum install wget

cd ~
mkdir soft
cd soft
# 也可以上传压缩包
wget    http://download.redis.io/releases/redis-5.0.5.tar.gz
tar xf    redis...tar.gz

cd redis-src源码目录,看README.md

make  
# 执行make要先执行这两步
make distclean
yum install  gcc  

make

# 生成了可执行程序
cd src   
cd ..
make install PREFIX=/opt/mashibing/redis5

vi /etc/profile
# 内容如下
export  REDIS_HOME=/opt/mashibing/redis5
export PATH=$PATH:$REDIS_HOME/bin

# 让文件生效
source /etc/profile

cd utils
# (可以执行一次或多次)
./install_server.sh  
# 执行时候脚本自己实现过程
a)  一个物理机中可以有多个redis实例(进程),通过port区分    
b)  可执行程序就一份在目录,但是内存中未来的多个实例需要各自的配置文件,持久化目录等资源  
c)  service   redis_6379  start/stop/stauts     >   linux   /etc/init.d/****     
d)脚本还会帮你启动!

ps -fe |  grep redis  

1

标签:NIO,数据库,redis,cd,索引,磁盘,原理,数据
From: https://www.cnblogs.com/abiu/p/16142337.html

相关文章

  • Memcache,Redis,MongoDB(数据缓存系统)方案对比与分析
    摘要:一、问题:      数据库表数据量极大(千万条),要求让服务器更加快速地响应用户的需求。 二、解决方案:   1.通过高速服务器Cache......
  • elasticsearch中分析器的原理和使用
    概念分析(analysis)机制用于进行全文文本(FullText)的分词,以建立供搜索用的反向索引。 原理分析器的工作过程大概分成两步:分词(Tokenization):根据停止词把文本分割成很多的......
  • elasticsearch中的基本概念和原理
    基本概念和原理ES其实就是基于lucene之上封装的一个分布式索引框架,所以lucene拥有的特性,它都是有的,同时因为它是基于分布式的,所以对很多的功能进行了扩展,要想掌握ES,......
  • OpenFlow协议原理及基本配置-网络测试仪实操
    一、OpenFlow协议原理1.OpenFlow技术背景●转发和控制分离是SDN网络的本质特点之一。在SDN网络架构中,控制平面与转发平面分离,网络的管理和状态在逻辑上集中到一起,底层的网络......
  • OpenFlow协议原理及基本配置-网络测试仪实操
    ​ 一、OpenFlow协议原理1.OpenFlow技术背景●转发和控制分离是SDN网络的本质特点之一。在SDN网络架构中,控制平面与转发平面分离,网络的管理和状态在逻辑上集中到一起,底......
  • docker,redis速拉
    记录docker快速拉取redis1.搜索dockersearchredis2.拉取dockerpullredis3.路径mkdir-p/home/redis/myredis/datacd/home/redis/myredis/4.配置vimmyredi......
  • Redis的那些最常见面试问题
    1.什么是redis?Redis是一个基于内存的高性能key-value数据库。  2.Reids的特点Redis本质上是一个Key-Value类型的内存数据库,很像memcached,整个数据库统统加载在内存......
  • 解析负载均衡原理
    不能狭义地理解为分配给所有实际服务器一样多的工作量,因为多台服务器的承载能力各不相同,这可能体现在硬件配置、网络带宽的差异,也可能因为某台服务器身兼多职,我们所说的“均......
  • Mysql主从同步的实现原理与配置
    1、什么是mysql主从同步?当master(主)库的数据发生变化的时候,变化会实时的同步到slave(从)库。 2、主从同步有什么好处?水平扩展数据库的负载能力。容错,高可用。Failover(失......
  • 令牌桶限流思路分享(PHP+Redis实现机制)
    一、场景描述 在开发接口服务器的过程中,为了防止客户端对于接口的滥用,保护服务器的资源,通常来说我们会对于服务器上的各种接口进行调用次数的限制。比如对于某个用户,他......