系列文章目录
Redis01 基础及安装
Redis02-架构及简单使用
Redis03-数据类型:应用及实操
Redis04-进阶使用(管道、发布/订阅)
Redis05-进阶使用(事务)
Redis06-进阶使用(过期 expire)
Redis07-RDB和AOF
redis-01 基础及安装
1、背景:为什么需要缓存
小常识1:
磁盘:寻址 ms级,带宽GB / M
内存:寻址 ns级,带宽很大(比磁盘大几个数量级)
磁盘比内存在寻址上慢了10W倍,I/O成为瓶颈
小常识2:
磁盘有磁道和扇区。一扇区512Byte,如果根据一个扇区寻找数据,需要的索引成本会很大
实际上操作系统每次读取最少 4k
问题
1、数据存在磁盘,当磁盘数据变大,I/O成为瓶颈,性能下降,速度变慢。
在查找数据库时,还存在一个问题,那就是字节宽度,在我们建库的时候必须给出schema,在存储时倾向于行级存储,好处:更新时不需要移动数据;坏处:如果列为空,依旧占据存储空间
2、数据存在内存,内存级别的关系型数据库太贵。(SAP公司的HANA数据库,硬件需求大,内存约2T,软硬件服务套餐总价约2亿。)
3、高并发,如果只是数据量变大,单数据的查找依然很快(因为有索引),但是多数据查询时会受很大影响。
折中:缓存
缓存,将一部分数据存在内存中
https://db-engines.com/en/
常见缓存:
- memcached :k-v 结构,value没有类型的概念
- redis(秒级十万操作):k-v 结构,value有类型(5种)
2、为什么用Redis
redis官网 https://redis.io/ , http://redis.cn/
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)。
redis的优势
redis中的value有类型的概念,memcached没有
客户端如果要取数据,
- memcached 要返回value所有的数据,且需要自己实现解码
- redis 对每种类型都有自己的方法,不需要取全量数据
类型不是关键的,关键的是每种类型都有方法,即做到了“计算向数据移动”
3、redis安装
linux常识:
make:在linux中属于编译命令,跟随文件makefile,但是这个命令需要config执行之后才会生成
yum install wget
cd ~
mkdir soft
cd soft
## =============下载redis ====================
wget http://download.redis.io/releases/redis-5.0.5.tar.gz
tar xf redis-5.0.5.tar.gz
## cd 到redis的src目录下
## 看README.md
##==============编译========================
make
## 没有装c编译器 yum install gcc
make distclean # 需要把之前的make的残留文件清除
make
cd src #生成了可执行程序
cd ..
##==============安装=======================
make install PREFIX=/opt/redis5
vi /etc/profile
#在最后追加
export REDIS_HOME=/opt/redis5
export PATH=$PATH:$REDIS_HOME/bin
source /etc/profile #重新加载配置
##==============脚本启动======================
cd utils
./install_server.sh #可以执行一次或多次,按脚本填写配置,自动生成脚本文件在/etc/redis/6379
# a) 一个物理机中可以有多个redis实例(进程),通过port区分
# b) 可执行程序就一份在目录,但是内存中未来的多个实例需要各自的配置文件,持久化目录等资源
# c) service redis_6379 start/stop/stauts > linux /etc/init.d/****
# d) 脚本还会帮你启动!
ps -fe | grep redis
##===========以后启动redis===============
service redis_6379 start
可以参考CentOS7 安装Redis