一、Redis介绍
- 关系型数据库与菲关系型数据库
1)、关系型数据库
关系型数据库时一个结构化的数据库,创建在关系模型基础之上,一般面向记录。他借助于集合代数等数学概念和方法来处理数据库中的数据。关系模型指二维表格模型,因而一个关系模型数据库就是由二维表及其之间的联系组成的一个数据组织,现实世界中,各种实体与实体之间的各种联系都可以用关系模型来表示。SQL(结构化查询语言)语句就是一种基于关系型数据库的语言,用于执行对关系型数据库中数据的检索和操作。
主流的关系型数据库有,Oracle、MySQL、SQL server、Microsoft access、DB2等。
2)、非关系型数据库
NoSQL(NoSQL=not only SQL),意思是“不仅仅是SQL”,是非关系型数据库的总称。主流的nosql数据库有Redis、mongdb、hbase、couhDB等,以上这些数据库,他们的存储方式、存储结构以及使用的场景都是完全不同的。所以我们认为他是一个非关系型数据库的集合,而不是像关系型数据库一样,是一个统称。主流的关系型数据库以外的数据库,都是非关系型数据库。
NoSQL数据库凭借着其非关系型、分布式、开源和横向扩展等优势,被认为是下一代数据库产品。
二、Redis基础
1.Redis介绍
Redis是一个开源、使用C语言编写、支持网络、可基于内存亦可可持久化的日志型、key-value(键值对)数据库,是目前分布式架构中不可或缺的一环。
Redis服务器程序是单进程模型,也就是在一台服务器上可以同时运行多个Redis实例进程,而Redis的实际处理速度则完全依靠于主进程的执行效率。若在服务器上只运行一个Redis进程,当多个客户端同时访问时,服务器的处理能力会会有一定程度的下降;若在同一台服务器上开启多个Redis进程;Redis在提高并发处理能力的同时会给服务器的CPU造成很大压力。也就是说,在实际生产环境中,需要根据实际需求来决定开启多个Redis进程。若对高并发要求更高一些,可能会考虑在同一台服务器上开启对个进程;若CPU资源比较紧张,可采用单实例进程。
Redis具有以下几个优点。
l 具有极高的数据读写速度,数据读取的速度最高可达110000次/s,数据写入速度最高可达到81000次/s
l 支持丰富的数据类型,不仅仅支持简单的key-value( /'væljuː/)数据类型,还支持strings(/striŋz/)、lists、hashes、sets及ordered sets等数据类型操作
l 支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载继续使用。
l 原子性,Redis所有有操作都是原子性的。
l 支持数据备份,即master-salve模式的数据备份。
Redis作为基于内存的数据库,缓存是其较常应用的场景之一,除此之外,Redis常见应用场景还包括获取最新N个数据的操作,排行榜类应用,计数器应用,存储关系、实时分析系统、日志记录等。
2.Redis安装部署
通常情况下在Linux系统中进行源码编译安装,需要执行./configurl进行环境检查与配置,从而生成Makefile文件,所以在解压完软件包后,可直接进入解压缩后软件包目录,执行make与make install 命令进行安装即可。
[root@localhost ~]# tar zxvf redis-3.2.9.tar.gz -C /usr/src/
[root@localhost ~]# cd /usr/src/redis-3.2.9/
[root@localhost redis-3.2.9]# make && make install
在安装过程中若要想更改安装路径,可以使用以下命令格式来进行安装操作。
[root@localhost redis-3.2.9]# make
[root@localhost redis-3.2.9]# make PREFIX=安装路径 install
make install只是安装了二进制文件到系统中,并没有启动脚本和配置文件。软件包中默认提供了一个install_server.sh脚本文件,通过该脚本文件可以设置Redis服务所需的相关配置文件,当脚本运行完毕后,Redis服务就已经启动,监听端口为6379.
[root@localhost ~]# cd /usr/src/redis-3.2.9/utils/ && ./install_server.sh
[root@localhost utils]# ./install_server.sh
………………… ##省略部分
Selected config:
Port : 6379 ##监听端口
Config file : /etc/redis/6379.conf ##设置默认配置文件
Log file : /var/log/redis_6379.log ##设置日志文件
Data dir : /var/lib/redis/6379 ##执行数据目录
Executable : /usr/local/bin/redis-server ##执行命令
Cli Executable : /usr/local/bin/redis-cli ##客户端命令
[root@localhost utils]# netstat -anpt | grep redis
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 4551/redis-server 1
安装完成后,可通过Redis的服务控制脚本/erc/init.d/redis_6379来对Redis服务进行控制,如停止Redis服务、启动Redis服务、重启Redis服务、查看Redis服务运行状态。
[root@localhost utils]# /etc/init.d/redis_6379 stop
Stopping ...
Redis stopped
rm -rf /var/run/redis_6379.pid
[root@localhost utils]# /etc/init.d/redis_6379 start
Starting Redis server...
[root@localhost utils]# /etc/init.d/redis_6379 restart
Stopping ...
Redis stopped
Starting Redis server...
[root@localhost utils]# /etc/init.d/redis_6379 status
Redis is running (4625)
配置参数
Redis主配置文件为/etc/redis/6379.conf。
[root@localhost utils]# vim /etc/redis/6379.conf
bind 127.0.0.1 192.168.10.20 ##监听的主机地址
port 6379 ##端口
daemonize yes ##支持的守护进程
pidfile /var/run/redis_6379.pid ##指定的PID文件
loglevel notice ##日志级别
logfile /var/log/redis_6379.log ##指定的日志文件
[root@localhost utils]# /etc/init.d/redis_6379 restart
Stopping ...
Redis stopped
Starting Redis server...
三、Redis命令工具
Redis软件提供了多个命令工具,当Redis安装时,所包含的软件工具会同时被安装到系统中,在系统中可直接使用。命令工具的作用分别如下。
redis-server:用于启动Redis的工具
redis-benchmark:用于Redis在本机的运行效率
redis-check-aof:修复AOF持久化文件
redis-check-rdb:修RDB持久化文件
redis-cli:Redis命令行工具
redis-setinel:redis-server文件的软连接
我们这里只介绍redis-cli、redis-benchmark命令行工具的使用。
1、 Redis数据库系统也是一个景点的C/S架构的应用,要访问Redis数据库需要使用专门的客户端软件。Redis服务器的客户端软件就是其自带的redis-cli命令行。使用redis-cli连接指定的数据库。
[root@localhost utils]# redis-cli ##连接本机上的Redis数据库
127.0.0.1:6379> ping ##检测Redis服务是否启动
PONG
127.0.0.1:6379>
使用redis-cli连接远程主机:
redis-cli -h address -p prot -a password ##若未指定密码可省略-a
[root@localhost ~]# redis-cli -h 192.168.10.20 -p 6379
192.168.10.20:6379> info ##查看服务器的统计信息
# Server
redis_version:3.2.9
redis_git_sha1:00000000
redis_git_dirty:0
…… ##省略部分
192.168.10.20:6379> exit ##exit或quit 都可以退出redis
使用help命令可以获取帮助信息,有以下三种获取命令的帮助的方式。
192.168.10.20:6379> help @list ##查看所有与list命令相关的命令
192.168.10.20:6379> help set ##查看set命令的命令帮助
2、redis-benchmark测试工具
redis-benchmark是官方自带的Redis性能测试工具,可以有效的检测Redis服务的性能,
基本语法为:redis-benchmark [option] [option value]
-h:指定服务器主机名
-p:指定服务器端口
-s:指定服务器socket
-c:指定并发链接数
-n:指定请求数
-d:以字节(B)的形式指定、SET/GET值得数据大小
-k:1=keep alive 0=reconnrct
-r:SET/GET/INCR使用随机key,SADD使用随机值
-P:通过管道传输<numerq>请求
-q:强制退出redis,仅显示qurey/sec值
--csv:以CSV格式输出
-l:生成循环,永久执行测试
-t:仅运行以逗号分隔的测试命令列表
-i:idle模式。仅打开N个idle连接并等待。
综合上述选项,可针对某台redis服务器进行性能测试,如执行redis-benchmark -h 192.168.10.20 -p 6379 -c 100 -n 100000 命令即可向IP地址为192.168.10.20、端口为6379的redis服务器发送100和并发连接与100000个请求测试性能。
[root@localhost ~]# redis-benchmark -h 192.168.10.20 -p 6379 -c 100 -n 100000
执行redis-benchmark -h 192.168.10.20 -p 6379 -q -d 100命令的作用是测试存取大小为100B的数据包的性能
[root@localhost ~]# redis-benchmark -h 192.168.10.20 -p 6379 -q -d 100
执行redis-benchmark -t set,lpush -n 100000 -q命令的作用是测试本机上redis服务在进行set与lpush操作时的性能。
1、 redis数据库的常用命令
前面提到,redis数据库采用key-value(键值对)的数据存储形式。所使用的命令是set与get命令
set:存放数据,基本命令格式为set key value
get:过去数据,,基本命令格式为get key
[root@localhost ~]# redis-cli
127.0.0.1:6379> set name zhangsan
OK
127.0.0.1:6379> get name
"zhangsan"
1)、key相关命令
Key相关命令主要包含以下几种
1、 keys
a) 使用keys命令可以取符合规则的键值列表,通常情况下可以结合*、?等选项来使用。
127.0.0.1:6379> set k1 1
OK
127.0.0.1:6379> set k2 2
OK
127.0.0.1:6379> set k3 3
OK
127.0.0.1:6379> set v1 4
OK
127.0.0.1:6379> set v2 5
OK
127.0.0.1:6379> keys *
1) "k2"
2) "name"
3) "v1"
4) "k1"
5) "key:__rand_int__"
6) "counter:__rand_int__"
7) "v2"
8) "k3"
9) "mylist"
127.0.0.1:6379> set v11 11
OK
127.0.0.1:6379> keys v*
1) "v1"
2) "v11"
3) "v2"
127.0.0.1:6379> keys v?
1) "v1"
2) "v2"
127.0.0.1:6379> keys v??
1) "v11"
2)、exists:使用exists命令可以判断键值是否存在
127.0.0.1:6379> exists v1
(integer) 1 ##返回值“1”表示键值存在
127.0.0.1:6379> exists v5
(integer) 0 ##返回值“0”表示键值不存在
3)、del:使用del命令可以删除当前数据库指定的key
127.0.0.1:6379> keys *
1) "k2"
2) "name"
127.0.0.1:6379> del k2
(integer) 1
127.0.0.1:6379> get k2
(nil)
4)、type:使用type命令可以获取key对应的value值类型
127.0.0.1:6379> TYPE k1
string
5)、rename:rename命令是对已有key进行重命名,其格式为rename 源key 目标key,使用rename重命名时,无论目标key是否存在都进行重命名,源key值会直接覆盖目标key的值,建议先使用exists命令先查看目标key是否存在,再决定是否使用rename命令,以避免覆盖重要数据。
127.0.0.1:6379> keys v*
1) "v1"
2) "v11"
3) "v2"
127.0.0.1:6379> get v1
"4"
127.0.0.1:6379> get v2
"5"
127.0.0.1:6379> rename v1 v2
OK
127.0.0.1:6379> get v1
(nil)
127.0.0.1:6379> get v2
"4"
6)、renamenx:命令的作用是对已有的key进行重命名,并检测新名是否存在,命令格式与rename基本一致“renamenx 源key 新key”使用renamenx重命名时,如果目标key存在则不进行重命名。
127.0.0.1:6379> keys *
1) "name"
2) "k1"
127.0.0.1:6379> get name
"zhangsan"
127.0.0.1:6379> get k1
"1"
127.0.0.1:6379> renamenx name k1
(integer) 0
127.0.0.1:6379> get name
"zhangsan"
127.0.0.1:6379> get k1
"1"
7)、dbsize:命令的作用是查看当前数据库中key的数目
127.0.0.1:6379> DBSIZE
(integer) 8
2、 多数据库常用命令
a) 多数据库之间切换
Redis支持多数据库,redis在没有任何改动的情况下默认包含16个数据库,诗句哭名称时用数字0~15来依次命名的,使用select命令可以进行redis多数据库之间的切换,命令格式为“select index”。其中,index表示数据库的序号。而是用redis-cli连接redis数据库后,默认使用的是序号0的数据库。
127.0.0.1:6379> SELECT 10
OK
127.0.0.1:6379[10]> select 0
OK
127.0.0.1:6379>
B)多数据库之间移动数据
Redis的多数据库在一定程度上是相对独立的。例如在0上面存放了K1的数据,在其他1~15上是无法查看的。
127.0.0.1:6379> keys *
1) "name"
2) "k1"
127.0.0.1:6379> get name
"zhangsan"
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> get name
(nil)
Redis数据库提供了一个move命令,用于在多个数据库之间移动数据,
命令的使用格式为:move key dbindex
Key表示当前数据库的键值
Dbindex表示目标数据库序号(0~15)
127.0.0.1:6379> keys *
1) "name"
2) "k1"
127.0.0.1:6379> move name 10
(integer) 1
127.0.0.1:6379> get name
(nil)
127.0.0.1:6379> select 10
OK
127.0.0.1:6379[10]> get name
"zhangsan"
127.0.0.1:6379[10]>
c)、清除数据库内数据
redis数据库的整库数据删除主要分为两部分;
清空当前数据库的数据“FLUSHDB”
清空所有数据库的数据“FLUSHALL”