热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Redis数据库是什么及如何进行参数调优

今天就跟大家聊聊有关Redis数据库是什么及如何进行参数调优,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根

今天就跟大家聊聊有关Redis 数据库是什么及如何进行参数调优,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

Redis 群集配置实例:
一、关系型数据库与非关系型数据库的区别:

Redis数据库是一个非关系型数据库,和oracle、mysql、sql server等关系型数据库不是同一类型。NoSQL是非关系型数据库的总称,主流的NoSQL数据库有redis、MongBD等。NoSQL的存储方式、存储结构以及使用的场景都是完全不同的。NoSQL数据库凭借着其非关系型、分布式、开源和横向扩展等优势,被认为是下一代数据库产品。

NoSQL可以解决关系型数据库产生的三高问题:

  1. 对数据库高并发读写需求。

  2. 对海量数据高效存储与访问需求。

  3. 对数据库高可扩展性与高可用性需求。

关系型数据库和非关系型数据库都有各自的特点与应用场景,两者精密结合将会给Web 2.0的数据库发展带来新的思路。让关系型数据库关注在关系上,非关系型数据库关注在存储上。
.
二、redis数据库介绍:

Redis是一个开源的、使用C语言编写、支持网络、可基于内存也可持久化的日志类型、key-value(键值对)数据库,是目前分布式架构中不可或缺的一环。

Redis服务器是单进程模型,也就是在一台服务器上可以同时启动多个Redis进程,而Redis的实际处理速度则完全依靠主进程的执行效率。若在服务器上只运行一个Redis进程,当多个client同时访问时,服务器的处理能力会有一定程度的下降;若在同一台服务器上开启多个Redis进程,Redis在提高并发处理能力的同时会给服务器的CPU造成很大的压力。也就是说,在实际生产环境中,需要根据实际的需求来决定开启多少个Redis进程。若对高并发要求更高些,可能会考虑在同一台服务器上开启多个进程;若CPU资源比较紧张,采用单进程即可。

Redis具有以下几个有点:

  1. 具有极高的读写速度,数据读取的速度最高可达到110000次/s,数据的写入速度最高可以达到81000次/s。

  2. 支持丰富的数据类型,不仅仅支持简单的key-value数据类型,还支持strings、lists、hashes、sets及ordered sets等数据类型操作。

  3. 支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。

  4. 原子性,Redis所有操作都是原子性的。

  5. 支持数据备份,即master-salve模式的数据备份。

.
Redis是基于内存运行的数据库,缓存是它比较常应用的场景之一,除此之外,Redis常见应用场景还包括获取最新N个数据的操作、排行榜应用、计数器应用、存储关系、实时分析系统、日志记录等。
.
三、Redis的安装部署:

可以先去Redis官网下载相应的源码包或从这:https://pan.baidu.com/s/1rGl8OwfYuYAB-aEXcZ7wRw (提取码: zg3w )直接下载。

[root@redis ~]# tar zxf redis-5.0.5.tar.gz -C /usr/src/          #解包
[root@redis ~]# cd /usr/src/redis-5.0.5/                  #切换至解压出来的目录
[root@redis redis-5.0.5]# make && make install    #不需要./configure进行环境检查与配置,直接make安装即可。
[root@redis redis-5.0.5]# cd /usr/src/redis-5.0.5/utils/    #设置相关配置文件
[root@redis utils]# ./install_server.sh       #执行该脚本,相关配置文件就生成了。
#接下来是在指定各种配置文件的存放目录,一路按回车确认即可。
[root@redis utils]# cd /etc/init.d/             #优化控制服务启停
[root@redis init.d]# mv redis_6379 redis
[root@redis init.d]# chkconfig --add redis         #添加为系统服务。
[root@redis init.d]# systemctl restart redis
[root@redis init.d]# netstat -anpt | grep redis   # redis默认监听6379和群集端口16379
tcp        0      0 127.0.0.1:6379     0.0.0.0:*    LISTEN      7098/redis-server 1 
#现在只是安装了redis,并没有配置群集,所以16379端口并没有监听。
[root@redis init.d]# vim /etc/redis/6379.conf             #查看redis配置文件
bind 127.0.0.1 192.168.1.1             #监听的主机地址
appendonly yes  #改为“yes”,以便在每次更新操作后进行日志记录,进行数据同步写入
port 6379                                        #监听端口
daemonize yes                               #启用守护进程
pidfile /var/run/redis_6379.pid        #指定PID文件
loglevel notice                                #日志级别
logfile /var/log/redis_6379.log        #指定日志文件

上面为部分配置参数,主配置中还有很多更多的配置参数,具体可参考如下:
Redis 数据库是什么及如何进行参数调优
四、Redis命令工具及常用命令:

Redis软件提供了很多命令工具,在安装Redis时,所包含的软件工具同时会被安装到系统中,在系统中可以直接使用,这些命令工具的作用如下所示:

  1. redis-server:用于启动Redis的工具。

  2. redis-benchmark:用于检测Redis在本机的运行效率。

  3. redis-check-aof:修复AOF持久化文件。

  4. redis-check-rdb:修复RDB持久化文件。

  5. redis-cli:Redis命令行工具。

.
下面是 redis-cli和redis-benchmark工具的用法:

1、redis-cli命令行工具:
.
redis-cli命令可以连接指定的数据库,可以用“-h”指定远程主机;“-p指定服务的端口号”,若设置了密码,可以用“-a”指定密码,若没设置连接密码,则可以省略“-a”选项。如下:

[root@redis redis]# redis-cli -h 192.168.1.1 -p 6379      
#若端口号默认监听6379,也可省略-p选项。
192.168.1.1:6379>
在数据库操作环境中,使用help命令可获取命令类型的帮助。其中,有三种获取命令帮助的方式。

help @:获取中的命令列表。
help :获取某个命令的帮助。
help  :获取可能帮助的主题列表。
示例如下:

192.168.1.1:6379> help @list         #查看所有与list数据类型相关的命令

  BLPOP key [key ...] timeout
  summary: ck until one is available
  since: 2.0.0

  BRPOP key [key ...] timeout
  summary: block until one is available
  since: 2.0.0
             ...........................
192.168.1.1:6379> help set       #查看set命令的命令帮助。

  SET key value [expiration EX seconds|PX milliseconds] [NX|XX]
  summary: Set the string value of a key
  since: 1.0.0
  group: string

2、redis-benchmark压力测试工具:
.
redis-benchmark是官方自带的Redis性能测试工具,可以有效地测试Redis服务的性能。该工具的常用选项如下:
Redis 数据库是什么及如何进行参数调优

[root@redis redis]# redis-benchmark -h 192.168.1.1 -p 6379 -c 100 -n 100000
#向指定IP地址及端口的Redis服务器发送100个并发连接与100000个请求测试性能。

           .........................
====== MSET (10 keys) ======
  100000 requests completed in 1.74 seconds
  100 parallel clients
  3 bytes payload
  keep alive: 1

23.94% <= 1 milliseconds
98.02% <= 2 milliseconds
99.64% <= 3 milliseconds
99.76% <= 4 milliseconds
99.82% <= 5 milliseconds
99.89% <= 6 milliseconds
99.90% <= 7 milliseconds
99.94% <= 8 milliseconds
99.97% <= 9 milliseconds
100.00% <= 10 milliseconds
100.00% <= 10 milliseconds
57603.69 requests per second

#测试结果,milliseconds为毫秒,时间越短,性能越好。
[root@redis redis]# redis-benchmark -h 192.168.1.1 -p 6379 -q -d 100
#测试向指定Redis服务器的指定端口6379存取大小为100B的数据包的性能。
[root@redis redis]# redis-benchmark -t set,lpush -n 100000 -q
#测试本机上Redis服务在进行set与lpush操作时的性能。
SET: 67659.00 requests per second
LPUSH: 64516.13 requests per second

Redis数据库常用命令:
.
Redis数据库采用key-value(键值对)的数据存储形式,所使用的命令是set和get。
.

  • set:存放数据,命令格式为set key value。

  • get:获取数据,命令格式为get key。

[root@localhost ~]# redis-cli          #连接本地数据库
127.0.0.1:6379 > set test zhangsan             #插入数据
OK
127.0.0.1:6379> get test         #查询键值
"zhangsan"
127.0.0.1:6379> keys t*               #查询以“t”开头的数据
1) "test"
127.0.0.1:6379> keys t?         #查询以“t”开头后面包含一个任意一位的数据
(empty list or set)                 #没有查到,代表没有符合条件的数据
127.0.0.1:6379> keys t??         #查询以“t”开头后面包含一个任意两位的数据
(empty list or set)
127.0.0.1:6379> exists test          #判断“test”键是否存在
(integer) 1                                              #表示test键存在
127.0.0.1:6379> exists yy                    #判断“yy”键是否存在
(integer) 0
127.0.0.1:6379> keys *        #查询当前库中所有键
1) "counter:__rand_int__"
2) "mylist"
3) "key:__rand_int__"
4) "test"
5) "myset:__rand_int__" 
127.0.0.1:6379> del test                         #删除test键
(integer) 1
127.0.0.1:6379> set www 23
OK
127.0.0.1:6379> type www            #获取键“www”对应的value值类型
string

rename命令可以对已有的key进行重命名,还有一个重命名的命令为renamenx。两者区别是前者更改的目标key值不管存在与否,都将进行更改,直接覆盖目标key值的数据;后者renamenx命令是在更改时,会检查目标键值是否存在,若存在,将放弃更改。

127.0.0.1:6379> get www
"23"
127.0.0.1:6379> set qq 123            #插入一条数据
OK
127.0.0.1:6379> renamenx www qq                #将“www”更改为“qq”
(integer) 0                                                         #“qq”存在,放弃更改
127.0.0.1:6379> rename www qq             #使用rename命令进行更改
OK
127.0.0.1:6379> get qq               #直接覆盖目标数据
"23"
127.0.0.1:6379> dbsize                  #查看当前数据库中key的数目
(integer) 5

多数据库常用的命令:

Redis支持多数据库,Redis在没有任何改动的情况下默认包含16个数据库,数据库名使用数字0--15来依次命名。每个库中的数据是独立的,也就是说在10库中查不到0库中的数据。

127.0.0.1:6379> select 10        #切换至编号10的库
OK
127.0.0.1:6379[10]> select 15          #切换至编号15的库
OK
127.0.0.1:6379[15]> select 0              #切换至编号0的库
OK
127.0.0.1:6379> move liuyi 10    #将该库中的数据移动到10库中
(integer) 1
127.0.0.1:6379> select 10            #切换至编号10的库
OK
127.0.0.1:6379[10]> get liuyi                 #查看移动过来的库
"23"
#现在0库中已经查不到“liuyi”的数据了

清除数据库内数据:

Redis数据库的整库数据删除主要分为两个部分:清空当前数据库中的数据,使用flushdb命令实现;清空所有库中的数据,使用flushall命令。数据库清空操作比较危险,生产环境下慎用!!!

看完上述内容,你们对Redis 数据库是什么及如何进行参数调优有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注编程笔记行业资讯频道,感谢大家的支持。


推荐阅读
  • 本文深入探讨了NoSQL数据库的四大主要类型:键值对存储、文档存储、列式存储和图数据库。NoSQL(Not Only SQL)是指一系列非关系型数据库系统,它们不依赖于固定模式的数据存储方式,能够灵活处理大规模、高并发的数据需求。键值对存储适用于简单的数据结构;文档存储支持复杂的数据对象;列式存储优化了大数据量的读写性能;而图数据库则擅长处理复杂的关系网络。每种类型的NoSQL数据库都有其独特的优势和应用场景,本文将详细分析它们的特点及应用实例。 ... [详细]
  • NoSQL数据库,即非关系型数据库,有时也被称作Not Only SQL,是一种区别于传统关系型数据库的管理系统。这类数据库设计用于处理大规模、高并发的数据存储与查询需求,特别适用于需要快速读写大量非结构化或半结构化数据的应用场景。NoSQL数据库通过牺牲部分一致性来换取更高的可扩展性和性能,支持分布式部署,能够有效应对互联网时代的海量数据挑战。 ... [详细]
  • 本文介绍了 Go 语言中的高性能、可扩展、轻量级 Web 框架 Echo。Echo 框架简单易用,仅需几行代码即可启动一个高性能 HTTP 服务。 ... [详细]
  • 包含phppdoerrorcode的词条 ... [详细]
  • PHP 各版本对比:标准版与最新顶级版的详细分析 ... [详细]
  • Linux学习精华:程序管理、终端种类与命令帮助获取方法综述 ... [详细]
  • 为何Serverless将成为未来十年的主导技术领域?
    为何Serverless将成为未来十年的主导技术领域? ... [详细]
  • 本文详细解析了ASP.NET 2.0中的Callback机制,不仅介绍了基本的使用方法,还深入探讨了其背后的实现原理。通过对比Atlas框架,帮助读者更好地理解和应用这一机制。 ... [详细]
  • javax.mail.search.BodyTerm.matchPart()方法的使用及代码示例 ... [详细]
  • 用阿里云的免费 SSL 证书让网站从 HTTP 换成 HTTPS
    HTTP协议是不加密传输数据的,也就是用户跟你的网站之间传递数据有可能在途中被截获,破解传递的真实内容,所以使用不加密的HTTP的网站是不 ... [详细]
  • Spark与HBase结合处理大规模流量数据结构设计
    本文将详细介绍如何利用Spark和HBase进行大规模流量数据的分析与处理,包括数据结构的设计和优化方法。 ... [详细]
  • MySQL 5.7 学习指南:SQLyog 中的主键、列属性和数据类型
    本文介绍了 MySQL 5.7 中主键(Primary Key)和自增(Auto-Increment)的概念,以及如何在 SQLyog 中设置这些属性。同时,还探讨了数据类型的分类和选择,以及列属性的设置方法。 ... [详细]
  • 本文介绍了 .NET 中用于线程间通信的工具 WaitHandle 及其子类 ManualResetEvent 和 AutoResetEvent,并详细解释了线程池的概念及其在优化资源利用方面的优势。 ... [详细]
  • 本书《.NET Core 2.* 开发者指南》是面向开发者的全面学习与实践手册,涵盖了从基础到高级的各个层面。书中详细解析了 .NET Core 的核心概念,包括如何创建 .NET Core 网站,并通过视频教程直观展示操作过程。此外,还深入探讨了 Startup 类的作用、项目目录结构的组织方式以及如何在应用中使用静态文件等内容。对于希望深入了解 .NET Core 架构和开发技巧的开发者来说,本书提供了丰富的实践案例和详尽的技术指导。 ... [详细]
  • 本文将深入探讨MySQL与MongoDB在游戏账户服务中的应用特点及优劣。通过对比这两种数据库的性能、扩展性和数据一致性,结合实际案例,帮助开发者更好地选择适合游戏账户服务的数据库方案。同时,文章还将介绍如何利用Erlang语言进行高效的游戏服务器开发,提升系统的稳定性和并发处理能力。 ... [详细]
author-avatar
刘小宝0201
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有