惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

美团技术团队
P
Privacy International News Feed
P
Proofpoint News Feed
Security Archives - TechRepublic
Security Archives - TechRepublic
C
CXSECURITY Database RSS Feed - CXSecurity.com
Know Your Adversary
Know Your Adversary
Security Latest
Security Latest
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Attack and Defense Labs
Attack and Defense Labs
NISL@THU
NISL@THU
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
W
WeLiveSecurity
GbyAI
GbyAI
N
News and Events Feed by Topic
N
News | PayPal Newsroom
Y
Y Combinator Blog
C
CERT Recently Published Vulnerability Notes
N
Netflix TechBlog - Medium
S
Security Affairs
Spread Privacy
Spread Privacy
罗磊的独立博客
腾讯CDC
MyScale Blog
MyScale Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
L
LINUX DO - 热门话题
The Cloudflare Blog
L
LangChain Blog
博客园_首页
H
Hacker News: Front Page
宝玉的分享
宝玉的分享
Martin Fowler
Martin Fowler
博客园 - 聂微东
SecWiki News
SecWiki News
A
Arctic Wolf
爱范儿
爱范儿
Google Online Security Blog
Google Online Security Blog
T
Threat Research - Cisco Blogs
Hacker News - Newest:
Hacker News - Newest: "LLM"
有赞技术团队
有赞技术团队
The GitHub Blog
The GitHub Blog
Cyberwarzone
Cyberwarzone
博客园 - 叶小钗
V
Visual Studio Blog
V
V2EX
T
Tailwind CSS Blog
Project Zero
Project Zero
T
The Blog of Author Tim Ferriss
F
Fortinet All Blogs
MongoDB | Blog
MongoDB | Blog
D
Docker

博客园 - 轮回

《Vibe Coding 入门宝典:非程序员的AI开发指南》一本改变软件生产方式的开源书 OpenAI API 百度文心大模型API测试 AI工具导航 一键生成dotnet5项目解决方案 倡议发起博客园#爷青回#挑战活动 1024快乐,加班使我快乐,福报如圣光醍醐灌顶! 记一次断电引起的mongodb彻底奔溃【转载】 dotnet core 3.0 swagger 显示枚举描述 dotnet core swagger filter 隐藏接口和显示枚举描述 dotnet core 项目脚手架这种小事嘛... .net core 2.2 EF oracle db first 不同语言的水仙花性能比较【Test1W】 application.properties详解 --springBoot配置文件【转载】 以太坊客户端Geth命令用法-参数详解【转载】 CentOS7搭建以太坊私有链 【Java编码规范】《阿里巴巴Java开发手册(正式版)》【转载】 SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)【转载】 Eclipse快捷键大全(转载) 如何评价微软Connect 2015?[转载]
在redis一致性hash(shard)中使用lua脚本的坑
轮回 · 2015-12-11 · via 博客园 - 轮回

     redis 2.8之前的版本,为了实现支持巨量数据缓存或者持久化,一般需要通过redis sharding模式来实现redis集群,普遍大家使用的是twitter开源的Twemproxy。

twemproxy不会增加redis的性能指标数据,据业界测算,使用twemproxy相比直接使用redis会带来~10%的性能下降。   但是单个redis进程的内存管理能力有限。据测算,单个redis进程内存超过20G之后,效率会急剧下降。目前,我们给出的建议值是单个redis最好配置在8G以内。8G以上的redis缓存需求,通过twemproxy来提供支持。

twemproxy

不会增加

redis

的性能指标数据,

据业界测算,

使用

twemproxy

相比直接使用

redis

会带来

~10%

的性能下降。

但是单个

redis

进程的内存管理能力有限。

据测算,

单个

redis

进程内存超过

20G

之后,

效率

会急剧下降。目前,我们给出的建议值是单个

redis

最好配置在

8G

以内。

8G

以上的

redis

缓存需求,通过

twemproxy

来提供支持。

     twemproxy的配置信息填写在nutcracker.yml之中,默认的查找位置是在conf目录下,也可以通过-c参数指定。举个栗子:

twem1:

  listen:"127.0.0.1:22121"

  hash:fnv1a_64

  distribution:ketama

  auto_eject_hosts:false

  server_failure_limit:1

  server_retry_timeout:60000

  redis:true

  servers:

   -"IP1:6379:1 shard1-master"

     你编译或者下载个老版本的ServiceStack.Redis组件(新版本收费了,有貌似1小时6000次的上限,https://servicestack.net/)。然后呢,你可以安心的读写redis了,看起来一切都很美好,某一天发现为了更新一个值,需要频繁的读写redis,这不科学,于是你继续发掘,发现redis支持lua脚本,很多事务性的操作可以直接交给lua脚本一次完成,分分钟改改代码,发个新版本,一些看起来又安逸了。

     突然,客服投诉来啦,说某个数据值不对,查数据库,数据正确的。查redis,哎~果然不对,redis没更新(假设redis是用来做缓存的,mysql做持久化),难道删除redis key更新缓存的方法有问题?你划拉代码看看没啥问题,传递一批key让lua脚本循环删掉这些key,从而达到过期缓存的目的,代码简单,流程清晰。RedisDesktopManager直连redis删除key,ok的,调试代码,的确大概有一半的redis key删除不掉,此时你就掉到redis sharding模型下执行lua脚本的坑里了。

坑:redis sharding模型下执行lua脚本时,假设key1在shard1,lua+key1可不一定在shard1。

  即,在proxy上对key1 get/set时,Twemproxy对key1哈希计算后会保证分配到固定的shard上,但通过代理调用lua脚本批量处理redis key时,哈希散列可能落在不同的shard上。