灵魂拷问之Redis是什么?

本文概述Redis的特性,包括其单线程设计、内存优势、丰富的数据类型(如String、List、Hash、Set、ZSet)、持久化、高可用集群、事务及Lua脚本。重点讲解了如何利用这些特点解决实际场景问题。
摘要由CSDN通过智能技术生成

纸上得来终觉浅 绝知此事要躬行

Redis的一些特点


你是谁?你为什么来这个世界上?你为什么是你?

灵魂拷问!什么是redis,其实没有那么悬壶,其实就是redis的特点优缺点的一个思考!

我们先散装的把特点拎出来

  • 单线程
  • 基于内存
  • 数据类型丰富
  • 支持持久化
  • 支持集群
  • 支持事务
  • 支持lua脚本
  • key-val 形式

一、基于上述散装的特点,我们来整理redis的特点

其实redis的数据类型以及设计特点就奠定了redis的服务特性,让我们一起简单的建立redis的画像

1.redis读写性能极强

redis读写性能都非常高,江湖上的性能数据就不列举了!就是快准狠!
为什么redis可以这么快呢?

一、redis的是基于内存服务器,要知道内存的读写性能在硬件上就优于磁盘几个身位。也是我认为redis为什么这么快的主要原因
二:redis是单线程,免去了线程切换的开销、多线程竞态问题的处理。使得redis的处理都简单高效。
三、redis中提供出来的命令其实都非常简单,没有过于复杂的设计,所以每个命令的执行都很高效
四、采用了IO多路复用模型

2.适用于多种场景

由于redis的提供的数据结构很丰富,如string list set zset hash单这五种类型就可以满足非常多的场景使用了,关于数据类型可以阅读一下这篇文章 传送门

String

字符串类型是最基础的类型,可以直接存储任意字符串,也可以存储数字,因此通常可以用于做缓存服务、计数器、访问量统计、生成自增式ID等

List

操作命令列表

  • BLPOP
  • BRPOP
  • BRPOPLPUSH
  • LINDEX
  • LINSERT
  • LLEN
  • LPOP
  • LPUSH
  • LPUSHX
  • LRANGE
  • LREM
  • LSET
  • LTRIM
  • RPOP
  • RPOPLPUSH
  • RPUSH
  • RPUSHX

rpop & lpush (brpop & blpush)很容易就可以实现一个消息队列
LRANGE 很容易实现分页查询
也可以用于存储批量数据的id值,这样可以提高后续的查询效率!

hash

hash存储的依然是 k-v 键值对,不同的是他的val也是一个 k-v 键值对;
hset key field val;
由于hash的这个结构就很适合存放对象数据。

hset user:1 name tom
hset user:1 sex female
hset user:1 age 30

在这里插入图片描述
就很适合热点对象数据存储,比用JSON存储更适合

SET

redis的set跟java类似,无序不重复
1、SINTER 取交集,可以用于获取两个的共同好友

redis> SMEMBERS group_1
1) "LI LEI"
2) "TOM"
3) "JACK"

redis> SMEMBERS group_2
1) "HAN MEIMEI"
2) "JACK"

redis> SINTER group_1 group_2
1) "JACK"

2、SISMEMBER 可以查询a 是否在集合b中,用户做黑白名单

3、SCARD 命令可以获取好友数量

4、SRANDMEMBER 用于随机获取几个值 可以做展示区轮展

ZSET

有序集合
有序集合在设置数据时可以设置响应的分数,并且可以根据分数进行排序。

所以就特别适合做排序用途的功能,点击量排序啥的。

ZINCRBY post:clickNum 1 《灵魂拷问之Redis是什么?》

那么本篇文章的浏览量就加一了

3.支持持久化

redis比memcache有一个最大区别就是redis支持持久化。

高可用

一个nosql服务不支持持久化的话,在使用的过程中会存在潜在的风险。当意外情况发生时,会导致数据丢失,严重情况会造成单点故障,轻微的也会造成一段时间DB负载飙升的情况,另外持久化是Redis还是能实现高可用的一个坚实基础。

主要体现在redis的集群服务中的复制模式,主从服务之间的数据同步就是依靠RBD和AOF的持久化功能实现,主服务器同步快照文件给从服务器执行,期间主服务器缓存操作记录,从服务器在快照执行完毕之后,执行AOF文件,实现主从数据的复制。保证服务的高可用
。这里就不细说了。
这里提高了高可用,顺便把支持集群的特点也拿过来讲一下。

集群
  • 主从复制
  • 哨兵
  • 集群

主从复制

在从节点设置复制的主节点信息,运行期间会将主节点的数据同步到从节点中;一份数据在主从两台服务器上都存在。
在这个基础上,如果某种情况下主节点崩了,还可以通过手动维护将从节点修改成主节点,继续提供服务,增强了系统的高可用;另外还可以实现redis的读写分离,写操作指向主节点,读操作指向从节点。一个主节点可以有多个从节点,从而提高系统性能!

哨兵模式
在redis集群中通过设计哨兵,每个哨兵会监控所有redis服务器的运行情况,当主节点出现故障的时候,会发起故障恢复,选举从数据自动成为新的主数据库。实现高可用。

集群
在哨兵的前提下,所有节点存储的数据其实都是一样的,那么整体服务的性能就会受制于性能最差的那台服务,形成木桶效用,受制于短板。尤其是redis是基于内存的,每台服务器的内存大小本身就不大,极有可能导致整个集群虽然可用,但是性能很差。
集群采用分片技术,将数据按哈希槽分到对应的服务器上,不在是每台服务上的数据都一样。适用于需要水平扩容的服务场景

事务

事务这也没啥特别的,redis是有作为数据库的场景,事务机制保证操作的要么都执行要么都不执行用的就是事务去保证!

极其简陋的一个转账事务的例子

MULTI
INCRBY user:1:money 200
INCRBY user:2:money -200
EXEC

lua

比事务更加可靠的一个手段,将一系类操作放在一个lua脚本中,在redis中执行一个lua脚本,可以强保证这一系列脚本的操作的原子性。就像JAVA中的方法一样,封装好了之后复用就很方便,而且减少了网络开销!推荐!

总结

本文并没有非常规范的编排,仅是一个Redis特点一个梳理,对Redis建立一个比较大体的画像感知,能干什么事情,擅长干什么事情,不擅长干什么!更多其他详细的部分,后续慢慢输出!加油!各位!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值