关于非关系型数据库redis的亿点点

关于非关系型数据库redis的亿点点

关系型和非关系型数据库

关系型数据库

非关系型数据库

两个数据库的区别

数据存储方式不同

 

扩展方式不同

多事务支持性不同

 

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

基于“三高”问题

 

非关系数据库redis介绍

Redis优点

key-value			键值对类型
string				字符串(可以是整形,浮点型,字符型,统称为元素)
list				列表(实现队列形式,元素不唯一)
set					集合(各不相同的元素,分有序和无序)
hash				hash散列值

Redis数据库部署

[root@localhost ~]# yum -y install gcc gcc-c++ make

[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

[root@localhost redis-5.0.7]# cd utils/
[root@localhost utils]# ./install_server.sh 

在这里插入图片描述

 在这里插入图片描述

 

Please select the redis executable path [] /usr/local/bin/redis-server

 

[root@localhost utils]# ln -s /usr/local/redis/bin/* /usr/local/bin/

 

[root@localhost utils]# netstat -antp | grep redis
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      122058/redis-server 

 

[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		//指定日志文件路径

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连接并等待

 

[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

 

[root@localhost utils]# redis-benchmark -t set,lpush -n 100000 -q
SET: 175131.36 requests per second
LPUSH: 182149.36 requests per second

 

-h 		//指定远程主机
-p		//指定Redis的服务端口号
-a		//指定密码,未设置密码可以省略此选项
若不加任何参数表示使用127.0.0.1:6379连接本机的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> 

 

Redis常用命令

192.168.1.5:6379> set test zhangsan
OK
192.168.1.5:6379> get test
"zhangsan"

 

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__"

 

192.168.1.5:6379> KEYS k*
1) "k2"
2) "key:__rand_int__"
3) "k1"

 

192.168.1.5:6379> KEYS k?
1) "k2"
2) "k1"

 

192.168.1.5:6379> KEYS k??
1) "k22"

 

192.168.1.5:6379> exists k	
(integer) 0				//0代表不存在
192.168.1.5:6379> exists k1	
(integer) 1				//1代表存在

 

192.168.1.5:6379> del k1
(integer) 1
192.168.1.5:6379> get k1
(nil)

 

192.168.1.5:6379> type k2
string

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"

 

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"

Redis多库常用命令

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

 

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"

 

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

 

Redis高可用

 持久化

 主从复制

 哨兵

 集群(cluster)

Redis持久化

 RDB持久化

 触发条件

  • 手动触发
  • 自动触发

     

vim /etc/redis/6379.conf
以下三个save条件满足任意一个时,都会引起bgsave的调用
219 save 900 1 	##当时间到900秒时,如果redis数据发生了至少1次变化,则执行bgsave
220 save 300 10 ##当时间到300秒时, 如果redis数据发生了至少10次变化, 则执行bgsave
221 save 60 10000 :当时间到60秒时,如果redis数据发生了至少10000次变化, 则执行bgsave

242 rdbcompression yes		##是否开启RDB文件压缩
254 dbfilename dump.rdb		##指定RDB文件名
264 dir /var/lib/redis/6379		##指定RDB文件和AOF文件所在目录

 

 在这里插入图片描述

 

  • 其他自动触发机制

执行流程

 启动时加载

 AOF持久化

 开启AOF

vim /etc/redis/6379.conf
700 appendonly yes		##修改成yes,开启AOF
704 appendfilename "appendonly.aof"		##指定A0F文件名称
796 aof-load-truncated yes		##是否忽略最后一条可能存在问题的指令

/etc/ init.d/redis_ 6379 restart		##重启redis

 执行流程

 命令追加(append)

 文件写入(write)和文件同步(sync)

vim /etc/redis/6379.conf
729 appendfsync always		
##命令写入aof_buf后立即调用系统fsync操作同步到AOF文件,fsync完成后线程返回。这种情况下,每次有写命令都要同步到A0F文件,硬盘IO成为性能瓶颈,Redis只能支持大约几百TPS写入,严重降低了Redis的性能;即便是使用固态硬盘(SSD),每秒大约也只能处理几万个命令,而且会大大降低SSD的寿命。
729 appendfsync no
命令写入aof_buf后调用系统write操作,不对AOF文件做fsync同步;同步由操作系统负责,通常同步周期为30秒。这种情况下,文件同步的时间不可控,且缓冲区中堆积的数据会很多,数据安全性无法保证。
729 appendfsync everysec(默认配置)
命令写入aof_buf后调用系统write操作,write完成后线程返回;fsync同步文件操作由专门的线程每秒调用一次。everysec是前述两种策略的折中,是性能和数据安全性的平衡,因此是Redis的默认配置,也是我们推荐的配置。

在这里插入图片描述

 文件重写(rewrite)

 文件重写的触发分类

 手动触发

 自动触发

vim /etc/ redis/ 6379. conf
AOF同步的策略
729 # appendfsync always
730 appendfsync everysec
731 # appendfsync no
771	auto-aof-rewrite-percentage 100		##当前AOF文件大小(即aof_current_size)是上次日志重写时AOF文件大小(aof_base_size)两倍时,发生BGREWRITEAOF操作
772 auto-aof-rewrite -min-size 64mb		##当前A0F文件执行BGREWRITEAOF命令的最小值,避免刚开始启动Reids时由于文件尺寸较小导致频繁的BGREWRITEA0F

在这里插入图片描述 

启动时加载

 

Redis性能管理

查看Redis内存使用

127.0.0.1:6379> info memory

 在这里插入图片描述

 

内存碎片率

 

内存使用率

 内回收key

 

vim /etc/redis/6379.conf
598 maxmemory-policy noenviction
volatile-lru	##使用LRU算法从已设置过期时间的数据集合中淘汰数据
volatile-ttl	 ##从已设置过期时间的数据集合中挑选即将过期的数据淘汰
volatile-random	##从已设置过期时间的数据集合中随机挑选数据淘汰
allkeys-lru 	##使用LRU算法从所有数据集合中淘汰数据
allkeys-random 	##从数据集合中任意选择数据淘汰

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值