redis里面相关的小命令 fulshall:清空redis数据库,类似于mysql里面的drop database;
一. 内存中存储数据(内存级数据库)
redis相比MySQL的优势:MySQL数据库最大的问题在于访问速度是比较慢的(很多互联网产品中,对于性能要求是很高的)。redis作为数据库使用,定性的角度来看是很快的,但是很难定量去衡量。
redis相比MySql的劣势:存储空间是有限的(内存的空间毕竟是少的)。
二. cache
三. redis的初心
Redis(Remote Dictionary Server)是一个基于客户端-服务器架构的存储数据的中间件。它是一种内存数据库,属于NoSQL(非关系型数据库)的一种,可用于作为数据库,缓存/会话存储,消息队列。它通常被用作中间缓存层,将频繁访问的数据存储在内存中,从而大幅提升读取性能。上文所说的主从分离/冷热分离架构中的缓存服务器就可以用Redis来实现,以提高热点数据的读取性能
1.键值存储:Redis使用简单的键值对**(K-V)数据模型**。每个键都与一个唯一的值相关联,通过键可以快速访问和操作对应的值。
2.内存存储:Redis将数据保存在内存中,以实现高速的读写操作(还引入了IO多路复用,一个线程管理多个socket)。这使得Redis能够实现非常低延迟和高吞吐量的数据访问
3.可编程的:可直接通过简单的交互式命令进行操作,也可通过脚本的方式,批量执行操作
4.可扩展:Redis提供了一组API,在原有的功能上进行扩展(以支持更多的数据结构,命令),通过几个语言编写Redis扩展,本质上是一个动态链接库(windows:dll Linux:.so)
5.持久化与备份:提供持久化功能,将数据写入磁盘或其他持久存储介质。此外,一些RDS还支持数据备份和恢复功能,以防止数据丢失
6.支持集群:支持水平扩展(类似于分库分表),将数据分片到多个节点上,以提高存储和处理能力
7.高可用性:Redis支持主从复制(Master-Slave Replication)和哨兵(Sentinel)机制,以提供数据的高可用性和容错能力。通过配置主从复制和哨兵节点,Redis可以实现自动故障恢复和故障转移
1.通过数据结构在内存当中存储数据
表
的方式来存储组织数据的,它是关系型数据库键值对
的方式来存储组织数据的,它是非关系型数据库2.可编程的
3.可拓展性
4.持久化
5.集群
6.高可用 => 冗余 / 备份
1.因为redis数据存储到内存当中,就比访问硬盘的数据库要快很多
2.redis的核心功能都是比较简单的逻辑,都是比较简单的操作内存的数据结构,并且redis是单线程模型,避免了不必要的线程竞争开销
3.从网络角度上,处理网络IO的时候,redis使用了IO多路复用的方式(epoll),使用一个线程管理很多个socket
4.使⽤了单线程,预防了多线程可能产⽣的竞争问题,减少了不必要的线程之间的竞争开销
5.redis是使用C语言实现的,距离”操作系统更近,执⾏速度相对会更快 【但是MySQL也是用C语言实现的,但是MySQL比redis慢,在同样都是C语言实现的前提下,很难说是因为redis基于C语言实现的所以redis执行速度更快】
1.实时的数据存储(Real-time data store),可以将 Redis 当作数据库。适用于对性能要求高的业务场景
快
,如果把redis作为数据库,那么此时redis存储的是全量数据,数据不能随便丢失2.作为缓存/会话存储(Caching & session storage),MySql存储数据空间大,但是读取速度慢,满足不了缓存的要求,所以可以将热点数据放到redis当中
例子:会话存储
会话存储时,使用cookie用来存储用户信息的身份标识(sessionId) => 存储在浏览器这边的身份标识,但是还需要session配合 => 存储在应用服务器当中的
如果在应用服务器当中保存会话信息
此时导致的问题:当客户端通过负载均衡器访问到服务器,进行登录操作,登录成功之后,在服务器当中生成一个session会话信息,但是当客户端再次访问服务器的时候,通过负载均衡器可能会将该请求派发到其它服务器当中,而该服务器可能并没有该用户的会话信息
解决办法:
1.更改负载均衡算法,将同一个用户的请求始终打到同一个机器上
2.将会话数据单独放到一台机器上进行存储,好处是:如果应用程序重启了,会话并不会丢失
Redis真正存储了用户信息。无论负载均衡器将登录请求分担给哪个应用服务器,都能从Redis中获取到会话
3.消息队列(服务器)(Streaming & messaging),可以实现网络版的生产者-消费者模型(优势:解耦合;削峰填谷)
注意:由于是使用内存来存储数据,不能使用Redis存储大规模数据,考虑使用其它数据库
场景1:排行榜系统
排⾏榜系统⼏乎存在于所有的⽹站,例如按照热度排名的排⾏榜,按照发布时间的排⾏榜,按照各种复杂维度计算出的排⾏榜,Redis提供了列表和有序集合的结构,合理地使⽤这些数据结构可以很⽅便地构建各种排⾏榜系统
场景2:计数器应用
计数器在⽹站中的作⽤⾄关重要,例如视频⽹站有播放数、电商⽹站有浏览数,为了保证数据的实时性,每⼀次播放和浏览都要做加1的操作,如果并发量很⼤对于传统关系型数据的性能是⼀种挑战。Redis天然⽀持计数功能⽽且计数的性能也⾮常好,可以说是计数器系统的重要选择
场景3:社交网络
赞?踩、粉丝、共同好友/喜好、推送、下拉刷新等是社交⽹站的必备功能,由于社交⽹站访问量通常⽐较⼤,⽽且传统的关系型数据不太合适保存这种类型的数据,Redis提供的数据结构可以相对⽐较容易地实现这些功能
站在数据规模的⻆度看,数据可以分为⼤规模数据和⼩规模数据。Redis的数据是存放在内存中的,虽然现在内存已经⾜够便宜,但是如果数据量⾮常⼤,例如每天有⼏亿的⽤⼾⾏为数据,使⽤Redis来存储的话,基本上是个⽆底洞,经济成本相当⾼
站在数据冷热的⻆度,数据分为热数据和冷数据,热数据通常是指需要频繁操作/访问的数据,反之为冷数据。如果将这些冷数据放在Redis上,基本上是对于内存的⼀种浪费,但是对于⼀些热数据可以放在Redis中加速读写,也可以减轻后端存储的负载
Redis属于一种NoSQL数据库
1.数据模型
2.拓展性
3.强一致性和灵活性
4.查询复杂性
如果需要强大的事务支持、复杂查询和一致性保证,以及已经有现有的SQL架构和工具链,那么MySQL是一个不错的选择。对于大规模数据、高并发和灵活的数据模型,以及更容易进行水平扩展的需求,可以考虑使用NoSQL数据库。也可以在特定场景中将两者结合使用,如使用MySQL作为主数据库,然后使用NoSQL数据库作为辅助或缓存数据库来提升性能。
centos启动redis命令:sudo redis-server /etc/redis/redis.conf
如果想要关闭redis:使用netstat或者ps查询得到redis的服务器的进程id,再进行kill即可
注意:修改了配置文件,需要重启redis才能生效
Ubuntu:
service redis-server restart
service redis-server status
Centos:
通过netstat
或者ps
查询redis服务器的进程id,然后再使用kill杀掉该进程
Redis也是一个基于客户端-服务器(Client-Server)架构的内存数据库,自带的命令行客户端,可通过命令直接启动
redis-cli -h <host> -p <port>
是Redis服务器的主机名或IP地址,
是Redis服务器监听的端口号。由于当前我们连接的服务器位于127.0.0.1
,端口默认使用的是6379
,所以可以直接使用redis-cli
来启动Redis客户端
注意:redis的“快”是相对于mysql这类关系型数据库的,如果是直接和内存中的操作变量相比就没有优势甚至更慢了
比如针对单机系统,应用程序要存储K-V结构的数据,那么使用redis还是map更好呢?引入redis,一定是比直接使用map更慢的,因为map是直接操作内存,redis是先通过网络再操作内存的
/usr/bin/redis-benchmark
/usr/bin/redis-check-aof -> /usr/bin/redis-server
/usr/bin/redis-check-rdb -> /usr/bin/redis-server
/usr/bin/redis-cli
/usr/bin/redis-sentinel -> /usr/bin/redis-server
/usr/bin/redis-server
/usr/libexec/redis-shutdown
redis-server
是Redis服务器程序 , redis-check-aof
是修复AOF⽂件⽤的⼯具 ,redis-check-rdb
是修复RDB⽂件的⼯具,redis-sentinel
是Redis哨兵程序,redis-benchmark
⽤于对Redis做性能基准测试的⼯具,redis-shutdown
是⽤于停⽌Redis的专⽤脚本
配置文件
/etc/redis-sentinel.conf 是Redis Sentinel的配置⽂件
/etc/redis.conf 是Redis服务器的配置⽂件
持久化⽂件存储⽬录
/var/lib/redis/ Redis持久化⽣产的RDB和AOF⽂件都默认⽣成于该⽬录下