4、Redis基础
redis性能
1、关于测试性能
官方自带的测试性能的工具
redis-benchmark 压力测试工具
#进行压力测试。需求:测试:100个并发连接,100000个请求
#redis-benchmark -h localhost -p 6379 -c 100 -n 1000000
redis-benchmark -h 127.0.0.1 -p 6379 -c 100 -n 100000
2、redis简单介绍
1、趣事:
关于6379端口的来历:来源意大利的广告女郎(Alessia Merz),有兴趣的可以去搜一下!
2、Redis默认有16个数据库:
默认16个数据库,类似数组下标从0开始,初始默认使用0号库
# Specify the syslog facility. Must be USER or between LOCAL0-LOCAL7.
# syslog-facility local0
# To disable the built in crash log, which will possibly produce cleaner core
# dumps when they are needed, uncomment the following:
#
# crash-log-enabled no
# To disable the fast memory check that's run as part of the crash log, which
# will possibly let redis terminate sooner, uncomment the following:
#
# crash-memcheck-enabled no
# Set the number of databases. The default database is DB 0, you can select
# a different one on a per-connection basis using SELECT <dbid> where
# dbid is a number between 0 and 'databases'-1
databases 16 #配置文件显示redis有16个数据库,默认从0开始
3、切换数据库
select <dbid>
<切换数据命令> 例如:select 8
127.0.0.1:6379> select 0 #切换到数据库0
OK
127.0.0.1:6379> select 8 #切换到数据库8
OK
127.0.0.1:6379[8]> dbsize #查看当前数据库的key的数量
(integer) 0
127.0.0.1:6379[8]>
3、flushdb清空当前库
127.0.0.1:6379[8]> select 0 #切换到0数据库
OK
127.0.0.1:6379> set name "123456" #存值
OK
127.0.0.1:6379> get name #获取当前值
"123456"
127.0.0.1:6379> select 8 #切换到8号数据库
OK
127.0.0.1:6379[8]> set k1 v1 #进行设置值
OK
127.0.0.1:6379[8]> get k1 #获取值
"v1"
127.0.0.1:6379[8]> flushdb #清空当前库
OK
127.0.0.1:6379[8]> get k1 #获取k1的值
(nil)
127.0.0.1:6379[8]> select 0 #切换到0号数据库
OK
127.0.0.1:6379> get name #获取name,在0数据库存在
"123456"
127.0.0.1:6379>
4、flushall清空全部库
127.0.0.1:6379> select 0 #切换到0号数据库
OK
127.0.0.1:6379> keys * #查看数据库的数据
(empty array)
127.0.0.1:6379> set k1 v1 #存值
OK
127.0.0.1:6379> get k1 #根据key获取值
"v1"
127.0.0.1:6379> select 8 #切换8数据库
OK
127.0.0.1:6379[8]> keys *
(empty array)
127.0.0.1:6379[8]> set k2 v2
OK
127.0.0.1:6379[8]> get k2
"v2"
127.0.0.1:6379[8]> keys *
1) "k2"
127.0.0.1:6379[8]> flushall #清空所有的数据库
OK
127.0.0.1:6379[8]> select 0
OK
127.0.0.1:6379> keys *
(empty array)
127.0.0.1:6379> select 8
OK
127.0.0.1:6379[8]> keys *
(empty array)
127.0.0.1:6379[8]>
5、Redis是单线程
Redis采用的是基于内存的采用的是单进程单线程模型的 KV 数据库,由C语言编写,官方提供的数据是可以达到100000+的QPS(每秒内查询次数)。这个数据不比采用单进程多线程的同样基于内存的 KV 数据库 Memcached 差。
横轴是连接数,纵轴是QPS。此时,这张图反映了一个数量级,希望大家在面试的时候可以正确的描述出来,不要问你的时候,你回答的数量级相差甚远!
6、Redis为什么这么快?
1.完全基于内存,绝大部分请求是纯粹的内存操作,非常快速。数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1);
2、数据结构简单,对数据操作也简单,Redis中的数据结构是专门进行设计的;
3、采用单线程,避免了不必要的上下文切换和竞争条件,也不存在多进程或者多线程导致的切换而消耗 CPU,不用去考虑各种锁的问题,不存在加锁释放锁操作,没有因为可能出现死锁而导致的性能消耗;
4、使用多路I/O复用模型,非阻塞IO;
5、使用底层模型不同,它们之间底层实现方式以及与客户端之间通信的应用协议不一样,Redis直接自己构建了VM 机制 ,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求;
6、Redis基本概念
1.Redis是一个开源的内存中的数据结构存储系统,它可以用作:数据库、缓存和消息中间件。
2.数据库的工作模式按存储方式可分为:硬盘数据库和内存数据库。Redis 将数据储存在内存里面,读写数据的时候都不会受到硬盘 I/O 速度的限制,所以速度极快。