1. redis 及NIO原理介绍

要了解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  
posted @ 2022-11-25 15:40  aBiu--  阅读(142)  评论(0编辑  收藏  举报