Redis
文章平均质量分 63
Redis
蓝颜~岁月
重在积累。。。
展开
-
Redis客户端常见异常
Redis客户端常见异常原创 2022-12-03 15:52:41 · 831 阅读 · 0 评论 -
【Redis】集合对象和有序集合对象
无序集合和有序集合原创 2022-10-01 08:58:58 · 522 阅读 · 0 评论 -
【Redis】列表对象和哈希对象
列表对象和哈希对象原创 2022-09-21 21:29:31 · 459 阅读 · 0 评论 -
【Redis】对象详解及字符串对象
对象详解及字符串对象原创 2022-09-19 21:41:04 · 234 阅读 · 0 评论 -
【Redis】压缩列表
压缩列表原创 2022-09-17 22:09:39 · 398 阅读 · 0 评论 -
【Redis】跳跃表和整数集合
跳跃表和整数集合原创 2022-09-14 21:46:03 · 198 阅读 · 0 评论 -
【Redis】链表和字典
链表和字典原创 2022-09-12 15:51:47 · 327 阅读 · 0 评论 -
【Redis】简单动态字符串
SDS原创 2022-09-11 15:27:44 · 211 阅读 · 0 评论 -
Redis 线程IO模型
Redis 是个单线程程序!这点必须铭记。也许你会怀疑高并发的Redis中间件怎么可能是单线程。很抱歉,它就是单线程,你的怀疑暴露了你的基础知识的不足,莫要瞧不起单线程,除了Redis之外,Node.js也是单线程。Nginx也是单线程,但是它们都是服务器高性能的典范。Redis单线程为什么还能这么快?因为它的所有数据都在内存中,所有的运算都是内存级别的运算。正因为Redis是单线程,所以要小心使用Redis指令。对于那些时间复杂度为O(n)级别的指令,一定要谨慎使用,否则一不小心就可能会导致Redi原创 2021-06-30 22:36:11 · 140 阅读 · 0 评论 -
Redis zset(有序列表)
zset 可能是Redis提供的最有特色的数据结构,它也是在面试中面试最爱问的数据结构,如图所示,它类似Java的SortedSet和HashMap的结合体,一方面它是一个set,保证了内部value的唯一性,另一个方面它可以给每个value赋予一个score,代表这个value的排序权重。它的内部实现用的是一种跳跃列表的数据结构。zset中最后一个value被移除后,数据结构被自动删除,内存被回收。zset可以用来存储粉丝列表,value值是粉丝的用户id,score 是关注时间,我们可以对粉丝列表原创 2021-06-28 22:32:18 · 846 阅读 · 1 评论 -
Redis set(集合)
Redis的集合相当于Java语言里面的HashSet,它内部的键值对是无序的,唯一的。它的内部实现相当于一个特殊的字典,字典中所有的value都是一个值NULL。当集合中最后一个元素被移除之后,数据结构被自动删除,内存被回收。set 结构可以用来存储在某活动中中奖的用户ID,因为有去重功能,可以保证同一个用户不会中奖两次。去重,注意顺序,和插入的并不一样,因为set 是无序的。...原创 2021-06-28 21:53:49 · 85 阅读 · 0 评论 -
Redis hash类型
Redis的字典相当于java语言里面的HashMap,如图所示,它是无序字典,内部存储了很多键值对,,实现结构上与Java的HashMap 也是一样,都是“数组 + 链表”二维结构,如下图所示,第一维Hash的数组位置碰撞时,就会碰撞的元素使用链表串联起来。不同的是,Redis的字典的值只能是字符串,另外它们rehash的方式不一样,因为Java的HashMap在字典很大时,rehash是个耗时的操作,需要一次性全部rehash,Redis为了追求高性能,不能堵塞服务,所以采用了渐进式rehash策原创 2021-06-24 21:40:41 · 210 阅读 · 0 评论 -
Redis list列表类型
Redis的列表相当于Java语言里面的LinkedList,注意它是链表而不是数组,这意味着list的插入和删除操作非常快,时间复杂度为O(1),但是索引定位很慢,时间复杂度O(n),这点让人非常意外。如下图所示,列表中的每个元素都使用双向指针顺序,串起来可以同时支持向前向后遍历。当列表弹出了最后一个元素,该数据结构被自动删除,内存被回收。Redis的列表结构常用来做异步队列使用,将需要延后处理的任务结构序列化成字符串,塞进Redis的列表,另一个线程从这个列表中轮询数据进行处理。【右边进左边出:原创 2021-05-30 20:53:47 · 101 阅读 · 0 评论 -
Redis string类型
字符串类型(String)字符串是redis最简单的数据结构,如下图所示,它的内部表示就是一个字符数组。redis所有数据结构都以唯一的key字符串作为名称,然后通过这个唯一key值来获取相应的value数据,不同类型的数据结构的差异就在于value的结构不一样。字符串结构使用非常广泛,一个常见的用途就是缓存用户信息,我们将用户信息结构体使用json序列化成字符串,然后将序列化后的字符串塞进redis来缓存,同样,取用户信息会经过一次反序列化的过程。redis的字符串是动态字符串,是可以修改的字符串原创 2021-05-30 12:10:35 · 91 阅读 · 0 评论 -
Redis和lua脚本实现计数器封装
直接贴代码<?phpnamespace App\Cache\Redis\CommonResolve\Utils;use App\Cache\Redis\CommonResolve\BaseResolve;use Illuminate\Support\Carbon;/** * 计数器类 * Class Counter * @package App\Cache\Redis\CommonResolve\Utils */class Counter { /**原创 2021-05-29 20:28:56 · 250 阅读 · 0 评论 -
Redis和lua实现分布式锁封装
这里直接贴代码,不做其他详细解释,主要用于加锁,解锁,锁尝试我这里是采用lua 脚本实现的。如下:第一步定义接口类<?phpnamespace App\Cache\Redis\CommonResolve\Utils\DistributedLock;/** * Interface DistributedLockInterface * @package App\Cache\Redis\CommonResolve\Utils\DistributedLock */interface Di原创 2021-05-29 20:20:14 · 162 阅读 · 0 评论 -
如何利用Redis锁解决高并发问题?
/** * @param $key * @param int $expireTime * @return bool|int */ public function lock($key, $expireTime = 5) { $key = 'get_lock_' . $key; $isLock = $this->connection->setnx($key, Carbon::now()->...原创 2021-04-18 11:52:15 · 127 阅读 · 0 评论 -
Redis是如何淘汰key的?
淘汰原理系统线上运行中,内存总是昂贵且有限的,在数据总量远大于 Redis 可用的内存总量时,为了最大限度的提升访问性能,Redis 中只能存放最新最热的有效数据。当 key 过期后,或者 Redis 实际占用的内存超过阀值后,Redis 就会对 key 进行淘汰,删除过期的或者不活跃的 key,回收其内存,供新的 key 使用。Redis 的内存阀值是通过 maxmemory 设置的,而超过内存阀值后的淘汰策略,是通过 maxmemory-policy 设置的,具体的淘汰策略后面会进行详细介绍。R转载 2021-03-07 17:52:48 · 617 阅读 · 0 评论 -
Redis基本原理
一.Redis 简介Redis 是一款基于 ANSI C 语言编写的,BSD 许可的,日志型 key-value 存储组件,它的所有数据结构都存在内存中,可以用作缓存、数据库和消息中间件。Redis 是远程字典服务的缩写,一个 Redis 实例可以有多个存储数据的字典,客户端可以通过 select 来选择字典即 DB 进行数据存储。二.Redis 特性同为 key-value 存储组件,Memcached 只能支持二进制字节块这一种数据类型。而 Redis 的数据类型却丰富的多,它具有 8原创 2021-03-07 15:18:50 · 2468 阅读 · 0 评论 -
redis持久化之RDB和AOF的区别
持久化之RDB定义:在指定的时间间隔内生成数据集的时间点快照RDB 的优点:1.RDB 是一个非常紧凑的文件它保存了 Redis 在某个时间点上的数据集。 这种文件非常适合用于进行备份: 比如说,你可以在最近的 24 小时内,每小时备份一次 RDB 文件,并且在每个月的每一天,也备份一个 RDB 文件。 这样的话,即使遇上问题,也可以随时将数据集还原到不同的版本。2.RDB 非常适用于灾难恢复它只有一个文件,并且内容都非常紧凑,可以(在加密后)将它传送到别的数据中心,或者亚马逊 S3 中。3.原创 2021-03-07 14:32:03 · 14321 阅读 · 0 评论 -
redis缓存雪崩,缓存穿透,缓存击穿的php解决方法
缓存雪崩缓存雪崩表示在某一时间段,缓存集中失效,导致请求全部走数据库,有可能搞垮数据库,使整个服务瘫痪。使缓存集中失效的原因:redis服务器挂掉了。对缓存数据设置了相同的过期时间,导致某时间段内缓存集中失效。如何解决缓存集中失效:针对原因1,可以实现redis的高可用,Redis Cluster 或者 Redis Sentinel(哨兵) 等方案。针对原因2,设置缓存过期时间时加上一个随机值,避免缓存在同一时间过期。$redis = new Redis();$redis->原创 2021-02-25 21:38:46 · 242 阅读 · 0 评论