
Redis
淡淡的倔强
不怕千万人阻挡,只怕自己投降!
展开
-
Redis布隆过滤器
一、布隆过滤器使用场景比如有如下几个需求:①、原本有10亿个号码,现在又来了10万个号码,要快速准确判断这10万个号码是否在10亿个号码库中?解决办法一:将10亿个号码存入数据库中,进行数据库查询,准确性有了,但是速度会比较慢。解决办法二:将10亿号码放入内存中,比如Redis缓存中,这里我们算一下占用内存大小:10亿*8字节=8GB,通过内存查询,准确性和速度都有了,但是大约8gb的内存空间,挺浪费内存空间的。②、接触过爬虫的,应该有这么一个需求,需要爬虫的网站千千万万,对于一个新的网站url,转载 2020-09-03 16:33:50 · 508 阅读 · 1 评论 -
深入理解Redis-跳跃表
一、经典Skiplist 跳跃表跳表由 William Pugh 于1990年发表的论文 Skip lists: a probabilistic alternative to balanced trees 中被首次提出,查找时间复杂度为平均 O(logN)O(logN)O(logN),最差 O(N)O(N)O(N),在大部分情况下效率可与平衡树相媲美,但实现比平衡树简单的多,跳表是一种典型的以空间换时间的数据结构。1.1 什么是跳跃表对于一个单链表来讲,即便链表中存储的数据是有序的,如果我们要想在其中转载 2020-09-03 15:54:36 · 2625 阅读 · 0 评论 -
Redis-底层数据结构详解
一、前言前面介绍过Redis的五大基础数据类型(String、Hash、List、Set、ZSet)由六种底层数据结构(简单动态字符串、链表、字典、跳跃表、整数集合、压缩列表)实现,本章主要分析这六种底层数据结构。PS:Redis有八种编码,但底层数据机构是六种。二、SDS(simple dynamic string)简单动态字符串结构定义struct sdshdr{ //记录buf数组中已使用字节的数量 //等于 SDS 保存字符串的长度 int len;转载 2020-09-02 16:53:17 · 1646 阅读 · 0 评论 -
Redis-五大数据类型实现原理
一、前言在Redis底层中,有六种数据结构(简单动态字符串、链表、字典、跳跃表、整数集合、压缩列表),但Redis并没有直接使用这些数据结构来实现键值对数据库,而是基于这些数据结构创建了一个对象系统,这些对象系统也就是String、Hash、List、Set、ZSet五大数据类型,每一种数据类型都至少用到了一种数据结构。通过这五种不同类型的对象,Redis可以在执行命令之前,根据对象的类型判断一个对象是否可以执行给定的命令,而且可以针对不同的场景,为对象设置多种不同的数据结构,从而优化对象在不同场景下的使转载 2020-09-01 20:05:17 · 202 阅读 · 1 评论 -
关于Redis数据过期策略
前言在项目中某场景下,需要频繁去设置redis数据的过期时间,因此去了解了下redis数据过期策略。原文地址:关于Redis数据过期策略一、Redis中key的的过期时间通过EXPIRE key seconds命令来设置数据的过期时间。返回1表明设置成功,返回0表明key不存在或者不能成功设置过期时间。在key上设置了过期时间后key将在指定的秒数后被自动删除。被指定了过期时间的key在Redis中转载 2017-05-15 15:10:10 · 3381 阅读 · 0 评论 -
Redis3.0配置文件详解
#redis.conf# Redis configuration file example.# ./redis-server /path/to/redis.conf################################## INCLUDES ####################################这在你有标准配置模板但是每个redis服务器又需要个性设置的时候很...转载 2018-02-19 17:06:57 · 1445 阅读 · 0 评论 -
阿里云Redis开发规范
原文地址:阿里云Redis开发规范摘要: 本文介绍了在使用阿里云Redis的开发规范,从键值设计、命令使用、客户端使用、相关工具等方面进行说明,通过本文的介绍可以减少使用Redis过程带来的问题。一、键值设计1、key名设计(1)【建议】: 可读性和可管理性以业务名(或数据库名)为前缀(防止key冲突),用冒号分隔,比如业务名:表名:idugc:video:...转载 2018-03-21 20:24:49 · 1562 阅读 · 0 评论 -
Redis缓存使用-穿透、雪崩、热点key问题
一、缓存穿透redis缓存穿透:查询一个数据库中不存在的数据,比如商品详情,查询一个不存在的ID,每次都会访问DB,如果有人恶意破坏,很可能直接对DB造成过大地压力。解决方案:1、缓存空对象当查询一个不存在的key时,缓存为空,去查询DB,当DB为空时,将该Key对应的值设为空对象,并设置一个过期时间,当下一次请求再查询该Key时,直接返回空对象,不用再访问DB了;分析:(1)内...转载 2019-02-25 21:10:40 · 585 阅读 · 0 评论