Redis入门
概述
Redis是什么?
Redis(Remote Dictionary Server),即远程字段服务!
是一个使用 C语言 编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
redis会周期性的吧更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步!
免费和开源!是当下最热门的 NoSQL技术之一!也被人们称为结构化数据库!
Redis能干嘛?
1、内存存储、持久化,内存中的数据是断电及失、所以说持久化很重要(Redis持久化两种机制:aop,rdb)
2、效率高,可以用于高速缓存
3、发布订阅系统
4、地图订阅系统
5、计时器、计数器(浏览量!)
。。。。。。
特性
1、多样的数据类型
2、持久化
3、集群
4、事务
。。。。。。。
学习中需要用到的东西
1、官网:https://redis.io/
2、中文网:http://www.redis.cn/
3、下载地址:通过官网下载即可!
Redis推荐都是在Linux服务器上搭建的,我们是基于Linux学习! .
Windows下安装
1、下载安装包:https://github.com/ServiceStack/redis-windows/tree/master/downloads
2、下载完毕得到压缩包:
3、解压到自己电脑上的环境目录下的就可以的!Redis 十分的小,只有5M,主要文件:
4、开启Redis,双击运行服务即可!
5、使用redis客户端来连接redis
记住一句话,Window下使用确实简单,但是Redis 推荐我们使用Linux去开发使用!
Linux下安装
1、下载安装包!redis-5.0.8.tar.gz
,并上传到服务器
4、基本的环境安装
yum install gcc-c++ # 因为redis是C++编写的,所以必须要有c++环境 make make install
5、redis的默认安装路径:/usr/local/bin
,就像是在windows上安装了java环境,默认是存放在C:/xxx 下的
6、我们现在复制一份 redis 的配置文件,以后就用复制的文件进行开发,是为了坏了可以还原
7、redis默认不是在后台启动的,所以修改配置文件!
10、查看 redis 的进程是否开启!
注意使用:ctrl + c
或者其他方式退出的话,redis-server服务还是开启的,只是客户端测试关闭了。
12、正常关闭服务,再次查看进程,已经关闭了redis服务
性能测试
redis-benchmark是一个压力测试工具!
官方自带的性能测试工具!
redis-benchmark 命令参数,即可测试
首先需要保证redis-server服务开启,并且可以连通
我们来简单的测试一下:
# 测试:100个并发连接 100000请求 redis-benchmark -h localhost -p 6379 -c 100 -n 100000
如何分析呢?
基础知识
Redis有几个数据库?
redis默认有16个数据库,从第0个开始到15个,默认是第0个
查看配置文件:redis.conf
基本命令
-
不区分大小写
select:切换数据库
dbsize:查看数据库的大小
127.0.0.1:6379> select 3 OK 127.0.0.1:6379[3]> dbsize (integer) 0
keys *:获取当前数据所有的key
-
测试在当前数据库set值,其他的数据库是获取不到的
127.0.0.1:6379[3]> select 3 OK 127.0.0.1:6379[3]> set name zxh OK 127.0.0.1:6379[3]> get name "zxh" 127.0.0.1:6379[3]> keys * 1) "name" 127.0.0.1:6379[3]> select 7 OK 127.0.0.1:6379[7]> keys * (empty list or set) 127.0.0.1:6379[7]> dbsize (integer) 0
flushdb:清除当前数据库
127.0.0.1:6379[3]> keys * 1) "name" 127.0.0.1:6379[3]> flushdb OK 127.0.0.1:6379[3]> keys * (empty list or set)
127.0.0.1:6379> keys * 1) "counter:__rand_int__" 2) "key:__rand_int__" 3) "mylist" 4) "name" 127.0.0.1:6379> select 3 OK 127.0.0.1:6379[3]> flushall OK 127.0.0.1:6379[3]> dbsize (integer) 0 127.0.0.1:6379[3]> select 0 OK 127.0.0.1:6379> keys * (empty list or set)
Redis端口为什么是6379 ?
Alessia Merz 是一位意大利舞女、女演员。 Redis 作者 Antirez 早年看电视节目,觉得 Merz 在节目中的一些话愚蠢可笑,Antirez 喜欢造“梗”用于平时和朋友们交流,于是造了一个词 "MERZ",形容愚蠢,与 "stupid" 含义相同。
后来 Antirez 重新定义了 "MERZ" ,形容”具有很高的技术价值,包含技艺、耐心和劳动,但仍然保持简单本质“。
到了给 Redis 选择一个数字作为默认端口号时,Antirez 没有多想,把 "MERZ" 在手机键盘上对应的数字 6379 拿来用了。
Redis 是单线程的!
Redis是很块的,官方表示,Redis是基于内存操作的,所以CPU并不是Reids的性能瓶颈,Reids的瓶颈是根据机器的内存和网络带宽(请求都需要经过网络的)来的。
既然可以使用单线程来实现,所以就使用了单线程!
Redis 是 C 语言写的,官方提供的数据为 100000+ 的QPS,完全不比同样是 key-value的Memcache差!
Reids为什么单线程还这么块!
1、误区1:高性能的服务器一定是多线程的?不一定
2、误区2:多线程(CPU会上下文切换,这是耗时的操作!)一定比单线程效率高!是不对的。
需要去了解 CPU、内存、硬盘的速度!
核心:Redis 是将所以的数据全部放在内存中,所以说使用单线程去操作效率就是最高的,因为不需要消耗切换的时间,多线程(CPU上下文会切换:是一个耗时的操作!),对于内存系统来说,如果没有上下文切换效率就是最高的!多次读写都是在一个CPU上,所以在内存情况下,这个就是最佳方案!