Redis 缓存设计原则】的更多相关文章

基本原则 只应将热数据放到缓存中 所有缓存信息都应设置过期时间 缓存过期时间应当分散以避免集中过期 缓存key应具备可读性 应避免不同业务出现同名缓存key 可对key进行适当的缩写以节省内存空间 选择合适的数据结构 确保写入缓存中的数据是完整且正确的 避免使用耗时较长的操作命令,如:keys * Redis默认配置中操作耗时超过10ms即视为慢查询 一个key对应的数据不应过大 对于string类型,一个key对应的value大小应控制在10K以内,1K左右更优 hash类型,不应超过5000…
11.Redis缓存设计11.1 缓存的收益和成本11.2 缓存更新策略11.3 缓存粒度控制11.4 穿透优化11.5 无底洞优化11.6 雪崩优化11.7 热点key重建优化11.8 本章重点回顾…
Redis缓存设计及常见问题 缓存能够有效地加速应用的读写速度,同时也可以降低后端负载,对日常应用的开发至关重要.下面会介绍缓存使 用技巧和设计方案,包含如下内容:缓存的收益和成本分析.缓存更新策略的选择和使用场景.缓存粒度控制法.穿透问题优化.无底洞问题优化.雪崩问题优化.热点key重建优化. 缓存的收益和成本分析 下图左侧为客户端直接调用存储层的架构,右侧为比较典型的缓存层+存储层架构. 缓存加入后带来的收益和成本. 收益: ①加速读写:因为缓存通常都是全内存的,而存储层通常读写性能不够强悍…
基于python+mysql浅谈redis缓存设计与数据库关联数据处理 by:授客  QQ:1033553122 测试环境 redis-3.0.7 CentOS 6.5-x86_64 python 3.3.2 基于Python操作Redis 1.创建示例数据库表 CREATE TABLE tb_signin_rank( id INT, user_name VARCHAR(10) COMMENT '用户名', signin_num INT COMMENT '签到次数', signin_time D…
1:缓存技术和框架的重要性 互联网的一些高并发,高性能的项目和系统中,缓存技术是起着功不可没的作用.缓存不仅仅是key-value的简单存取,它在具体的业务场景中,还是很复杂的,需要很强的架构设计能力.我曾经就遇到过因为缓存架构设计不到位,导致了系统崩溃的案例. 2:缓存的技术方案分类 1)是做实时性比较高的那块数据,比如说库存,销量之类的这种数据,我们采取的实时的缓存+数据库双写的技术方案,双写一致性保障的方案. 2)是做实时性要求不高的数据,比如说商品的基本信息,等等,我们采取的是三级缓存架…
书签系统 create table book ( bookid int, title char(20) )engine myisam charset utf8; insert into book values (5 , 'PHP圣经'), (6 , 'ruby实战'), (7 , 'mysql运维'), (8, 'ruby服务端编程'); create table tags ( tid int, bookid int, content char(20) )engine myisam charse…
Redis我们一般是用作缓存,扛并发:或者用于某些特定的业务场景,比如前面说到redis各种数据类型的使用场景以及redis的哨兵和集群模式. 这里主要整理了下redis用作缓存,存在的一些问题,以及改善方案. 简单的流程就像这个样子,一般请先到缓存区获取,如果缓存没有再到后端的数据库去查询. 1.缓存穿透 缓存穿透是指,是指查询一个根本不存在数据,这样缓存层里面没有,就会去访问后面的存储层了.如果有大量的这种恶意请求过来,都打向后面的存储层.显然我们的存储层是扛不住这样的压力.这样缓存就失去了…
Redis缓存设计及常见问题 缓存能够有效地加速应用的读写速度,同时也可以降低后端负载,对日常应用的开发至关重要.下面会介绍缓存使用技巧和设计方案,包含如下内容:缓存的收益和成本分析.缓存更新策略的选择和使用场景.缓存粒度控制法.穿透问题优化.无底洞问题优化.雪崩问题优化.热点key重建优化. 缓存的收益和成本分析 下图左侧为客户端直接调用存储层的架构,右侧为比较典型的缓存层+存储层架构. 缓存加入后带来的收益和成本. 收益:①加速读写:因为缓存通常都是全内存的,而存储层通常读写性能不够强悍(例…
数据库历险记(三) | 缓存框架的连环炮   文章首发于微信公众号「陈树义」,专注于 Java 技术分享的社区.点击链接扫描二维码,与500位小伙伴一起共同进步.微信公众号二维码 http://p3npq6ecr.bkt.clouddn.com/blog/chenshuyi_gongzhonghao_guide_full.jpg 最近在思考数据库以及缓存的问题,发现这些知识点其实是有一点关联的,于是这篇文章通过一个连环提问的方式将这些知识点串联起来. 问:为什么要用 Memcached.Redi…
一.概述 由于架构设计一里面如果多平台公用相同Key的缓存更改配置后需要多平台上传最新的缓存配置文件来更新,比较麻烦,更新了架构设计二实现了缓存配置的集中管理,不过这样有有了过于中心化的问题,后续在看看如何修改 总体设计思路如下: 项目结构如下: 二.服务端(提供Key配置文件管理及将Key配置存到缓存中) KeyConfigList.xml缓存Key配置文件[与前一版一致] <?xml version="1.0" encoding="utf-8" ?>…
Redis缓存的设计.性能.应用与数据集群同步 http://youzhixueyuan.com/design-performance-and-application-of-redis-cache.html Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库.Redis本质上是一个Key-Value类型的内存数据库,很像memcached,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘上进行保存. 因为是纯内存操作,Redis…
说明:Java开源生鲜电商平台-redis缓存在商品中的设计与架构. 1. 各种计数,商品维度计数和用户维度计数 说起电商,肯定离不开商品,而附带商品有各种计数(喜欢数,评论数,鉴定数,浏览数,etc),Redis的命令都是原子性的,你可以轻松地利用INCR,DECR等命令来计数. 商品维度计数(喜欢数,评论数,鉴定数,浏览数,etc)  采用Redis 的类型: Hash. 如果你对redis数据类型不太熟悉,可以参考 http://redis.io/topics/data-types-int…
Java生鲜电商平台-redis缓存在商品中的设计与架构 说明:Java开源生鲜电商平台-redis缓存在商品中的设计与架构. 1. 各种计数,商品维度计数和用户维度计数 说起电商,肯定离不开商品,而附带商品有各种计数(喜欢数,评论数,鉴定数,浏览数,etc),Redis的命令都是原子性的,你可以轻松地利用INCR,DECR等命令来计数. 商品维度计数(喜欢数,评论数,鉴定数,浏览数,etc)  采用Redis 的类型: Hash. 如果你对redis数据类型不太熟悉,可以参考 http://r…
缓存能够有效地加速应用的读写速度,同时也可以降低后端负载,对日常应用的开发至关重要.但是将缓存加入应用架构后也会带来一些问题,本章将针对这些问题介绍缓存使用技巧和设计方案,包含如下内容: □ 缓存的收益和成本分析. □ 缓存更新策略的选择和使用场景. □ 缓存粒度控制方法. □ 穿透问题优化. □ 无底洞问题优化. □ 雪崩问题优化. 口 热点key重建优化. 1.缓存的收益和成本 图11-1左侧为客户端直接调用存储层的架构,右侧为比较典型的缓存层+ 存储层架构,下面分析一下缓存加入带来的收益和…
一些项目整理出的项目中引入缓存的架构设计方案,希望能帮助你更好地管理项目缓存,作者水平有限,如有不足还望指点. 一.基础结构介绍 项目中对外提供方法的是CacheProvider和MQProvider两个类,一切缓存或队列应用都从这里做入口,后期更换缓存或队列只需要更改后面的提供者即可 主要结构设计分为三部分: 1.Key管理(用于管理缓存Key.过期时间.是否启用.调用识别Key等) Configs -> Cache -> KeyConfigList.xml(配置Key的具体信息) Cach…
1.缓存的受益和成本 1.1 受益 1.可以加速读写:Redis是基于内存的数据源,通过缓存加速数据读取速度 2.降低后端负载:后端服务器通过前端缓存降低负载,业务端使用Redis降低后端数据源的负载等 1.2 成本 1.数据不一致:后端数据源中的数据缓存到Redis,如果后端数据库中的数据被更新时,根据更新策略不同,Redis缓存层中的数据和数据源的数据有时间窗口不一致 2.代码维护成本:多了一层缓存逻辑,以前只需要读取后端数据库,现在还需要维护缓存的读写以及Redis与数据库的连接等 3.运…
一.缓存的收益和成本 左侧为客户端直接调用存储层的架构,右侧为比较典型的缓存层+存储层架构, 缓存加入后带来的收益如下: 加速读写:因为缓存通常都是全内存的(例如Redis.Memcache),而存储层通常读写性能不够强悍(例如MySQL),通过缓存的使用可以有效地加速读写,优化用户体验. 降低后端负载:帮助后端减少访问量和复杂计算(例如很复杂的SQL语句),在很大程度降低了后端的负载. 缓存加入后带来的成本如下: 数据不一致性:缓存层和存储层的数据存在着一定时间窗口的不一致性,时间窗口跟更新策…
一.守护进程是什么? Linux Daemon(守护进程)是运行在后台的一种特殊进程.它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件.它不需要用户输入就能运行而且提供某种服务,不是对整个系统就是对某个用户程序提供服务.Linux系统的大多数服务器就是通过守护进程实现的.常见的守护进程包括系统日志进程syslogd. web服务器httpd.邮件服务器sendmail和数据库服务器mysqld等. 守护进程一般在系统启动时开始运行,除非强行终止,否则直到系统关机都保持运行.守护进…
1.什么是开闭原则 开闭原则的英文是Open Closed Principle,缩写就是OCP.其定义如下: 软件实体(模块.类.方法等)应该"对扩展开放.对修改关闭". 从定义上看,这个原则主要包含两部分: 对扩展开放:" 这意味着模块的行为是可以扩展的.当应用程序的需求改变时,我们可以对其模块进行扩展,使其具有满足那些需求变更的新行为.换句话说,我们可以改变模块的功能. 对修改关闭:" 对模块行为进行扩展时,不必改动该模块的源代码或二进制代码.模块的二进制可执行…
系列文章 设计原则:单一职责(SRP) 设计原则:开闭原则(OCP) 设计原则:里式替换原则(LSP) 设计原则:接口隔离原则(ISP) 设计原则:依赖倒置原则(DIP) 何谓高质量代码? 理解RESTful API 1 定义 里氏原则的英文是Open Closed Principle,缩写就是OCP.其定义有两种 定义1: If S is a subtype of T, then objects of type T may be replaced with objects of type S,…
前言 本篇博文来自一次公司内部的前端分享,从多个方面讨论了在设计接口时遵循的原则,总共包含了七个大块.系卤煮自己总结的一些经验和教训.本篇博文同时也参考了其他一些文章,相关地址会在后面贴出来.很难做到详尽充实,如果有好的建议或者不对的地方,还望不吝赐教斧正. 一.接口的流畅性 好的接口是流畅易懂的,他主要体现如下几个方面: 1.简单 操作某个元素的css属性,下面是原生的方法: document.querySelector('#id').style.color = 'red'; 封装之后 fun…
先从web session的共享说起   许多系统需要提供7*24小时服务,这类系统肯定需要考虑灾备问题,单台服务器如果宕机可能无法立马恢复使用,这必定影响到服务.这个问题对于系统规模来说,从小到大可能面临的难度会相差很大.但对于原理来说其实就是需要准备备份系统随时可以替代正在服务的系统,也就是无论何时都有服务器可以提供服务.也就是灾备系统或者负载均衡.   提供灾备系统或者负载均衡系统都需要面临一个问题,那就是如何解决共享数据的问题.对于web服务器而言首先要解决的就是web session共…
前言:事先说明:在实际应用中这种做法设计需要各位读者自己设计,本文只提供一种思想.准备工作:安装后本地数redis服务器,使用mysql数据库,事先插入1000万条数据,可以参考我之前的文章插入数据,这里不再细说.我大概的做法是这样的,编码使用多线程访问我的数据库,在访问数据库前先访问redis缓存没有的话在去查询数据库,需要注意的是redis最大连接数最好设置为300,不然会出现很多报错. 贴一下代码吧 package select; import redis.clients.jedis.Je…
在邮件列表和讨论区中有很多与REST和Web API相关的讨论,下面仅是我个人对这些问题的一些见解,并没有绝对的真理,InnoQ的首席顾问Oliver Wolf在GOTO Berlin大会上开始自己的演讲“Web API设计原则”时如是说. 不要考虑端点.SOAP有一个单独入口点的外观.相比之下Web有很多入口点,它们建立在关系上,彼此之间相互连接,并且以超媒体作为关键要素.为了不让你的API成为一个只有一种接入方式的黑洞,你应该使用超媒体控制按照对听众有意义的表现方式去链接你的资源. 不要在A…
RESTful接口设计原则/最佳实践(学习笔记) 原文地址:http://www.vinaysahni.com/best-practices-for-a-pragmatic-restful-api 1.RESTful接口建议统一使用复数,而不是单数2.不建议使用HATEOAS3.在大多数的教案中,都推荐使用Accept Header来指明是xml还是son,而作者建议直接在url中增加.json或者.xml4.使用snake_case命名风格来给RESTful URL命名,而不是camelCas…
说在前面,这篇文章是无意中发现的,因为感觉写的很好,所以翻译了一下.由于英文水平有限,难免有出错的地方,请看官理解一下.翻译和校正文章花了我大约2周的业余时间,如有人愿意转载请注明出处,谢谢^_^ Principles of good RESTful API Design 好RESTful API的设计原则 Good API design is hard! An API represents a contract between you and those who Consume your da…
在之前的Discuz!NT缓存的架构方案中,曾说过Discuz!NT采用了两级缓存方式,即本地缓存+memcached方式.在近半年多的实际运行环境下,该方案经受住了检验.现在为了提供多样式的解决方案,我在企业版里引入了Redis这个目前炙手可热的缓存架构产品,即将memcached与Redis作为可选插件方式来提供了最终用户,尽管目前测试的结果两者的差异不是很大(毫秒级),但我想多一种选择对用户来说也是好的. 闲话不多说了,开始今天的正文吧.         熟悉我们产品的开发者都知道,我们的…
转载:http://space.itpub.net/17007506/viewspace-616852 腾讯QQGame游戏同时在线的玩家数量极其庞大,为了方便组织玩家组队游戏,腾讯设置了大量游戏室(房间),玩家可以选择进入属意的房间,并在此房间内找到可以加入的游戏组(牌桌.棋盘等).玩家选择进入某个房间时,必须确保此房间当前人数未满(通常上限为400),否则进入步骤将会失败.玩家在登入QQGame后,会从服务器端获取某类游戏下所有房间的当前人数数据,玩家可以据此找到未满的房间以便进入.    …
rest,即REST(Representational State Transfer表述性状态转移)是一种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性. 简介 REST (REpresentational State Transfer,表述性状态转移) .REST 指的是一组架构约束条件和原则.满足这些约束条件和原则的应用程序或设计就是RESTful. REST 定义了一组体系架构原则,您可以根据这些原则设计以系统资源为中心的 Web 服务,包括使用不同语言编写的客户端…
使用redis缓存加索引处理数据库百万级并发 前言:事先说明:在实际应用中这种做法设计需要各位读者自己设计,本文只提供一种思想.准备工作:安装后本地数redis服务器,使用mysql数据库,事先插入1000万条数据,可以参考我之前的文章插入数据,这里不再细说.我大概的做法是这样的,编码使用多线程访问我的数据库,在访问数据库前先访问redis缓存没有的话在去查询数据库,需要注意的是redis最大连接数最好设置为300,不然会出现很多报错. 贴一下代码吧 1 2 3 4 5 6 7 8 9 10 1…