Redis学习

基本概念

Redis (Remote Dictionary Server),远程字典服务
是一个开源的 使用 ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型Key-Value 数据库,并提供了多种语言的API。

Redis 会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了 maser-slave(主从)同步

Redis 免费 并 开源,是如今最热门的 NoSQL 技术之一,也被称之为结构化数据库

Redis 的应用

  • 内存存储、持久化,(内存中是断电即失,所以持久化很重要)
  • 效率高,可以用于高速缓存
  • 发布订阅系统
  • 地图信息分析
  • 计时器、计数器
  • ……

Redis 中文网
Redis学习_第1张图片

使用Redis

网页版 Try Redis

使用Redis客户端进行连接
redis-cli -p 6379
> PING
PONG

查看Redis 进程是否开启

ps -ef|grep redis

Linux 基本命令中,
ps:查看当前系统正在执行的进程信息
ps -au:详细显示进程信息
ps -ef:查看父进程的信息
ps -ef|grep 进程名称:过滤进程信息
[ |:管道符;grep:查找文件中符合条件的字符串]

关闭Redis服务

> shutdown
> exit

基础知识

Redis 默认有16个数据库,默认使用的是第0个,可以使用 select 切换数据库

> select 9   #切换数据库
OK
> DBSIZE     #查看数据库大小

查看数据库中所有的key

> key *

清空当前数据库 FLUSHDB
清空全部数据库的内容 FLUSHALL

Redis 是单线程的。

redis 是将所有的数据全部放在内存中,所以说使用单线程去操作效率是最高的。
多线程(CPU上下文切换 是 很耗时的操作),对于内存系统来说,如果没有上下文切换效率是很高的。

Redis-Key

> EXISTS name  # 判断当前key是否存在
> MOVE name    # 移除当前key
> EXPIRE name  seconds     # 设置key的过期时间,单位是秒
> ttl name     #查看当前key的剩余时间
> type name    #查看当前key的类型

更多命令官方文档很方便查询

单线程模式

CPU并非瓶颈:多线程模型主要是为了充分利用多核CPU,让线程在IO阻塞时被挂起,让出CPU使用权,交给其他线程,充分提高CPU的使用率。但是这个场景在Rdeis中并不明显,因为CPU并不是Rdeis的瓶颈,Redis的所有操作都是基于内存的,处理事件极快,因此使用多线程 来切换线程提高CPU利用率的需求并不强烈。

内存才是瓶颈:单个Rdeis 实例对单核的利用率已经很好了,但是Redis的瓶颈在于内存。

复杂的Value类型:Redis 有丰富的数据结构,并不是简单的Key-Value型的NoSQL,其中常用的 Hash、Zset、List等结构在value很大时,CURD的操作会很复杂,如果采用多线程模式
在进行相同key操作时就需要加锁来进行同步,这样就可能造成死锁问题。

集群化扩展:目前的机器都是双核的,但是内存一般128GB/64GB ,而Redis 在使用内存60%以上稳定性就不如50%的性能高,因此,在数据较大时,当Redis作为主存,就必须使用多台机器构建集群化的Redis数据库系统,这样以来Redis的单线程模式又被集群化的处理所扩展了。

其它:单线程无论从开发和维护都比多线程要容易很多,并且也能提高服务的稳定性,无锁化处理让单线程的Redis在开发和维护上都具备相当大的优势。

Redis 持久化

通俗讲持久化就是将内存中的数据写入非易失介质中,比如机械磁盘和SSD(固态硬盘)。
在服务器发生宕机 时,作为内存数据库Redis里的所有数据将会丢失,因此Redis提供了持久化两个利器:RDBAOF

RDB:将数据库快照以二进制的方式保存到磁盘中。
AOF:以协议文本方式,将所有对数据库进行过写入的命令和参数记录到AOF文件,从而记录数据库的状态。

集群

Redis学习_第2张图片
Redis学习_第3张图片
随着 Redis 客户端越来越多,一台Redis 不够,那就再多加几台—— 集群
Redis学习_第4张图片
图片来源

客户端的请求会通过 负载均衡算法,分散到各个Redis 服务器上,通过集群,实现了两个特性:

  • 扩大缓存容量
  • 提升吞吐量

你可能感兴趣的:(Redis)