Redis入门
概述
redis是什么
Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言]编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。当下最热门的NoSQL技术之一,也被人们称之为结构化数据库。
redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
Redis能做什么
- 内存存储、持久化。内存是断电即失,所以说持久化很重要(RDB,AOF)
- 效率高,可以用于高速缓存
- 发布订阅系统
- 地图信息分析
- 计时器、计数器(浏览量)
- ......
特性
- 多样的数据类型
- 持久化
- 集群
- 事务
- ......
学习中需要用到的东西
-
狂神的公众号:狂神说
-
redis官网:https://redis.io
-
下载
注意:Windows在GitHub上下载(停更很久了),不建议在Windows上使用。
-
在Linux上安装
yum -y install centos-release-scl
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
#scl命令启用只是临时的,退出shell或重启就会恢复原系统gcc版本。
scl enable devtoolset-9 bash
make install PREFIX=/usr/local/redis
vim redis.conf
mkdir pid logs
mkdir -p /data/redis
make install PREFIX=/usr/local/redis
vim /etc/profile
export REDIS=/usr/local/redis
export PATH=:$PATH:$REDIS/bin
source /etc/profile
- 启动......
- 退出......
简单测试性能
# 测试:100个并发 100000个请求
80.32% <= 1 milliseconds
95.21% <= 2 milliseconds
99.40% <= 3 milliseconds
99.89% <= 4 milliseconds
100.00% <= 4 milliseconds
105152.48 requests per second
-
查看redis相关属性
redis有16个数据库,默认使用第0个,可以用select来切换。
-
基本命令
# 生产环境不要用,查看所有的key keys * # set key value set name xxx # get key get name # 选择数据库 select index # 清空所有数据库 flushall # 清单当前数据库 flushdb
性能分析
redis在6版本以前是单线程,在6版本的时候,是多线程了。
redis是基于内存操作,CPU不是redis的性能瓶颈,redis的性能瓶颈是根据机器的内存和网络带宽来决定的。
为什么单线程还这么快?
redis是C语言写的,官方提供的数据是10w+的QPS。
误区:
- 高性能的服务器一定是多线程的?
- 多线程(CPU会上下文切换,耗时的操作)一定比单线程效率高?
核心:redis是将所有的数据全部放在内存中,所以说单线程效率就是最高的。IO多路复用。多线程,对于内存系统来说,如果没有上下文切换,效率就是最高的,多次读写都是在一个CPU上的,在内存情况下,这个就是最佳的方案。
I/O多路复用
I/O 多路复用模型
I/O 多路复用模型是利用 select、poll、epoll 可以同时监察多个流的 I/O 事件的能力,在空闲的时候,会把当前线程阻塞掉,当有一个或多个流有 I/O 事件时,就从阻塞态中唤醒,于是程序就会轮询一遍所有的流(epoll 是只轮询那些真正发出了事件的流),并且只依次顺序的处理就绪的流,这种做法就避免了大量的无用操作。
这里“多路”指的是多个网络连接,“复用”指的是复用同一个线程。采用 I/O 多路复用技术可以让单个线程高效的处理多个连接请求(尽量减少网络 IO 的时间消耗),且 Redis 在内存中操作数据的速度非常快,也就是说内存内的操作不会成为影响Redis性能的瓶颈,主要由以上几点造就了 Redis 具有很高的吞吐量。