Redis
文章平均质量分 83
redis数据库的一些知识点学习和汇总
yours_棒棒糖
间歇性踌躇满志,持续性混吃等死!!!难搞喔!!
生活不易,继续前行,为了成为最好的自己!
刷题记录,博客:https://github.com/can19960229/Candy_leetcode
展开
-
【Redis】Redis数据结构的应用——GEO(“搜索附近”的项目怎么设计)
面向 LBS 应用的 GEO 数据类型在日常生活中,我们越来越依赖搜索** 附近的餐馆、在打车软件上叫车 **,这些都离不开基于位置信息服务(Location-Based Service,LBS)的应用。LBS 应用访问的数据是和人或物关联的一组经纬度信息,而且要能查询相邻的经纬度范围,GEO 就非常适合应用在 LBS 服务的场景中,我们来看一下它的底层结构。GEO 的底层结构一般来说,在设计一个数据类型的底层结构时,我们首先需要知道,要处理的数据有什么访问特点。所以,我们需要先搞清楚位置信息到底是怎么原创 2022-04-18 15:03:33 · 596 阅读 · 0 评论 -
【Redis】数据结构的应用——GEO 【搜索“附近的餐馆”、在打车软件上叫车】
搜索“附近的餐馆”、在打车软件上叫车,这些都离不开基于位置信息服务(Location-Based Service,LBS)的应用。LBS 应用访问的数据是和人或物关联的一组经纬度信息,而且要能查询相邻的经纬度范围以叫车服务为例,来分析下 LBS 应用中经纬度的存取特点。每一辆网约车都有一个编号(例如 33),网约车需要将自己的经度信息(例如 116.034579)和纬度信息(例如 39.000452 )发给叫车应用。用户在叫车的时候,叫车应用会根据用户的经纬度位置(例如经度 116.054579原创 2021-06-02 20:07:44 · 309 阅读 · 0 评论 -
【Redis】保存一亿张图片,如果利用redis的底层数据结构进行优化,使占用内存空间少?
当一亿张图片保存信息,用了6.4GB,Redis大内存实例生成 RDB 响应变慢的问题。因为String类型的数据结构,在保存数据时消耗的内存空间较多。额外开销较大。采用二级编码的方法,实现了用集合类型保存单键值对,Redis实例的内存空间消耗下降。为什么String的额外开销较大?String类型保存图片和图片存储对象ID平均采用了64字节,而实际long类型只需要8字节,两个long = 16字节,为什么String却采用了64字节保存?为什么 String 类型内存开销大?为什么用 ..原创 2021-05-21 17:34:18 · 773 阅读 · 1 评论 -
【Redis】数据结构与对象(六种底层数据结构)——压缩链表
压缩列表压缩列表(ziplist)是为了节约内存而设计的,是由一系列特殊编码的连续内存块组成的顺序性(sequential)数据结构,一个压缩列表可以包含多个节点,每个节点可以保存一个字节数组或者一个整数值压缩列表是列表(List)和散列(Hash)的底层实现之一,一个列表只包含少量列表项,并且每个列表项是小整数值或比较短的字符串,会使用压缩列表作为底层实现(在3.2版本之后是使用quicklist实现)压缩列表的构成一个压缩列表可以包含多个节点(entry),每个节点可以保存一个字节数组或者一个整原创 2021-05-05 19:24:45 · 763 阅读 · 0 评论 -
【Redis】数据结构与对象(六种底层数据结构)——整数集合 inset
整数集合 inset(1)整数集合的定义实现整数集合的定义为inset.h/insettypedef struct intset { // 编码方式 uint32_t encoding; // 集合包含的元素数量 uint32_t length; // 保存元素的数组 int8_t contents[];} intset;contents数组:整数集合的每个元素在数组中按值的大小从小到大排序,且不包含重复项length记录整数集合的元素数量,即c原创 2021-04-29 23:03:37 · 167 阅读 · 0 评论 -
【Redis】数据结构与对象(六种底层数据结构)——跳跃表 skiplist
跳跃表 skiplist有序链表只能逐一查找元素,操作起来比较慢,则出现了跳表,跳表就是在链表的基础上,增加了多级索引,通过索引位置的几个跳转,它通过在每个节点维持多个指向其他节点的指针,而达到快速访问节点的目的,实现数据的快速定位。**skiplist的作用:**一是实现有序集合键,二是在集群节点中用作内部数据结构跳表的数据结构:(1)跳跃表的定义跳跃表其实可以把它理解为多层的链表,它有如下的性质多层的结构组成,每层是一个有序的链表最底层(level 1)的链表包含所有的元素跳跃表的查原创 2021-04-29 23:03:10 · 124 阅读 · 0 评论 -
【Redis】数据结构与对象(六种底层数据结构)——字典
字典字典,又称为符号表(symbol table)、关联数组(associative array)或映射(map),是一种用于保存键值对(key-value pair)的抽象数据结构。字典中的每一个键都是唯一的,可以通过键查找与之关联的值,并对其修改或删除Redis的键值对存储就是用字典实现的,散列(Hash)的底层实现之一也是字典(1)字典的定义实现Redis的字典底层是使用哈希表实现的,一个哈希表里面可以有多个哈希表节点,每个哈希表节点中保存了字典中的一个键值对哈希表结构定义:typedef原创 2021-04-28 11:04:29 · 284 阅读 · 0 评论 -
【Redis】数据结构与对象(六种底层数据结构)——链表
链表(1)链表和链表节点的定义链表上节点定义如下:adlist.h/listNodetypedef struct listNode { // 前置节点 struct listNode *prev; // 后置节点 struct listNode *next; // 节点值 void *value;} listNode;l链表的定义如下,adlist.h/listtypedef struct list { // 链表头节点 list原创 2021-04-28 11:03:48 · 85 阅读 · 0 评论 -
【Redis】数据结构与对象(六种底层数据结构)——简单动态字符串 SDS
简单来说,底层数据结构一共有 6 种,分别是简单动态字符串、双向链表、压缩列表、哈希表、跳表和整数数组。它们和数据类型的对应关系如下图所示:String 类型的底层实现只有一种数据结构,也就是简单动态字符串。简单动态字符串SDSSDS是"simple dynamic string"的缩写。 Redis中所有场景中出现的字符串,基本都是由SDS来实现的:所有非数字字符串对象的key。例如set msg "hello world" 中的key msg.字符串数据类型的值。例如set msg原创 2021-04-26 23:29:02 · 137 阅读 · 0 评论 -
【Redis】Redis 实现分布式锁
Redis 实现分布式锁普通锁当多个线程访问同一个共享资源时,需要某种机制来保证只有满足某个条件(获取锁成功)的线程才能访问到资源,而不满足条件(获取锁失败)的线程只能等待,在下一轮竞争中来获取锁才能访问资源。所以锁是一种用来解决多个执行线程或访问共享资源时出现错误或数据不一致问题的工具。实现方式:使用synchronized 关键字。synchronized是一个隐式锁,因为其解锁和锁定的操作是由 JVM 通过对象的 monitor 监视器锁自动完成的,我们也无法插手整个上锁和解锁的过程。原创 2021-04-23 21:55:31 · 158 阅读 · 2 评论 -
【Redis】高可用Redis:Redis Cluster详细介绍
Redis Clusterredis最开始使用主从模式做集群,若master宕机需要手动配置slave转为master;后来为了高可用提出来哨兵模式,该模式下有一个哨兵监视master和slave,若master宕机可自动将slave转为master,但它也有一个问题,就是不能动态扩充;所以在3.x提出cluster集群模式。1 为什么要实现Redis Cluster?主从复制不能实现高可用主从复制中单机的QPS无法满足业务希求数据量的考虑,现有服务器内存不能满足业务数据的需要时,单纯向服务器原创 2021-04-22 23:14:36 · 419 阅读 · 0 评论 -
【Redis】哈希分布的三种方式
哈希分布的三种方式常见的数据分布方式有哈希(取余hash、一致性hash)、按数据范围、 按数据量。在Cluster 中数据分布式方式选择的是哈希分区规则。而哈希分区 也有很多种实现方式,这里话主要图解节点取余hash、一致性hash、虚拟槽hash。hash算法取余hash:取余hash 会使用特定的数据,比如说用户Id、手机号等,再根据节点的数量N通过公式:hash(key) % N计算出哈希值。如下图:比如我们有三台 Redis 的主服务器,我们要存储用户id为10的数据。这时我们的公式为原创 2021-04-22 22:38:14 · 2327 阅读 · 1 评论 -
【Redis】三种集群模式——主从复制、哨兵、Cluster
Redis三种集群模式——主从复制、哨兵、Cluster传统的单机部署优点:架构简单,部署方便高性价比,缓存使用时无需备用节点,当然为了满足业务的高可用性,也可以牺牲一个备用节点,但同时刻只有一个实例对外提供服务高性能缺点:不保证数据的可靠性在缓存使用,进程重启后,数据丢失,即使有备用的节点解决高可用性,但仍然不能解决缓存预热问题,因此不适合数据可靠性要求高的业务高性能受限于单核CPU的处理能力(Redis是单线程机制),CPU为主要瓶颈,所以适合操作命令简单,排序、计算较少的场景。原创 2021-04-22 22:31:15 · 297 阅读 · 0 评论 -
【Redis】哨兵模式 Sentinel
哨兵模式 Sentinelsentinel 简介主从复制高可用存在的问题?手动故障转移、2. 写能力和存储能力受限,其他节点只是主节点的副本redis sentinel 分为几个节点,相当于redis的进程,不会存储数据,作用是完成redis的故障判断和故障转移,并且通知客户端的过程。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rTedTQeH-1618839534648)(D:\chencan\img\redis\redis sentinel.png)]原创 2021-04-19 21:39:38 · 79 阅读 · 0 评论 -
【Redis】Redis客户端实现的基本原理
请求响应流程redis高可用指的是服务端的高可用,但是我们需要的是服务端和客户端都高可用,则我们实现客户端的高可用怎么实现呢?客户端实现基本原理客户端接入流程:sentinel地址集合masterName不是代理模式步骤流程(一)遍历sentinel节点集合,获取对应的master,则需要master节点的信息,遍历sentinel节点集合,获取一个可用的sentinel节点(二)获取可以ping通的节点,叫sentinel-k,则通过一定的频率去获取执行sentinel原创 2021-04-19 20:33:57 · 223 阅读 · 1 评论 -
【redis】redis复制的原理与优化
redis 复制的原理与优化1. 什么是主从复制主从复制是在一个交换节点设立一高精度的基准时钟,通过传输链路把此基准时钟信号送到网中各个从节点,各个从节点利用锁相环技术把本地时钟频率锁定在基准时钟频率上,从而实现网内各节点之间的时钟信号同步 。简单点来说就是通过网络传输链路将主数据库的数据发送到某一台服务器上。建立一个和主数据库完全一样的数据库环境,称之为从数据库。后续如果主数据库的数据发生变化会及时的通知到从服务器上(从数据库会与主数据库建立连接)。redis中单机存在的问题:机器故障、容量瓶颈、原创 2021-04-15 22:36:35 · 106 阅读 · 0 评论 -
【Redis】Redis中的五种数据结构及位图、HyperLogLog、GEO等
Redisredis API通用命令keys 计算数据库所有的键 时间复杂度O(n)【一般在生产环境中使用】> keys * #遍历所有key>> ```mysql> 127.0.0.1:6379 > set hello word> 127.0.0.1:6379 > set java good> 127.0.0.1:6379 > set php best> 127.0.0.1:6379 > keys原创 2021-04-14 23:11:37 · 344 阅读 · 1 评论 -
【Redis】事务
redis 事务概述数据库的四大事务:ACID(原子性A、一致性C、隔离性I、持久性D)本质是一组命令的集合。事务支持一次执行多个命令,一个事务中所有命令都会被序列化。在事务执行过程,会按照顺序串行化执行队列中的命令,其他客户端提交的命令请求不会插入到事务执行命令序列中。命令的执行过程是是原子顺序执行的,但是不能保证原子性。命令解析Redis 提供了MULTI、EXEC、DISCARD、WATCH、UNWATCH命令。每个事务的操作都有 begin、 commit 和 rollback, beg原创 2021-04-14 22:44:40 · 87 阅读 · 0 评论 -
【Redis】Redis基础知识概述
今日内容1. redis 1. 概念 2. 下载安装 3. 命令操作 1. 数据结构 4. 持久化操作 5. 使用Java客户端操作redisRedis1. 概念: redis是一款高性能的NOSQL系列的非关系型数据库 1.1.什么是NOSQL NoSQL(NoSQL = Not Only SQL),意即“不仅仅是SQL”,是一项全新的数据库理念,泛指非关系型的数据库。 随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的S原创 2021-04-12 20:27:38 · 73 阅读 · 0 评论 -
【Redis】持久化——RDB和AOF
Redis持久化什么是持久化?利用永久性存储介质将数据进行保存,在特定的时间将保存的数据进行恢复的工作机制称为持久化。为什么要持久化防止数据的意外丢失,确保数据安全性Redis是一款单线程、高性能的基于内存的非关系型数据库,常用来做分布式缓存。Redis的数据全部都是存储在内存里,如果服务器突然宕机,数据就会全部丢失。Redis有持久化机制来保证服务器宕机的情况下数据不丢失。Redis有两种持久化的方式,RDB和AOF。将当前数据状态进行保存,快照形式,存储数据结果,存储格原创 2021-04-11 21:56:25 · 123 阅读 · 0 评论 -
【Redis】缓存三大问题:如何解决缓存雪崩、缓存击穿、缓存穿透
为什么要使用缓存?用户的数据一般都是存储于数据库,数据库的数据是落在磁盘上的,磁盘的读写速度可以说是计算机里最慢的硬件了。当用户的请求,都访问数据库的话,请求数量一上来,数据库很容易就奔溃的了,所以为了避免用户直接访问数据库,会用 Redis 作为缓存层,因为 Redis 是内存数据库,我们可以将数据库的数据缓存在 Redis 里,相当于数据缓存在内存,内存的读写速度比硬盘快好几个数量级,这样大大提高了系统性能。缓存的三大问题缓存雪崩通常我们为了保证缓存中的数据与数据库中的数据一致性,会给 R转载 2021-04-09 21:48:03 · 299 阅读 · 0 评论