Redis数据库安装与使用
一、Redis介绍
Redis数据库是一个非关系型数据库。
1.1关系型数据库与分关系型数据库
数据库按照其结构可以分为关系型数据库与其他数据库。而这些其他数据库我们统称为非关系型数据库
1.2关系型数据库
关系型数据库是一个结构化的数据库,创建在关系模型基础上,一般面向记录。它借助于集合代数等数学概念和方法来处理数据库中的数据。关系模型指二维表格模型,因而一个关系型数据库就可以由二维表及其之间的联系组成的一个数据组织。现实世界中,各种实体与实体之间的各种联系都可以用关系模型来表示。SQL(Structured Query Language,结构化查询语言)语句就是一种基于关系型数据库语言,用来执行对关系型数据库中数据的检索和操作。
主流的关系型数据库包括Oracle,MySQL,SQL Server,Microsoft Access,DB2等
1.3非关系型数据库
NoSQL(NoSQL = Not Only SQL),意思是"不仅仅是SQL",是非关系型数据库的总称。主流NoSQL数据库由Redis,MongBD,Hbase,CouhDB等。
以上这些数据库,它们的存储方式、存储结构以及使用的场景都是完全不同的。所以我们认为它是一个非关系型数据库的集合。而不是像关系型数据库一样,是一个统称。换句话说就是,主流的关系型数据库以外的数据库,都是分关系型的。
1.4非关系型数据库产生背景
- High performance——对数据库高并发读写需求
- Huge Storage——对海量数据高效存储与访问需求
- High Scalability && Hige Availability——对数据库高可扩展性与高可用性需求
2.Redis简介
Redis是一个开源的,使用C语言编写,支持网络,可基于内存亦可持续化的日志型,key—value(键值对)数据库,是目前分布式架构中不可或缺的一环。
Redis具有以下优点:
- 具有极高的数据读写速度,数据读取的速度最高可达110000次/s,数据写入速度最高可达到81000次/s。
- 支持丰富的数据类型,不仅仅支持简单的key-value数据类型,还支持Strings,Lists,Hashes,Sets及Orered Sets等数据类型操作。
- 原子性,Redis所有操作都是原子性的。
- 支持数据备份,即master–slave模式的数据备份。
3.Redis安装部署
1)准备工作
一台Centos7,Redis源码包即可
Redis源码包可从Redis官方下载https://www.redis.io,或从下面链接下载
https://pan.baidu.com/s/1JlhmlSrK1xWerRE5oSgubA
提取码:3gj6
2)安装Redis数据库
[root@Redis ~]# mount /dev/cdrom /media/cdrom #挂光盘
[root@Redis ~]# yum -y install gcc* #安装依赖包
[root@Redis ~]# rz #上传软件包
[root@Redis ~]# tar zxf redis-3.2.9.tar.gz -C /usr/src/
[root@Redis ~]# cd /usr/src/redis-3.2.9/
[root@Redis redis-3.2.9]# make && make PREFIX=/usr/local/redis install
3)通过软件包默认提供的install_server.sh脚本文件来对Redis设置相关配置文件
[root@Redis redis-3.2.9]# ln -s /usr/local/redis/bin/* /usr/local/bin/
[root@Redis redis-3.2.9]# cd utils/
[root@Redis utils]# ./install_server.sh
依次回车即可或自己定义
安装完成后,可通过Redis的服务控制脚本/etc/init.d/redis_6379来对Redis服务进行控制
[root@Redis utils]# netstat -anpt | grep redis #查看redis端号
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 5058/redis-server 1
[root@Redis utils]# /etc/init.d/redis_6379 stop #关闭Redis服务
Stopping ...
Redis stopped
[root@Redis utils]# /etc/init.d/redis_6379 start #启用Redis服务
Starting Redis server...
[root@Redis utils]# /etc/init.d/redis_6379 status #查看Redis运行状态
Redis is running (5146)
3.配置参数
Redis主配置文件为/etc/redis/6379.conf
常见配置项:
- bind:监听地址
- port:端口号
- daemonize yes:启用守护进程
- pidfile:指定PID文件
- loglevel notice:日志级别
- logfile:指定日志文件
二、Redis命令工具
Redis软件提供了多个命令工具,当Redis安装时,所包含的软件包工具会同时被安装到系统中,在系统中可以直接使用。
命令工具及作用如下:
- redis—server:用于启用Redis的工具
- redis—benchmark:用于检测Redis在本机运行效率
- redis—check—aof:修复AOF持久化文件
- redis—check—rdb:修复RDB持久化文件
- redis—cli:Redis命令工具
- redis—setinel:redis—server命令工具软连接
1.redis-cli命令行工具
1)连接到本地的redis数据库,并用ping命令测试redis服务是否启动
2)连接到其他服务器上的redis服务
在Redis主配置文件中的bind项后添加本机的IP地址
[root@Redis ~]# vim /etc/redis/6379.conf
[root@Redis ~]# /etc/init.d/redis_6379 restart
Stopping ...
Redis stopped
Starting Redis server...
[root@Redis ~]# redis-cli -h 192.168.1.10 -p 6379
192.168.1.10:6379> exit
[root@Redis ~]#
2.redis-benchmark测试工具
常用选项:
- -h:指定服务器主机名
- -p:指定服务器端口
- -s:指定服务器 socket
- -c:指定并发连接数
- -n:指定请求数
- -d:以字节(B)的形式指定 SET/GET 值的数据大小
- -k:1=keep alive 0=reconnect
- -r:SET/GET/INCR 使用随机key,SADD使用随机值
- -P:通过管道传输请求
- -q:强制退出redis。仅显示 query/sec值
- — —csv:以CSVA格式输出
- -l:生成循环,永久执行测试
- -t:仅运行以逗号分隔的测试命令列表
- -l:ldle模式。仅打开N个idle连接并等待
1)性能测试:发送100个并发连接与100000个请求测试性能
[root@Redis ~]# redis-benchmark -h 192.168.1。10 -p 6379 -c 100 -n 100000
2)性能测试:测试存取大小为100B的数据包的性能
[root@Redis ~]# redis-benchmark -h 192.168.1.10 -p 6379 -q -d 100
3)性能测试:测试本机redis服务在进行set与lpush操作时的性能
[root@Redis ~]# redis-benchmark -t set,lpush -n 100000 -q
SET: 99206.34 requests per second
LPUSH: 97465.88 requests per second
[root@Redis ~]#
三、Redis数据库常用命令
Redis数据库采用key-value(键值对)的数据存储形式。所以使用的命令是set与get命令
- set:存放数据,基本命令格式为 set key value
- get:获取数据,基本命令格式为 get key
[root@Redis ~]# redis-cli -h 192.168.1.10 -p 6379
192.168.1.10:6379> set xingming zhangsan
OK
192.168.1.10:6379> get xingming
"zhangsan"
1.key相关命令
1)keys
取符合规则的键值列表,通常情况可以结合*(所有),?(单个字符) 等选项来使用
192.168.1.10:6379> set a1 1
192.168.1.10:6379> set a2 2
192.168.1.10:6379> set v1 3
192.168.1.10:6379> keys * #显示当前库所有键
192.168.1.10:6379> keys xing???? #显示键以xing开头后面有4个字符的
192.168.1.10:6379> keys a* #显示以a开头的所有键
2)exists
判断键值是否存在
192.168.1.10:6379> exists xingming
(integer) 1
192.168.1.10:6379> exists nianling
(integer) 0
3)del
删除当前数据库的指定key
192.168.1.10:6379> get a1
"1"
192.168.1.10:6379> del a1
(integer) 1
192.168.1.10:6379> get a1
(nil)
4)type
获取key对应的value值类型,默认情况下redis键值类型都是字符串string类型
192.168.1.10:6379> type xingming
string
5)rename
对已有key进行重命名,无论目标key是否存在都进行重命名,且源key的值会覆盖目标key的值。
192.168.1.10:6379> keys a*
1) "a2"
192.168.1.10:6379> rename a2 a33
OK
192.168.1.10:6379> keys a*
1) "a33"
6)renamenx
对已有key进行重命名,并检测新名是否存在。跟rename区别则是当renamenx进行重命名时,如果目标key存在则不进行重命名。
192.168.1.10:6379> set a1 1
OK
192.168.1.10:6379> set a2 2
OK
192.168.1.10:6379> keys a*
1) "a2"
2) "a33"
3) "a1"
192.168.1.10:6379> renamenx a33 a1
(integer) 0
192.168.1.10:6379> keys a*
1) "a2"
2) "a33"
3) "a1"
192.168.1.10:6379> renamenx a33 a4
(integer) 1
192.168.1.10:6379> keys a*
1) "a2"
2) "a4"
3) "a1"
7)dbsize
查看当前数据库中key的数目
192.168.1.10:6379> keys *
1) "a2"
2) "xingming"
3) "mylist"
4) "a4"
5) "v1"
6) "key:__rand_int__"
7) "counter:__rand_int__"
8) "a1"
192.168.1.10:6379> dbsize
(integer) 8
2.多数据库常用命令
1)多数据库间切换
redis数据库支持多数据库,默认包含16个数据库,名称用数字0–15表示。redis-cli进入数据库后,默认使用的数据库0。
192.168.1.10:6379> select 11
OK
192.168.1.10:6379[11]> select 16
(error) ERR invalid DB index
2)多数据库间移动数据
Redis的多数数据库在一定程度上是无法相对独立的。例如,在数据库0上面存放的k1的数据,在其他的1~15的数据库上是无法查看到的。
192.168.1.10:6379[11]> select 0
OK
192.168.1.10:6379> set k1 99
OK
192.168.1.10:6379> get k1
"99"
192.168.1.10:6379> select 1
OK
192.168.1.10:6379[1]> get k1
(nil)
Redis数据库提供了一个move命令,其可以进行多数据库的数据移动。
192.168.1.10:6379[1]> select 0
OK
192.168.1.10:6379> get k1
"99"
192.168.1.10:6379> move k1 3
(integer) 1
192.168.1.10:6379> select 3
OK
192.168.1.10:6379[3]> get k1
"99"
192.168.1.10:6379[3]> select 0
OK
192.168.1.10:6379> get k1
(nil)