redis是非关系型数据库的一种

  • 关系数据库与非关系型数据库
  • 非关系型数据库产生的背景
  • 关系型数据库和非关系型数据库得区别
  • redis介绍
  • redis优点
  • redis使用场景
  • 安装redis
  • redis命令工具
  • redis-benchmark 测试工具
  • redis-cli 远程登录的命令行工具
  • 数据库常用命令
    • 重命名
  • Redis 多数据库常用命令
  • 性能管理
    • 内存碎片率
    • 内存使用率
    • 查看内存使用
    • 内回收key

关系数据库与非关系型数据库

关系型数据库( sql)
关系型数据库是一个结构化的数据库,创建在关系模型(二维表格模型)基础上(E-R图),一般面向于SQL语句 (标准数据查询语言)就是一种基于关系型数据库的语言,用于执行对关系型数据库中数据的松主流的关系型数据库包括Oracle、MysQL、sQL Server、Microsoft Access、DB2等。
关系型数据库:主要以二维表结构方式存储数据/实体属性,同时相互关联的一种数据库类型。
非关系型数据库(nosql )
NosQL(NosQL=Not Only sQL),意思是"不仅仅是sQL",是非关系型数据库的总称。除了主流的关系型数据库外的数据库,都认为是非关系型。
主流的NosQL数据库有Redis、MongBD、Hbase、Memcached Postgresql (pg)等。

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

可用于应对Web2.0纯动态网站类型的已高间题。
高并发读写需求,
海量数据高效存储与访问需求,
对数据库高扩展性和高可用性需求。

关系型数据库和非关系型数据库得区别

1,数据存储方式不同
关系型:依赖于关系模型E-R图,同时以表格的方式存储数据。
非关系型:除了以表格得方式储存数据外,还会以大块的形式组合在一起进行存储数据。
2,扩展方式不同(最大差异
关系型:要支持更多并发量,SQL数据库是纵向扩展,也就是说提高处理能力,使用速度更快速的计算机,这样处理相同的数据集就更快了。因为数据存储在关系表中,操作的性能瓶颈可能涉及很多个表,这都需要通过提高计算机性能来克服。虽然SQL数据库有很大扩展空间,但最终肯定会达到纵向扩展的上限。
非关系型:而NoSQL数据库是横向扩展的。因为非关系型数据存储天然就是分布式的,NoSQL数据库的扩展可以通过给资源池添加更多普通的数据库服务器(节点) 来分担负载。
3、对事务性的支持不同
关系型:特别适合高事务性要求和需要控制执行计划的任务。
非关系:此处会稍显弱势,其价值点在于高扩展性和大数据量处理方面
4,关系数据库:保存位置 磁盘。
非关数据库(内存/缓存数据库) :保存的位置是缓存/内存(效率、速度块)特殊的是redis, 因为redis可以将内存中的数据保存在磁盘中。
5,非关系型数据库不需要手动建数据库和集合(表)。

redis介绍

Redis是一个开源的、使用C语言编写的NoSQL数据库。
Redis基于内存运行并支持持久化(支持存储在磁盘),采用key-value(键值对)的存储形式,是目前分布式架构中不可或缺的一环。
Redis服务器程序是单进程模型
一台redis服务器可以同时启动多个redis进程,redis得实际处理速度完全依赖于主进程得执行效率。若在服务器上只运行一个redis进程,当多个客户端同时访问时,服务器处理能力会有一定程度下降:若开启多个redis进程虽然会提高处理并发的能力,但也会给cpu造成很大压力。
建议开启2个redis,既能备份,又能提高处理并发的能力还不给cpu造成过分大压力。

redis优点

1,和MySQL相比具有极高的读写速度,
2,和其她非关数据库相比支持丰富的数据类型
例如:
string 字符串(可以为证书,浮点,字符)
list 列表(实现队列,元素不唯一,先入先出原则)
set 集合 (各不相同的元素)
set 集合
ordered sets 有序集合
hash 散列值(hash的key必须是唯一的)
3,支持数据持久化:可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用
4、支持数据备份}即master-salve 模式的数据备份。
5、原子性:Redis所有操作都是原子性的。

redis使用场景

缓存高热数据
获取最新N个数据的操作
排行榜应用
计数器应用
存储关系
实时分析系统
日志记录

安装redis

//
[root@localhost ~]# yum -y installl gcc gcc-c++ make
[root@localhost ~]# cd /opt
[root@localhost ~]# tar zxvf redis-5.0.5.tar.gz -C
[root@localhost opt]# cd redis-5.0.7
[root@localhost redis-5.0.7]# make && make PREFIX-/usr/local/redis install
[root@localhost redis-5.0.7]# cd utils
[root@localhost utils]# ./install_server.sh
一直回车,但是在可执行文件路径这里要改成/usr/local/redis/bin/redis-server如果本来就是,就不改。
[root@localhost utils]# ln -s /usr/local/redis/bin/* /usr/local/bin/  ##可执行文件放到路径环境变量,便于系统识别

当install_server.sh脚本运行完毕,redis服务就已经启动了,默认监听端口为6379





redis命令工具

redis-benchmark 测试工具

redis-benchmark是官方自带的Redis性能测试工具,可以有效的测试Redis服务的性能

参数 解释
-h 指定服务器主机名
-p 指定服务器端口
-s 指定服务器socket
-c 指定并发连接数
-n 指定请求数
-d 以字节的形式指定 SET/GET值的大小
-k 1=keep alive 0=reconnect
-r SET/GET/INCR 使用随机key,SADD使用随机值
-p 通过管道传输请求
-q 强制退出redis,仅显示query/sec值
–csv 以CSV格式输出
-l 生成循环,永久执行测试
-t 仅运行以逗号分隔的测试命令列表
-I Idle模式,仅打开N个idle连接等待

redis-cli 远程登录的命令行工具

redis-cli的全程即redis-client,表示以客户端的身份登录
语法:redis-cli -h host -p port -a password
若不添加任何选项,则表示用127.0.0.1:6379 连接本机上的redis数据库

//
-h                    指定远程主机
-p                    指定redis服务器的端口号
-a                    指定密码,未设置数据库密码可以省略-a选项

向ip地址为192.168.226.128,端口为6379的redis服务器发送100个并发连接与10000请求测试性能

//
[root@localhost ~]# redis-benchmark -h 192.168.142.143 -p 6379 -c 100 -n 10000

测试存取大小为100字节的数据包的性能

//
[root@localhost ~]# redis-benchmark -h 192.168.142.143 -p 6379 -q -d 100

测试本机上redis服务在进行set与lpush操作时的性能

//[root@localhost ~]# redis-benchmark -t set,lpush -n 10000 -q

数据库常用命令

set:存放数据,命令格式set key value
get: 获取数据,命令格式get key


重命名

使用rename命令进行重命名时,无论目标key是否存在都进行重命名,且源key的值会覆盖目标key的值。
在实际使用过程中,建议先用exists命令查看目标key是否存在,然后再决定是否执行rename命令,以避免覆盖重要数据

//
192.168.142.143:6379> rename k1 k2  //k2不存在
OK
192.168.142.143:6379> get k1
(nil)
192.168.142.143:6379> get k2
"1"
192.168.142.143:6379> renamenx k2 k11   //k11存在
(integer) 0
192.168.142.143:6379> get k2
"1"
192.168.142.143:6379> get k11
"2"
192.168.142.143:6379> 

renamenx 命令的作用是对已有key进行重命名,并检测新名是否存在,如果目标key存在则不进行重命名。(不覆盖)
命令格式:renamenx 源key 目标key

//
192.168.142.143:6379> get school
"lisi"
192.168.142.143:6379> get school01
"zahngsan"192.168.142.143:6379> renamenx school school01
(integer) 0
192.168.142.143:6379> get school
"lisi"
192.168.142.143:6379> get school01
"zahngsan"
192.168.142.143:6379> 

使用config set requirepass password 命令设置密码
使用config get requirepass 命令查看密码(一旦设置密码,必须先验证通过密码,否则所有操作不可用)

删除密码

//
192.168.142.143:6379> config set requirepass '' ## 将密码设置为空
OK

Redis 多数据库常用命令

Redis 支持多数据库,Redis默认情况下包含16个数据库,数据库名称使用数字0-15来依次命名的(多数据库相互独立,互不干扰)
3.1 多数据间切换
命令格式:select 序号
使用redis-cli连接redis数据库后,默认使用的是序号为0的数据库

性能管理

内存碎片率

操作系统分配的内存值used_memory_rss除以Redis使用的内存值used_memory计算得出内存碎片是由操作系统低效的分配/回收物理内存导致的(不连续的物理内存分配)
跟踪内存碎片率对理解Redis实例的资源性能是非常重要的:

内存碎片率稍大于1是合理的,这个值表示内存碎片率比较低
内存碎片率超过1.5,说明Redis消耗了实际需要物理内存的150号,其中50号是内存碎片率。需要在redis-cli工具上输入shutdown save命令,并重启Redis服务器。
内存碎片率低于1的,说明Redis内存分配超出了物理内存,操作系统正在进行内存交换。需要增加可用物理内存或减少Redis内存占用

内存使用率

redis实例的内存使用率超过可用最大内存,操作系统将开始进行内存与swap空间交换
避免内存交换发生的方法:

针对缓存数据大小选择安装Redis实例(云平台里面使用RDS服务,ECS云主机选择内存、缓存型配置)
尽可能的使用Hash数据结构存储
设置key的过期时间

查看内存使用

//
192.168.142.143:6379> info memory
# Memory
used_memory:904216
used_memory_human:883.02K
used_memory_rss:13340672
used_memory_rss_human:12.72M
used_memory_peak:7054672
used_memory_peak_human:6.73M
used_memory_peak_perc:12.82%
used_memory_overhead:841390
used_memory_startup:791400
used_memory_dataset:62826
used_memory_dataset_perc:55.69%
allocator_allocated:1122120
allocator_active:1486848
allocator_resident:10825728
total_system_memory:3954188288
total_system_memory_human:3.68G
used_memory_lua:37888
used_memory_lua_human:37.00K
used_memory_scripts:0
used_memory_scripts_human:0B
number_of_cached_scripts:0
maxmemory:0
maxmemory_human:0B
maxmemory_policy:noeviction
allocator_frag_ratio:1.33
allocator_frag_bytes:364728
allocator_rss_ratio:7.28
allocator_rss_bytes:9338880
rss_overhead_ratio:1.23
rss_overhead_bytes:2514944
mem_fragmentation_ratio:15.45
mem_fragmentation_bytes:12477472
mem_not_counted_for_evict:0
mem_replication_backlog:0
mem_clients_slaves:0
mem_clients_normal:49694
mem_aof_buffer:0
mem_allocator:jemalloc-5.1.0
active_defrag_running:0
lazyfree_pending_objects:0
192.168.142.143:6379> 

内回收key

保证合理分配redis有限的内存资源。
当达到设置的最大阀值时,需选择–种key的回收策略,默认情况下回收策略是禁止删除。
配置文件中修改maxmemory- policy属性值

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

什么是redis??相关推荐

  1. Spring AOP + Redis解决重复提交的问题

    Spring AOP + Redis解决重复提交的问题 用户在点击操作的时候,可能会连续点击多次,虽然前端可以通过设置按钮的disable的属性来控制按钮不可连续点击,但是如果别人拿到请求进行模拟,依 ...

  2. Redis问题——Error: 磁盘在使用中,或被另一个进程锁定。

    Redis出于对数据保护,默认只能本地客户端连接.远程连接就会出现以上错误.如何解决这一问题,看下: server -A,PC-A, 修改server-A的redis.conf:注释掉本地绑定: bi ...

  3. 实现 连续15签到记录_MySQL和Redis实现用户签到,你喜欢怎么实现?

    现在的网站和app开发中,签到是一个很常见的功能 如微博签到送积分,签到排行榜 微博签到 如移动app ,签到送流量等活动, 移动app签到 用户签到是提高用户粘性的有效手段,用的好能事半功倍! 下面 ...

  4. Redis 笔记(16)— info 指令和命令行工具(查看内存、状态、客户端连接数、监控服务器、扫描大key、采样服务器、执行批量命令等)

    Info 命令返回关于 Redis 服务器的各种信息和统计数值.通过给定可选的参数 section ,可以让命令只返回某一部分的信息. 1. 显示模块 server : 一般 Redis 服务器信息, ...

  5. Redis 笔记(15)— 管道 pipeline(客户端将批量命令打包发送用来节省网络开销)

    Redis 是一种基于客户端-服务端模型以及请求/响应协议的 TCP 服务.这意味着通常情况下一个请求会遵循以下步骤: 客户端向服务端发送一个查询请求,并监听 Socket 返回,通常是以阻塞模式,等 ...

  6. Redis 笔记(14)— 持久化及数据恢复(数据持久方式 RDB 和 AOF、数据恢复、混合持久化)

    1. 持久化 所谓持久化是指将数据从内存中以某种形式同步到硬盘中,在 Redis 重启后能够根据硬盘中的记录恢复数据.Redis 持久化有两种方式,分别为 RDB(redis data base) [ ...

  7. Redis 笔记(13)— scan 和 keys 寻找特定前缀key 字段(命令格式、使用示例、定位大key)

    1. keys Redis 提供了一个简单暴力的指令 keys 用来列出所有满足特定正则字符串规则的 key. 127.0.0.1:6379> keys * (empty array) 127. ...

  8. Redis 笔记(12)— 单线程架构(非阻塞 IO、多路复用)和多个异步线程

    Redis 使用了单线程架构.非阻塞 I/O .多路复用模型来实现高性能的内存数据库服务.Redis 是单线程的.那么为什么说是单线程呢? Redis 在 Reactor 模型内开发了事件处理器,这个 ...

  9. Redis 笔记(11)— 文本协议 RESP(单行、多行字符串、整数、错误、数组、空值、空串格式、telnet 登录 redis)

    RESP 是 Redis 序列化协议Redis Serialization Protocol 的简写.它是一种直观的文本协议,优势在于实现异常简单,解析性能极好. ​ Redis 协议将传输的结构数据 ...

  10. Redis 笔记(10)— 发布订阅模式(发布订阅单个信道、订阅信道后的返回值分类、发布订阅多个信道)

    1. 发布-订阅概念 发布-订阅 模式包含两种角色,分别为发布者和订阅者. 订阅者可以订阅一个或者若干个频道(channel): 而发布者可以向指定的频道发送消息,所有订阅此频道的订阅者都可以收到此消 ...

最新文章

  1. 「AI不惑境」数据压榨有多狠,人工智能就有多成功
  2. 网站响应慢的原因分析
  3. 卷积神经网络(CNN)在无人驾驶中的应用
  4. linux学习文档-1
  5. Android仿微信高效压缩图片(libjpeg)
  6. 科创板开户手续费要2万元,大家怎么看?
  7. 干货满满!10分钟看懂Docker和K8S(转)
  8. java shell排序_八大排序算法——希尔(shell)排序
  9. 多种系统负载100%方法(高可用测试、性能压测用)
  10. 基于蚁群算法的多配送中心的车辆调度问题的研究(Matlab代码实现)
  11. 74HC595芯片组成测试工具_流水灯
  12. 如何用elastic APM实现用户行为轨迹监控(User Journey Monitoring)
  13. 80211速率控制的研究
  14. 基于拉丁超立方抽样与自适应策略的改进鲸鱼优化算法
  15. Java 8之函数式编程(Function、Consumer、Supplier、Predicate)
  16. DM达梦数据库dminit使用手册
  17. DOM的readyState属性
  18. Matlab 公式大全
  19. Rainbow的站点流量统计分析
  20. 美团/叮咚/盒马/淘鲜达/百联到家autojs脚本学习案例

热门文章

  1. Linux进程是如何创建出来的?
  2. 身份证阅读器(新中新)写入受保护内存问题,已解决
  3. BERT生成能力改进:分离对话生成和对话理解
  4. 超级计算机多层网络,超级计算机多层体系结构的摘要和描述(2)
  5. OSChina 周一乱弹 ——月薪三万长的帅的为啥找不到女朋友
  6. 数据结构实验一_图书馆信息管理系统
  7. 2021-2027全球与中国激光波长计市场现状及未来发展趋势
  8. html5怎么插入psv,请问psv要怎么才能连接电脑进行文件传输?
  9. 如何提高沟通表达能力
  10. 1-计算机系统概述(CO)