Redis概述及安装、使用和管理(烦心事永久打烊)

一、NoSQL非关系型数据库

1.NoSQL概述

NoSQL (Not Only SQL),是非关系型数据库的总称。除了主流的关系型数据库外的数据库,都认为是非关系型。

不需要预先建库建表定义数据存储表结构,每条记录可以有不同的数据类型和字段个数(比如微信群聊里的文字、图片、视频、音乐等)。

主流的 NoSQL数据库有 Redis、MongBD、Hbase、Memcached、ElasticSearch、TSD等。

2.关系型数据库和非关系型数据库区别

(1)数据存储方式不同

关系型和非关系型数据库的主要差异是数据存储的方式。

SQL数据库天然就是表格式的,因此存储在数据表的行和列中。数据表可以彼此关联协作存储,也很容易提取数据。

NoSQL型数据不适合存储在数据表的行和列中,而是大块组合在一起。非关系型数据通常存储在数据集中,就像文档、键值对或者图结构。你的数据及其特性是选择数据存储和提取方式的首要影响因素。

(2)扩展方式不同

关系型和非关系型数据库最大的差别是在扩展方式上,要支持日益增长的需求当然要扩展。

SQL数据库是纵向扩展,也就是说提高处理能力,使用速度更快速的计算机,这样处理相同的数据集就更快了。因为数据存储在关系表中,操作的性能瓶颈可能涉及很多个表,这都需要通过提高计算机性能来克服。虽然sql数据库有很大扩展空间,但最终肯定会达到纵向扩展的上限。

NoSQL数据库是横向扩展的。因为非关系型数据存储天然就是分布式的,NoSQL数据库的扩展可以通过给资源池添加更多普通的数据库服务器:节点)来分担负载。

(3)对事务性的支持不同

如果数据操作需要高事务性或者复杂数据查询需要控制执行计划,那么传统的SQL数据库从性能和稳定性方面考虑是你的最佳选择。

SQL数据库支持对事务原子性细粒度控制,并且易于回滚事务。

虽然NoSQL数据库也可以使用事务操作,但稳定性方面没法和关系型数据库比较。所以它们真正闪亮的价值是在操作的扩展性和大数据量处理方面。

3.非关系型数据库使用场景

可用于应对web2.0纯动态网站类型的三高问题(高并发、高性能、高可用)。

  • High performance——对数据库高并发读写需求;
  • Huge Storage——对海量数据高效存储与访问需求;
  • High Scalability and High Availability——对数据库高可扩展性与高可用性需求。

关系型数据库和非关系型数据库都有各自的特点与应用场景,两者的紧密结合将会给web2.0的数据库发展带来新的思路:
关系型数据库关注在关系和对数据的一致性保障上;
非关系型数据库关注在存储和高效率上。
例如:在读写分离的Mysql数据库环境中,可以把经常访问的数据存储在非关系型数据库中,提升访问速度。

二、Redis概述

1.简介

Redis(远程字典服务器)是一个开源的、使用c语言编写的 NoSQL数据库。

Redis基于内存运行并支持持久化,采用key-value(键值对)的存储形式,是目前分布式架构中不可或缺的一环。

Redis服务器程序是单进程模型,也就是在一台服务器上可以同时启动多个Redis进程,Redis的实际处理速度则是完全依靠主进程的执行效率。

2.优点

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

支持丰富的数据类型:支持 key-value、Strings、Lists、Hashes、Sets 及 Sorted Sets等数据类型操作。

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

原子性:Redis 所有操作都是原子性的。

支持数据备份:即支持 master-salve 模式的数据备份。

3.Redis读写快的原因

Redis基于内存运行,避免了磁盘I/O等耗时操作。

Redis命令处理的核心模块为单线程,减少了锁竞争,以及频繁创建线程和销毁线程的代价,减少了线程上下文切换的消耗。

注:在Redis 6.0 中新增加的多线程也只是针对处理网络请求过程采用了多线性,而数据的读写命令,仍然是单线程处理的。

采用了I/O多路复用机制,减少网络I/O消耗,大大提升了并发效率。

4.适用场景

Redis作为基于内存运行的数据库,是一个高性能的缓存,一般应用在session缓存、队列
、排行榜、计数器、最近最热文章、最近最热评论、发布订阅等。

Redis 适用于数据实时性要求高、数据存储有过期和淘汰特征的、不需要持久化或者只需
要保证弱一致性、逻辑简单的场景。

三、Redis安装配置

#将安装包放在/opt下
cd /opt
tar xf redis-5.0.7.tar.gz
cd redis-5.0.7/
 
#编译
make
 
#安装到指定目录
make install PREFIX=/usr/local/redis

还需要到安装包中的utils/下,执行install_server.sh

在这里插入图片描述
再在配置文件/etc/redis/6379.conf中修改监听地址

在这里插入图片描述

四、Redis的使用

在这里插入图片描述

1.命令行工具redis-cli(登录)

在这里插入图片描述

2.测试工具redis-benchmark(测试)

redis-benchmark [选项] [选项值]
                                -h        指定服务器主机名
                                -p        指定服务器端口
                                -s        指定服务器 socket
                                -c        指定并发连接数
                                -n        指定请求数
                                -d        以字节的形式指定SET/GET值的数据大小
                                -k        1代表keep alive保持连接 ;0代表reconnect重连
                                -r         SET、GET、INCR 使用随机key ;SADD使用随机值
                                -P        通过管道传输<numreg>请求
                                -q         强制退出redis 仅显示query/sec值
                                --csv    以CSV格式(,分割字段的文本)输出
                                -l          生成循环,永久执行测试
                                -t          仅运行以逗号分隔的测试命令列表
                                -I          Idle模式(仅打开N个idle连接并等待)

#向IP地址为192.168.109.133、端口为6379的Redis服务器发送100个并发连接与100000个请求测试性能
redis-benchmark -h 192.168.116.10 -p 6379 -c 100 -n 100000

在这里插入图片描述

#测试存取大小为100字节的数据包的性能
redis-benchmark -h 192.168.116.10 -p 6379 -q -d 100

在这里插入图片描述

#测试本机上Redis服务在进行set与lpush操作时的性能
redis-benchmark -t set,lpush -n 100000 -q

在这里插入图片描述

3.redis命令的使用

(1)存入键值对

SET 键 值

在这里插入图片描述

(2)获取键的值

GET 键

在这里插入图片描述

(3)判断键的数据类型(redis默认数据类型为string)

TYPE 键

在这里插入图片描述
Redis中的五大数据类型

在这里插入图片描述

(4)查看键

KEYS * 查看所有键
KEYS 通配符 查看通配符匹配的指定键

在这里插入图片描述

(5)判断键是否存在

EXISTS 键

在这里插入图片描述

(6)删除键

DEL 键

在这里插入图片描述

(7)修改键名

RENAME 原键名 新键名
若要更改的新键名已存在,则会覆盖此键名的值(建议改名前先exists一下)或使用:
RENAMENX 原键名 新键名 //修改前判断新键名是否存在,存在则返回0,不存在则返回1并执行修改

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(8)统计键数量

DBSIZE

在这里插入图片描述

(9)设置密码

CONFIG SET REQUIREPASS 密码
在这里插入图片描述

AUTH 密码 登入后做验证
在这里插入图片描述

(10)查看当前密码

CONFIG GET REQUIREPASS
在这里插入图片描述

(11)删除密码

CONFIG SET REQUIREPASS ‘’

在这里插入图片描述

4.Redis多库常用命令

Redis 支持多数据库,Redis默认情况下包含16个数据库,数据库名称是用数字0-15来依次命名的(默认登入是0号数据库)。多数据库相互独立,互不干扰。

(1)切换数据库

SELECT 库号
在这里插入图片描述

(2) 将数据移动到指定库

MOVE 键 库号
在这里插入图片描述

五、Redis性能管理

1.查看内存使用

info memory
在这里插入图片描述

mem fragmentation _ratio #内存碎片率 = used memory_rss / used memoryused
memory _rss #是Redis向操作系统申请的内存。
used memory #是Redis中的数据占用的内存。
used memory peak # redis内存使用的峰值。

2.清理内存碎片

(1)内存碎片如何产生

Redis内部有自己的内存管理器,为了提高内存使用的效率,来对内存的申请和释放进行管理。

Redis中的值删除的时候,并没有把内存直接释放,交还给操作系统,而是交给了Redis内部有内存管理器。

Redis中申请内存的时候,也是先看自己的内存管理器中是否有足够的内存可用。

Redis的这种机制,提高了内存的使用率,但是会使Redis中有部分自己没在用,却不释放的内存,导致了内存碎片的发生。

(2)内存碎片率

跟踪内存碎片率对理解Redis实例的资源性能是非常重要的

  • 内存碎片率在1到1.5之间是正常的,这个值表示内存碎片率比较低,也说明Redis没有发生内存交换。
  • 内存碎片率超过1.5,说明Redis消耗了实际需要物理内存的150%,其中50%是内存碎片率。
  • 内存碎片率低于1的,说明Redis内存分配超出了物理内存,操作系统正在进行内存交换。需要增加可用物理内存或减少Redis内存占用。

(3)清理内存碎片

Redis版本4.0以下

    需要在 redis-cli工具上输入shutdown save 命令,让Redis数据库执行保存操作并关闭Redis服务,再重启服务器。Redis服务器重启后,Redis会将没用的内存归还给操作系统,碎片率会降下来。

Redis4.0版本以上

    执行 config set activedefrag yes,开启自动碎片清理;

    执行 memory purge,手动碎片清理。

3.内存使用率

    redis实例的内存使用率超过可用最大内存,操作系统将开始进行内存与swap空间交换,导致性能大大降低。

避免内存交换发生的方法

  • 针对缓存数据大小选择安装 Redis实例
  • 尽可能的使用Hash数据结构存储
  • 设置key的TTL生命周期(setex 键名 时间(s) 值)

4.内回收key

内存清理策略,保证合理分配redis有限的内存资源。默认情况下回收策略是禁止删除,当达到设置的最大阀值时,需选择一种key的回收策略。

配置文件中修改maxmemory-policy属性值
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值