Redis的基本介绍

Redis一句话概括就是高性能key-value内存数据库。本文就对其进行简单的介绍。

大家都知道redis的value有多种类型,那么他的key可以有几种类型呢?其实redis可以使用任何二进制序列作为key值,比如说你可以把一张图片序列化后作为key放进redis(一般没人这么干),在项目里大部分情况下都是使用字符串作为key值,并且该字符串具有一定的标识作用。


接下来具体说一下redis value的数据类型,关于命令的使用,因为命令实在太多(记不住。。。),详细的可以去官网查看。

1.string类型

这个没啥说得了,就是最普通的类型了,其中有个比较重要的是命令是set,高版本的set命令通过指定参数实现了setex和setnx等命令的功能,并且是原子操作,在使用redis实现分布式锁时主要就是依靠该命令。

2.list类型

redis的list为双向链表,lrange命令范围查找,list有阻塞获取的命令并可以指定超时时间(因为redis是单线程的,阻塞获取会影响后续操作,所以一般不会使用)

3.hash类型

和普通的hash表没啥区别。。就不说了

4.set类型

类似于java set,无序集合。他可以获取集合的交集并集等操作。

5.zset类型

和set的区别就是他是有序的。。添加的时候需要添加分值项。比较常见的应用是利用时间作为分值做延时队列。

6.HyperLogLog类型

主要用来做基数统计,他只会计算添加进来元素的基数,而并不保存元素,所以不能通过它来获取元素。基数统计典型应用就是网站PV。

7.Geo类型

用来做地理位置的存储。

8.位图

可以理解为按位操作的String,占用空间更少,可以用来做签到等功能。


Redis的事务:

redis支持事务操作,MULTI命令用于开启一个事务,执行之后, 客户端可以继续向服务器发送任意多条命令, 这些命令不会立即被执行, 而是被放到一个队列中, 当EXEC命令被调用时, 所有队列中的命令才会被执行。需要注意的是,Redis的事务并不支持回滚操作,比如说执行过程中,一条命令操作失败,后续命令会正常执行并且失败的命令并不会回滚。

被WATCH命令操作的键会被监视,监视期间若有其他客户端对该键进行操作,则会返回错误。可以使用WATCH机制实现乐观锁,即直至没有其他客户端修改该键才进行命令的执行。


Redis的发布订阅:

主要通过SUBSCRIBE, UNSUBSCRIBE ,PUBLISH等几个命令实现,就是正常的发布与订阅模式。


Redis Lua脚本:

使用call等命令实现lua脚本的调用,Lua脚本Redis中是原子执行的,执行过程中间不会插入其他命令,所以适用于将一部分操作聚合成原子操作。比如Redis分布式锁的解锁操作。


Redis的过期策略:

大致可以分为两类

LRU(最近最少使用):

当redis中数据达到设置的内存最大值时,可以自动的根据设置的策略进行回收,有以下的策略,需要注意的是Redis的LRU策略并不是精确的。

noeviction:报错。。当没有足够内存时添加报错(基本不会使用)

allkeys-lru:删除最近最少使用的键。

volatile-lru:在具有过期时间属性的键中删除最近最少使用的键

allkeys-random:随机删除

volatile-random:在具有过期属性的键中随机删除

volatile-ttl:在具有过期属性的键中删除生存时间最短的

LFU(最少频率使用,4.0以上支持):

volatile-lfu:在具有过期时间的key中使用LFU

allkeys-lfu:在所有的key中使用LFU


Redis的复制:

利用Redis的复制功能,我们可以简单的实现Redis的主从复制。Redis的复制主要分为3种情况,第一种是当主从连接正常时,主会发送在其上执行的命令到从。第二种情况是当主从断线重连后,中间这段缺失的部分会通过偏移量和复制缓冲区来完成,断线后主会将命令写入复制缓冲区并更新偏移量,重新连接后,主将缓冲区内容发给从,从进行重放。当缓冲区满了的时候,就会进入第三种情况即全量的复制,过程是主开启后台进程生成RDB文件,同时缓冲收到的命令,然后主将RDB发送给从,从将其保存到磁盘再加载到内存中进行重放,主再将缓冲的命令发送给从。


Redis的持久化:

Redis支持俩种持久化方式

1.RDB快照:fork子进程,通过保存某一时间点内存快照实现,使用BGSAVE命令进行RDB的生成

2.AOF方式:fork子进程,将每一个写操作进行记录,并在服务器重启后进行重放。

下面具体说一下二者各自的优势与缺点:

RDB:适合用做备份,服务重启的速度比AOF快,使Redis的性能最大化。缺点是有可能会丢失一部分数据,并且当Redis中数据集很大时,fork()会非常的耗费性能,有可能导致客户端出现短暂的暂停服务。

AOF:有多种fsync策略(不进行sync,每秒sync,每次执行命令时sync,速度由快到慢),fync后台执行,不太影响Redis的性能,相比RDB丢失数据的可能性更小,当AOF日志文件过大时Redis会自动对其进行重写。缺点是他AOF文件比RDB文件更大。

一般推荐使用AOF模式,并将其fsync策略设为每秒。同时定期做RDB的备份。


Redis中对于EXPIRE的处理:

1.对于过期时间,Redis中存储的是UNIX时间戳,意味着不论Redis是否在运行都不受影响

2.Redis使用主动与被动方式处理已经过期的key。被动方式:客户端使用key,Redis发现已经过期则会进行删除;主动方式:定时在具有过期集的key中随机抽取一些测试,将测试集中所有已经过期的key删除。

3.AOF对于过期key的处理是生成删除语句


Redis高可用-哨兵机制:

主要用来做故障切换,同时也具有监控等功能,哨兵默认使用的端口是26379。具体的哨兵模式部署请查阅官网。


Redis Cluster:

Redis集群具有在多个节点之间自动分割数据集并当某个节点发生故障继续提供服务的能力。Redis集群一共可以分为16384个槽,每个节点负责其中的一部分。具体部署请查阅官网。


Redis监控工具:

redis-stat:基于Redis的info命令封装而成。通常来说,不会像基于MONITOR命令的监控工具一样,对Redis本身有性能上的影响。

RedisLive:采用python开发的redis的可视化及查询分析工具

redis_exporter:配合Prometheus以及Grafana的Prometheus Redis插件,可以在Grafana进行可视化及监控

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,504评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,434评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,089评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,378评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,472评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,506评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,519评论 3 413
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,292评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,738评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,022评论 2 329
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,194评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,873评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,536评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,162评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,413评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,075评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,080评论 2 352

推荐阅读更多精彩内容

  • 前言 在上一篇文章中,介绍了Redis内存模型,从这篇文章开始,将依次介绍Redis高可用相关的知识——持久化、复...
    Java架构阅读 2,306评论 3 21
  • 文章已经放到github上 ,如果对您有帮助 请给个star[https://github.com/qqxuanl...
    尼尔君阅读 2,284评论 0 22
  • 超强、超详细Redis入门教程 转载2017年03月04日 16:20:02 16916 转载自: http://...
    邵云涛阅读 17,436评论 3 313
  • 2018.6.17 星期日 晴 今天全家人计划来一次野餐,我们准备好吃的,舅舅带了凳子和小桌子,一起...
    开心靖雯阅读 179评论 0 0
  • 我叫童洛,25岁,某出版社栏目编辑,电台情感主持。 如今,我每天都笑,做事洒脱,坚韧明晰,所以刀枪不入,宠辱不惊。...
    安南烬阅读 231评论 0 1