当前位置: 首页 > news >正文

做网站首页的尺寸专业整站优化

做网站首页的尺寸,专业整站优化,wordpress 500错误,山东临沂网站建设Redis 底层数据结构 字符串底层存储 在Redis 中,字符串有三种存储编码方式: int编码 、embstr编码和raw编码 int编码 当value是一个整数且值大小不超过8个字节,就会是哟红int编码,ptr直接存储数值 embstr 编码 embstr对象用于…

Redis 底层数据结构

字符串底层存储

在Redis 中,字符串有三种存储编码方式: int编码 、embstr编码和raw编码

int编码
当value是一个整数且值大小不超过8个字节,就会是哟红int编码,ptr直接存储数值

embstr 编码

embstr对象用于存储比较短的字符串,embstr编码中RedisObject结构与ptr指向的SDS 结构在内存中是连续的,内存分配次数和内存释放次数均是一次。
raw编码会分别调用两次内存分配函数来分别创建RedisObject结构个SDS结构。

hash对象

Redis中,hash类型的value可以是一个hash表,底层编码可以是ziplist,也可以是hashtable。
默认情况下,当元素个数小于512个时,底层使用ziplist存储数据。

ziplist
元素保存的字符串长度较短且元素个数较少。(长度小于64字节,个数小于512),出于节约内存考虑,hash表会使用ziplist作为底层实现,ziplist是一块连续的内存,里面每一个节点保存了对应的key和value,然后每个节点很紧凑地存储在一起。
优点是: 没有冗余空间
缺点是: 插入新元素需要调用realloc扩展内存,这可能会导致内存重分配

hashtable

元素比较多是就会使用hashtable编码作为底层实现。此时RedisObject的ptr指针指向一个dict结构,dict结构中的ht数组有两个元素h[0]和h[1]。通常h[0]保存键值对,h[1]只在渐进式rehash时使用,hashtable是通过链地址法来解决冲突的。

Zset

Zset在存储时会将元素按照score从低到高排列,底层是通过跳表实现的。

ziplist
当元素较少时(元素长度小于64字节,且元素个数小于128),Zset的底层编码使用ziplist实现,所有元素按照score从低到高排序。

skiplist + dict
当元素较多时,使用skiplist + dict来实现。skiplist存储元素的值和score,并且将所有元素按照分值有序排列。便于以O(logN)的时间复杂度插入,删除,更新,及根据Score进行范围性查找。

dict存储元素的值和Score的映射关系,便于以O(1)的时间复杂度查找元素对应的分值。

跳表

跳表就是层次化的链表结构,它由多个链表组成。只有底层的链表保存节点数据,一般来说每两个节点选出一个节点作为下一级索引的节点,让下一级 索引的节点数量为本机索引节点数量的一半。依次类推直至最顶层索引节点数为1。
原理是每次查找数据时,先在最上层查找,然后再定位到下一层,层层定位,直至最终找到目标数据。这种方式不用遍历整个链表,而是跳跃着差,这样就使得查找时间复杂度退化到了logn

为什么不使用List、红黑树或平衡二叉树呢?

List是顺序㽾,访问速度很快,但是添加和删除操作是O(N)操作。至于红黑树和平衡二叉树,每次更新redis的值,都要消耗O(logn)的复杂度调整树结构,而跳跃表只需要调整局部链表结构就行,显然跳跃表更适合。
跳跃表支持平均O(logN)、最坏O(N)的复杂度进行节点查找,还可以通过顺序性操作来批量处理节点。
在大部分情况下,跳跃表的效率与平衡树媲美,但是跳跃表的实现要比平衡树要来得更为简单。

Redis 常用数据结构底层实现

缓存雪崩

重复排队、并发超卖、数据不一致

redis分布式锁

  1. 单机多线程下存在并发问题。 – 在JVM层面加锁,如synchronized或ReentrantLock
  2. 分布式部署下存在超卖问题。 --使用Redis分布式锁,加解锁。

String value = UUID.random().toString();
Boolean flag = stringRedisTemplate.opsForValue().setIfAbsent(REDIS_LOCK, value); //加锁
stringRedisTemplate.delte(REDIS_LOCK)

  1. 秒杀业务逻辑代码块出现异常时可能无法释放掉锁。 — 增加try -catch 语句块 在finally代码块释放锁
  2. 部署了秒杀服务的服务器宕机 – 对lockkey 增加过期时间的设定
    在这里插入图片描述5. 原子性考虑。 加锁和设置过期时间非原子操作
    在这里插入图片描述

EX seconds – Set the specified expire time, in seconds.
PX milliseconds – Set the specified expire time, in milliseconds.

  1. 误删其他事务的锁。 必须在删除锁之前判断是否是自己的加的锁。
    在这里插入图片描述
    在这里插入图片描述
  2. 判断是否是自己加的锁 与 解锁非原子性操作,那么会出现判断加锁与解锁不是同一个客户端导致误解锁

在这里插入图片描述

  • 利用LUA脚本
    在这里插入图片描述

  • 使用Redis的事务

在这里插入图片描述

仍然存在 redisLock 过期时间小于业务执行时间的问题,也就是如何实现分布式锁的续期问题。
再者在集群环境下还存在Redis的主从不一致

Redison
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  1. 在超高并发下,可能出现IllegalMonitorStateException

在这里插入图片描述

在这里插入图片描述

select … for update后,对所在行加了互斥锁,而你使用select …在Innodb里是快照读,是不涉及到锁的问题的,如果想要验证加锁是否成功,需要对查询加共享锁 lock in share mode或互斥锁for update

注意需要两个会话都开启事务:

select * from tmp_file_bk limit 0,10 for update;

之后会话2,使用

select * from tmp_file_bk where id = 106 lock in share mode ;

也无法访问到

http://www.lbrq.cn/news/2688373.html

相关文章:

  • 云职上海企业服务有限公司做网络优化的公司排名
  • 做网站图片分辨率优化是什么意思?
  • 一站式网站建设与运营风云榜小说排行榜
  • 电子产品网站建设 实训报告南京seo排名优化
  • 开封网站优化公司危机公关处理方案
  • 瑞丽住建局网站推文关键词生成器
  • 商丘做网站用什么程序网站维护
  • 网站上传用什么软件做视频格式广告优化师
  • 网站上传的图片怎么做的清晰度网站seo关键词排名
  • 做淘宝客优惠券网站必须是企业吗网站测速
  • 网站制作与维护费用seo关键词排名优化工具
  • 做企业平台的网站有哪些内容抖音seo优化软件
  • 莱芜公司做网站专业做网站建设的公司
  • 辽宁地矿建设集团有限公司网站合肥关键词排名提升
  • 浙江省住房和建设厅网站全国各城市感染高峰进度查询
  • 高端做网站价格查询网站域名
  • 推动全省政府网站建设百度北京分公司官网
  • 技术社区网站开发软件培训机构排名
  • 四川电脑网站建设厦门网站seo
  • 查企业营业执照的网站查询域名网站
  • 莆田个人外贸网站建设游戏推广员每天做什么
  • 北京 网络发布山东服务好的seo
  • 新冠三阳最新消息上海百度整站优化服务
  • 济南造价工程信息网重庆seo结算
  • 美工做网站尺寸多少钱苹果被曝开发搜索引擎对标谷歌
  • 已经有域名 怎么修改网站如何优化网站
  • 自己有网站 做app企业网站的推广形式有
  • 海南省建设考试网站首页上海野猪seo
  • 企业网络营销网站婚恋网站排名前三
  • 开平做网站百度搜索引擎官网入口
  • 华为悦盒EC6108V9-1+4G版-盒子有【蓝色USB接口】的特殊刷机说明
  • 基于CNN与Transformer的无人机应急救援网络异常流量检测
  • 数据结构:后缀表达式:结合性 (Associativity) 与一元运算符 (Unary Operators)
  • 【限时分享:Hadoop+Spark+Vue技术栈电信客服数据分析系统完整实现方案
  • 自动化备份全网服务器数据平台项目
  • MSE ZooKeeper:Flink高可用架构的企业级选择