当前位置:   article > 正文

介绍非关系型数据库redis_非关系型数据库分布协作

非关系型数据库分布协作

关系型和非关系型数据库

关系型数据库

  • 是一个结构化的数据库,创建在关系模型基础上,sql语句就是一种基于关系型数据库的语言,主流的关系型数据库有Mysql,Oracle,Access,DB2,SQL数据库等

非关系型数据库

  • 不基于关系模型基础,不仅仅是sql语句,主流的非关系型数据库有Redis,MongoDB,HBASE,Memcached等

两个数据库的区别

数据存储方式不同

  • 关系型数据库是天然表格式,数据存储在数据表的行和列中,数据表之间可以彼此关联协作存储,很容易能提取到数据,且数据是直接存储到磁盘的
  • 非关系型数据库不适合存储在数据表的行和列中,而是大块组合在一起,非关系数据库通常存储在数据集中,就像文档,键值对或者图片。非关系型数据库不需要手动创建数据库和表数据是存到内存中的

扩展方式不同

  • 要支持更多的数据并发量,sql数据库是纵向扩展,提高处理能力。因为数据存储在关系表中,可能会有操作性能瓶颈,这需要通过提高计算机性能来克服,但始终会有个上限
  • NoSQL是横向扩展,非关系型数据库存储是天然分布式的,可以通过给资源池添加更多普通的数据库服务器节点来负载分担

多事务支持性不同

  • 传统的sql数据库支持高事务性,复杂数据查询和控制执行计划,SQL数据库支持对事务原子性细粒度控制。易于事务回滚
  • 非关系型数据库在此方面会薄弱些,但是有更高的扩展性和大量数据的处理

非关系型数据库的产生背景

基于“三高”问题

  • 对数据库高并发读写的需求
  • 对大量数据高效存储和访问需求
  • 对诗句哭高扩展性和高可用性需求

关系数据库redis介绍

  • Redis是一个开源的,使用c编写的NoSQL数据库
  • Redis是基于内存运行的并且支持持久化存储,采用的是key-value键值对的存储形式
  • Redis服务可以在同一台服务器上同时开启多个Redis进程。Redis的时机处理速度是看主进程的执行效率,若服务器上只运行一个Redis进程,当多个客户端访问时,处理的心更会下降,若同一个服务器运行多个Redis进程,Redis会在提高并发的同时也会给服务器的CPU带来很大的压力,所以依据需求来决定开启多少个Redis进程
  • 建议开启两个Redis进程,可以达到进程备份的同时还不会给CPU带来太大的压力

Redis优点

  • 具有极高的数据读写速度,数据读取速度最高可达11万次每秒,写入速度最高可达8万次每秒
  • 支持很多种的数据类型:key-value,strings,lists,hashs,sets
key-value			键值对类型
string				字符串(可以是整形,浮点型,字符型,统称为元素)
list				列表(实现队列形式,元素不唯一)
set					集合(各不相同的元素,分有序和无序)
hash				hash散列值
  • 1
  • 2
  • 3
  • 4
  • 5
  • 支持数据的持久化,可以将内存中的数据保存到磁盘中,重启的时候可以再次加载使用
  • 具有原子性,所有操作都是原子性的
  • 支持数据备份,用master-slave模式的数据备份

Redis数据库部署

  • 先安装依赖环境
[root@localhost ~]# yum -y install gcc gcc-c++ make

  • 1
  • 2
  • 然后解压安装包,编译安装
[root@localhost ]# tar zxf redis-5.0.7.tar.gz
[root@localhost redis-5.0.7]# cd redis-5.0.7/
[root@localhost redis-5.0.7]# make PREFIX=/usr/local/redis install		//因为Redis源码包中直接提供了Makefile文件,所以不用执行./configure配置,可以直接执行make
  • 1
  • 2
  • 3
  • 执行软件包中的install_server.sh脚本文件
[root@localhost redis-5.0.7]# cd utils/
[root@localhost utils]# ./install_server.sh 

  • 1
  • 2
  • 3
  • 然后直接按回车,到路径那里需要填写路径,注意必须一次写对,可以先写到文本中粘贴过来
    在这里插入图片描述
    在这里插入图片描述
Please select the redis executable path [] /usr/local/redis/bin/redis-server

  • 1
  • 2
  • 然后优化命令路径
[root@localhost utils]# ln -s /usr/local/redis/bin/* /usr/local/bin/

  • 1
  • 2
  • 当运行完脚本后可以查看redis是否运行,默认监听端口是6379
[root@localhost utils]# netstat -antp | grep redis
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      122058/redis-server 

  • 1
  • 2
  • 3
  • 然后修改redis中的配置参数
[root@localhost utils]# vim /etc/redis/6379.conf
70 bind 127.0.0.1 192.168.1.5			//添加监听的主机地址
93 port 6379							//默认监听端口
137 daemonize yes						//开启守护进程模式
159 pidfile /var/run/redis_6379.pid		//指定pid文件路径
167 loglevel notice						//设置日志的级别
172 logfile /var/log/redis_6379.log		//指定日志文件路径

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

Redis命令工具

  • redis-benchmark //用于检测Redis在本季的运行效率
-h    	//指定服务器主机名
-p  	//指定服务器端口号
-s		//指定服务器套接字
-c		//指定并发连接数
-n		//指定请求数
-d		//以字节形式指定set/get值的数据大小
-k		//1是keep alive 0是reconnect
-r		//set/get/incr是用随机key,sadd使用随机值
-p		//通过管道传输<numreq>请求
-q		//强制退出redis
--csv	//以csv格式输出
-l		//生成循环,一直执行测试
-t		//仅运行以逗号分隔的测试命令列表
-I		//idle模式,打开n个idle连接并等待

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 测试存取110字节大小的数据包性能
[root@localhost utils]# redis-benchmark -h localhost -p 6379 -q -d 110
PING_INLINE: 154320.98 requests per second
PING_BULK: 163398.70 requests per second
SET: 180505.41 requests per second
GET: 156985.86 requests per second
INCR: 177304.97 requests per second
LPUSH: 187617.27 requests per second
RPUSH: 181159.42 requests per second
LPOP: 181159.42 requests per second
RPOP: 180831.83 requests per second
SADD: 162074.56 requests per second
HSET: 154083.20 requests per second
SPOP: 154083.20 requests per second
LPUSH (needed to benchmark LRANGE): 178571.42 requests per second
LRANGE_100 (first 100 elements): 45106.00 requests per second
LRANGE_300 (first 300 elements): 15772.87 requests per second
LRANGE_500 (first 450 elements): 9212.34 requests per second
LRANGE_600 (first 600 elements): 6876.16 requests per second
MSET (10 keys): 102774.92 requests per second

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 测试本机上Redis服务在进行set与lpush操作时的性能
[root@localhost utils]# redis-benchmark -t set,lpush -n 100000 -q
SET: 175131.36 requests per second
LPUSH: 182149.36 requests per second

  • 1
  • 2
  • 3
  • 4
  • redis-cli 远程登录
-h 		//指定远程主机
-p		//指定Redis的服务端口号
-a		//指定密码,未设置密码可以省略此选项
若不加任何参数表示使用127.0.0.1:6379连接本机的redis数据库
  • 1
  • 2
  • 3
  • 4
  • 远程连接redis数据库
[root@localhost utils]# /etc/init.d/redis_6379 restart
Stopping ...
Waiting for Redis to shutdown ...
Redis stopped
Starting Redis server...
[root@localhost utils]# redis-cli -h 192.168.1.5 -p 6379
192.168.1.5:6379> 

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

Redis常用命令

  • set :存放数据
  • get :获取数据
192.168.1.5:6379> set test zhangsan
OK
192.168.1.5:6379> get test
"zhangsan"

  • 1
  • 2
  • 3
  • 4
  • 5
  • 查看库中所用键
192.168.1.5:6379> keys *
1) "k2"
2) "myset:__rand_int__"
3) "key:__rand_int__"
4) "mylist"
5) "k1"
6) "test"
7) "counter:__rand_int__"

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 查看数据库中以k开头的数据
192.168.1.5:6379> KEYS k*
1) "k2"
2) "key:__rand_int__"
3) "k1"

  • 1
  • 2
  • 3
  • 4
  • 5
  • 查看数据库中以k开头后面包含任意一位的数据
192.168.1.5:6379> KEYS k?
1) "k2"
2) "k1"

  • 1
  • 2
  • 3
  • 4
  • 查看数据库以k开头后面任意两位的数据
192.168.1.5:6379> KEYS k??
1) "k22"

  • 1
  • 2
  • 3
  • 判断键值是否存在
192.168.1.5:6379> exists k	
(integer) 0				//0代表不存在
192.168.1.5:6379> exists k1	
(integer) 1				//1代表存在
	
  • 1
  • 2
  • 3
  • 4
  • 5
  • 删除指定键
192.168.1.5:6379> del k1
(integer) 1
192.168.1.5:6379> get k1
(nil)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 获取键对应的value值类型
192.168.1.5:6379> type k2
string

  • 1
  • 2
  • 3
  • 对已有键重命名,注意重命名时查看新的命名键是否存在,否则会覆盖原有数据
192.168.1.5:6379> rename k2 k
OK
192.168.1.5:6379> get k2
(nil)
192.168.1.5:6379> get k
"2"
192.168.1.5:6379> rename k22 k
OK
192.168.1.5:6379> get k
"12"

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 对键重命名时检测新名是否存在,在就不进行操作
192.168.1.5:6379> get k1
"2"
192.168.1.5:6379> get k3
"3"
192.168.1.5:6379> renamenx k1 k3		//n代表不进行修改,x进行修改,对已有的新名不进行修改
(integer) 0
192.168.1.5:6379> get k1
"2"
192.168.1.5:6379> get k3
"3"

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

Redis多库常用命令

  • 切换库
192.168.1.5:6379> select 10			//切换到10号库,一共0-15个库
OK
192.168.1.5:6379[10]> 

  • 1
  • 2
  • 3
  • 4
  • 多库间移动数据
192.168.1.5:6379> get k1
"2"
192.168.1.5:6379> move k1 1
(integer) 1
192.168.1.5:6379> select 1
OK
192.168.1.5:6379[1]> get k1
"2"

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 清空数据库内数据
192.168.1.5:6379[1]> flushdb			//清空当前数据库数据
OK
192.168.1.5:6379[1]> get k1
(nil)
192.168.1.5:6379[1]> flushall			//清空所有数据库的数据,慎用
OK

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号