redis是基于内存的KV型数据库,它的出现以及使用的根本目的在于解决数据库磁盘存储效率的瓶颈问题!
介绍
redis是非关系型的不存在表的kv型数据库(我们可以简单的把它理解成一个大字典)
windows环境下的安装和配置密码和配置远程连接请点击看上篇文章
特点:
1.开源,使用c编写,基于内存且支持持久化
2.支持的数据类型丰富,字符串string,散列hashes,列表lists,集合sets,有序集合sorted sets
3.支持多种编程语言
4.单进程,单线程
亮点:
1.持久化:
可以将内存中的数据保存到磁盘中,保证数据安全,进行数据备份。
2.过期键功能:
为键设置一个过期时间,让它在指定时间内删除,可以减少过度资源对内存的占有
3.事务功能:
弱事务功能
什么是事务?
几个操作要么全部成功,要么全部失败的特性,我们称之为事务
怎么理解redis的弱事务性?
redis的事务存在两种情况:
如果在redis调用exec之前发生错误,如内存不够、命令语法错误等,会回滚事务
如果在redis调用exec之后发生错误,那么使用错误的命令不执行,但是队列中使用正确的命令依然执行
什么是弱事务性?
从上面两种情况可以看出,redis只针对一部分情况回滚,而对于其他错误的情况不回滚的特性,称为弱事务性
为什么redis支持弱事务性而不完全支持事务?
redis官方的解释是,上述第二种情况属于编程错误。即使redis回滚了它,同样的错误依然会发生。所以这种情况更应该的是去DEBUG。另外,redis不支持这种情况的回滚有利于redis保持简单且快速
4.主从复制:
如何让redis保持高可用的状态,官方提供主从搭建方案
主从复制原理
从总体上来说,Redis主从复制的策略就是:当主从服务器刚建立连接的时候,进行全量同步;全量复制结束后,进行增量复制。当然,如果有需要,slave 在任何时候都可以发起全量同步。
Redis为什么需要主从复制?
使用Redis主从复制的原因主要是单台Redis节点存在以下的局限性:
(1)Redis虽然读写的速度都很快,单节点的Redis能够支撑QPS大概在5w左右,如果上千万的用户访问,Redis就承载不了,成为了高并发的瓶颈。
(2)单节点的Redis不能保证高可用,当Redis因为某些原因意外宕机时,会导致缓存不可用
(3)CPU的利用率上,单台Redis实例只能利用单个核心,这单个核心在面临海量数据的存取和管理工作时压力会非常大。
5.Sentinel哨兵:
在搭配了基础的主从结构后,哨兵可以做到自动故障的转移
在 Redis 主从复制模式中,因为系统不具备自动恢复的功能,所以当主服务器(master)宕机后,需要手动把一台从服务器(slave)切换为主服务器。在这个过程中,不仅需要人为干预,而且还会造成一段时间内服务器处于不可用状态,同时数据安全性也得不到保障,因此主从模式的可用性较低,不适用于线上生产环境。
Redis 官方推荐一种高可用方案,也就是 Redis Sentinel 哨兵模式,它弥补了主从模式的不足。Sentinel 通过监控的方式获取主机的工作状态是否正常,当主机发生故障时, Sentinel 会自动进行 Failover(即故障转移),并将其监控的从机提升主服务器(master),从而保证了系统的高可用性。
对比其他数据库
1.MySQL:关系型数据库,表格,基于磁盘,慢
2.MongoDB:键值对文档型数据库,基于磁盘,类似于json
应用场景
1.缓存
作为缓存存储的介质,查询优先走redis,没有数据的情况下,再去走MySQL,可以有效的降低MySQL的查询压力
2.并发计数
由于redis本身是单进程单线程的,可以有效的解决并发请求,技术场景,例如微博点赞
3.排行榜
各大实时排行榜
4.生产者消费者模型
当生产者消费者模型的中间层,生产者将任务分给redis,消费者从redist获取任务
基本命令
select number
切换数据库(默认redis有16个数据库,0-15为具体的数据库编号,默认进入redies为db0)
info(#info cpu)
查看redis服务的整体情况
keys
查找所有符合给定模式的key
例:
KEYS * 匹配数据库中的所有的key
KEYS h?llo 匹配 hello,hallo,hxllo 等
KEYS h*llo 匹配 hllo,heeello 等
正式环境中,请勿使用此命令,由于redis单进程单线程,当key很多的时候,可能阻塞redis
type key
返回当前key的数据类型
exists key
是否存在,返回1/0
del key
删除key
rename key newkey
重命名
fiushdb
清除当前所在数据库的数据
flushall
清除所有数据库的数据