Redis入门
一、概述
Redis(Remote Dictionary Server),即远程字典服务!
是一个开源的使用ANSI C语言 编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并且提供了多种语言的API。
redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
免费和开源!是当下最热门的NoSQL技术之一!也被人们称之为结构化数据库!
1、Redis能干嘛?
① 内存存储、持久化、内存中是断电即失、所以说持久化很重要(rdb、aof)
② 效率高,可用于高速缓存
③ 发布订阅系统
④ 地图信息分析
⑤ 计时器、计数器(浏览量)
2、特性
① 多样的数据类型
② 持久化
③ 集群
④ 事务
二、安装
三、测试性能
redis-benchmark 官方自带性能测试工具
redis 性能测试工具可选参数:
序号 | 选项 | 描述 | 默认值 |
---|---|---|---|
1 | -h | 指定服务器主机名 | 127.0.0.1 |
2 | -p | 指定服务器端口 | 6379 |
3 | -s | 指定服务器 socket | |
4 | -c | 指定并发连接数 | 50 |
5 | -n | 指定请求数 | 10000 |
6 | -d | 以字节的形式指定 SET/GET 值的数据大小 | 2 |
7 | -k | 1=keep alive 0=reconnect | 1 |
8 | -r | SET/GET/INCR 使用随机 key, SADD 使用随机值 | |
9 | -P | 通过管道传输 <numreq> 请求 | 1 |
10 | -q | 强制退出 redis。仅显示 query/sec 值 | |
11 | --csv | 以 CSV 格式输出 | |
12 | -l | 生成循环,永久执行测试 | |
13 | -t | 仅运行以逗号分隔的测试命令列表。 | |
14 | -I | Idle 模式。仅打开 N 个 idle 连接并等待。 |
测试:100个并发连接 100000个请求
分析测试:
四、基础知识
Redis默认提供了16个数据库(database),每个数据库有一个id,从0到15,他们没有名字,只有id。
默认使用第0个
● 切换数据库:不同的数据库可以存储不同的值
127.0.0.1:6379> SELECT 7 # 切换数据库 OK 127.0.0.1:6379[7]> DBSIZE # 查看数据库大小 (integer) 0
● 查看数据库中的内容:
127.0.0.1:6379[3]> KEYS * # 查看当前数据库中所有的key 1) "name"
● 清除当前数据库中的内容:FLUSHDB
127.0.0.1:6379[3]> FLUSHDB OK 127.0.0.1:6379[3]> 127.0.0.1:6379[3]> KEYS * (empty list or set)
● 清除所有数据库的内容:FLUSHALL
● Redis 是单线程的!
我们首先要明白,Redis 很快!官方 FAQ 表示,因为 Redis 是基于内存的操作,CPU 不是 Redis 的瓶颈,Redis 的瓶颈最有可能是机器内存的大小或者网络带宽。既然单线程容易实现,而且 CPU 不会成为瓶颈,那就顺理成章地采用单线程的方案了(毕竟采用多线程会有很多麻烦!)。
Redis 是 C 语言斜的,官方提供的数据为 100000+ 的 QPS,完全不比同样适用 Key-Value 的 Memecache 差!
Redis 为什么单线程还这么快?
误区1:高性能的服务器一定是多线程的吗?
误区2:多线程(CPU上下文会切换!)一定比单线程效率高!
数据读写速度比较:CPU -> 内存 -> 硬盘
核心:redis 是将所有的数据全部放在内存中,所以说使用单线程去操作效率就是最高的,多线程(CPU上下文会切换:耗时的操作),对于内存系统来说,如果没有上下文切换效率就是最高的!多次读写都在一个CPU上,在内存情况下,这个就是最佳方案!