![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Redis
文章平均质量分 68
Mossil
这个作者很懒,什么都没留下…
展开
-
Redis-内存淘汰策略
1. 过期删除策略定期删除:在redis当中,默认是每隔100ms就随机抽取一些设置了过期时间的key,检查其是否过期,如果过期就删除。惰性删除:redis在获取某个key的时候就会其进行检查,若这个key设置了过期时间,它就会进行判断是否过期,如果过期了此时就会删除,不会给你返回任何东西。总结:定期删除是集中处理,惰性删除是零散处理。2. 几种淘汰机制volatile-random:从已设置过期时间的数据集中任意选择数据淘汰。allkeys-random:从数据集(server.db[i原创 2021-04-22 16:56:36 · 114 阅读 · 0 评论 -
Redis-分布式锁
1. 概念分布式锁是为了解决不同进程需要互斥地访问共享资源产生的。在分布式模式下,假如某份数据只有一份或者存在限制,那么我们就需要使用锁技术来控制某一时刻修改数据的进程数。2. 实现方式基于数据库实现分布式锁;如mysql排它锁。基于缓存(Redis等)实现分布式锁; 本文介绍内容。基于Zookeeper实现分布式锁。3. 几个属性安全属性:互斥,不管任何时候,只有一个客户端能持有同一个锁。效率属性A:不会死锁,最终一定会得到锁,就算一个持有锁的客户端宕掉或者发生网络分区。效率属性B原创 2021-04-22 16:11:48 · 65 阅读 · 0 评论 -
Redis-缓存雪崩
1. 简介1.1 描述由于缓存层承载着大量的请求,有效地保护了存储层,但是如果缓存层由于某些原因不能正常提供服务,于是所有的请求都会达到存储层,存储层的调用量会暴增,造成存储层也会级联宕机的情况。1.2 缓存击穿、穿透、雪崩对比缓存击穿:key对应的数据存在,但在redis中过期,若此时大量并发请求过来,当发现缓存过期时一般都会从后端DB加载数据并重新写入到缓存当中,这个时候大并发的请求可能会瞬间把后端DB压垮。缓存穿透:key对应的数据在数据源中并不存在,每次针对此key的请求从缓存获取不到,原创 2021-04-22 15:33:36 · 76 阅读 · 0 评论 -
Redis-缓存穿透
1. 简介1.1 概念缓存穿透是指查询一个不存在的数据,缓存层与存储层都不会命中,通常出于容错的考虑,如果从存储层查不到数据则不写入缓存层。大致可分为以下3步:缓存层不命中存储层不命中,不将空结果写回缓存返回空结果描述:缓存穿透将导致不存在的数据每次请求都需要到存储层去查询,失去了缓存保护后端存储的意义。缓存穿透问题可能会使后端存储负载加大,由于很多存储不具备高并发性,甚至可能造成后端存储宕机,通常可以在程序中分别统计总调用数,缓存层命中数,存储层命中数,如果发现大量存储层命中为空,可能就是原创 2021-04-22 15:12:40 · 131 阅读 · 0 评论 -
Redis-Lua脚本
1. 简介1.1 概念Lua是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放。其设计目的就是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。因为广泛的应用于:游戏开发、独立应用脚本、Web 应用脚本、扩展和数据库插件等。比如:Lua脚本用在很多游戏上,主要是Lua脚本可以嵌入到其他程序中运行,游戏升级的时候,可以直接升级脚本,而不用重新安装游戏。1.2 优势减少网络开销:在Redis操作需求需要向Redis发送5次请求,而使用脚本功能完成同样的操作只需要发送一个请求原创 2021-04-20 15:43:49 · 254 阅读 · 0 评论 -
Redis-慢查询
1. 概念所谓慢查询日志就是系统在命令执行前后计算每条命令的执行时间,当超过预设阈值,就将这条命令的相关信息(例如:发生时间、耗时、命令的详细信息)记录下来,Redis也提供了类似的功能。注意:慢查询只会记录执行命令的时间。2. 慢查询日志的参数slowlog-log-slower-than:指定执行时间超过多少微秒(1秒等于1000000微秒) 的命令请求会被记录到日志上。slowlog-max-len:指定服务器最多保存多少条慢查询操作,服务器先进先出的方式保存多条慢查询日志,当服务器存储的原创 2021-04-19 17:44:41 · 63 阅读 · 0 评论 -
Redis-set类型
1. 概念redis集合(set)类型和list列表类型类似,都可以用来存储多个字符串元素的集合。但是和list不同的是set集合当中不允许重复的元素。而且set集合当中元素是没有顺序的,不存在元素下标。redis的set类型是使用哈希表构造的,因此复杂度是O(1),它支持集合内的增删改查,并且支持多个集合间的交集、并集、差集操作。可以利用这些集合操作,解决程序开发过程当中很多数据集合间的问题。2. 常用命令SADD 命令:用于将一个或者多个元素假如到集合当中,假如元素已经存在在于集合当中,则原创 2021-04-19 17:25:35 · 121 阅读 · 0 评论 -
Redis-zset类型与结构
1. 概念Redis有序集合也是集合类型的一部分,所以它保留了集合中元素不能重复的特性,但是不同的是,有序集合给每个元素多设置了一个分数,利用该分数作为排序的依据。有序集合可以利用分数进行从小到大的排序。虽然有序集合的成员是唯一的,但是分数(score)却可以重复。比如在一个班中,学生的学号是唯一的,但是每科成绩却是可以一样的,redis可以利用有序集合存储学生成绩快速做成绩排名功能。2. 常用命令zadd 命令:用于向一个有序集合中加入一个或者多个元素及其分数。假如加入的元素已经存在,那么更原创 2021-04-19 16:33:42 · 147 阅读 · 0 评论 -
Redis-List类型
1. 概念Redis列表是一种比较灵活的链表数据结构,它可以充当队列或者栈的角色。它可以用来存储多个有序的字符串的,列表当中的每一个字符看做一个元素,一个列表当中可以存储有一个或者多个元素,Redis的list支持存储2^32次方-1个元素。Redis列表是链表型的数据结构,所以它的元素是有序的,而且列表内的元素是可以重复的。意味着它可以根据链表的下标获取指定的元素和某个范围内的元素集。2. 常用命令Lpush 命令:将一个或多个值插入到列表头部。 如果 key 不存在,则创建list,然后再插原创 2021-04-19 16:00:27 · 105 阅读 · 0 评论 -
Redis-hash类型
1. 概念Redis hash数据结构是一个键值对(key-value)集合,它是一个 string 类型的 field 和 value 的映射表,redis本身就是一个key-value型数据库,因此hash数据结构相当于在value中又套了一层key-value型数据。所以redis中hash数据结构特别适合存储关系型对象。比如用来存储学生基本信息,或者用户信息等。2. 常用命令hmset 命令:用于同时将多个field-value (字段-值)对设置到哈希表中。假如hash表中已经存在fiel原创 2021-04-19 15:59:56 · 153 阅读 · 0 评论 -
Redis-string
1.简介string类型是redis的最基础的数据结构,也是最经常使用到的类型。而且其他的四种类型多多少少都是在字符串类型的基础上构建的,所以string类型是redis的基础。string 类型的值最大能存储 512MB,这里的string 类型可以是简单字符串、复杂的xml/json的字符串、二进制图像或者音频的字符串、以及数字的字符串。1.1 常用命令set:该命令用于设置给定 key 的值。如果 key 已经存储其他值, SET 就覆写旧值,且无视类型get:该命令用于获取指定原创 2021-04-14 22:20:00 · 86 阅读 · 0 评论 -
Redis-订阅发布
1. 概念Redis 发布订阅 (pub/sub) 是一种消息通信模式:发送者 (pub) 发送消息,订阅者 (sub) 接收消息。Redis客户端可以订阅任意数量的频道。说明:客户端可以订阅一个或者多个频道,从而成为这些频道的订阅者,每当有其他客户端向被订阅的频道发送消息时,频道的订阅者都会收到这条消息。如下图所示:客户端1订阅频道 runoobchat客户端2向频道runoobchat发送消息2. 发布订阅应用场景发布订阅-广播消息推送$redis = new Redis();原创 2021-04-14 21:39:46 · 91 阅读 · 0 评论 -
redis-stream类型
1.1 概念Redis Stream 主要用于消息队列(MQ,Message Queue),Redis 本身是有一个 Redis 发布订阅 (pub/sub)来实现消息队列的功能,但它有个缺点就是消息无法持久化,如果出现网络断开、Redis 宕机等,消息就会被丢弃。1.2 消息队列1.2.1 什么是消息队列?说明:把数据放到消息队列叫做生产者,从消息队列里边取数据叫做消费者,我们知道队列 Queue 是一种先进先出的数据结构,所以消费消息时也是按照顺序来消费的。但是偶尔也会出现消息被消费的顺序不对原创 2021-04-14 20:53:41 · 376 阅读 · 0 评论 -
Redis-乐观锁
1.1 事务WATCH命令监控概念:Redis Watch 命令用于监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断。客户端1:客户端2:客户端1执行事务:客户端2执行事务:1.2 乐观锁的实现方式1.2.1 MVCC方式实现一般是在数据表中加上版本号字段 version,表示数据被修改的次数。当数据被修改时,这个字段值会加1。如下所示:idbalanceversion1100.001假设帐户原创 2021-04-14 18:34:09 · 104 阅读 · 0 评论 -
Redis-简介与安装
1.1 Redis简介Remote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统。Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。它通常被称为数据结构服务器,因为值(value)可以是 字符串(String)、哈希(Hash)、列表(list)、集合(sets) 和有序集合(sorted sets)等类型。Red原创 2021-04-14 17:13:00 · 102 阅读 · 0 评论