201812-17 Redis是单线程的,但Redis为什么这么快? 近乎所有与Java相关的面试都会问到缓存的问题,基础一点的会问到什么是“二八定律”、什么是“热数据和冷数据”,复杂一点的会问到缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等问题,这些看似不常见的概念,都与我们的缓存服务器相关,一般常用的缓存服务器有Redis、Memcached等,而笔者目前最常用的也只有Redis这一种。如果你在以前面试的时候还没有遇到过面试官问你《为什么说Redis是单线... 继续阅读 >
201810-19 携程实时用户行为系统实践 携程实时用户行为服务作为基础服务,目前普遍应用在多个场景中,比如猜你喜欢(携程的推荐系统),动态广告,用户画像,浏览历史等等。以猜你喜欢为例,猜你喜欢为应用内用户提供潜在选项,提高成交效率。旅行是一项综合性的需求,用户往往需要不止一个产品。作为一站式的旅游服务平台,跨业务线的推荐,特别是实时推荐,能实际满足用户的需求,因此在上游提供打通各业务线之间的用户行为数据有很大的必要性。携程原有... 继续阅读 >
201808-21 一起看懂Redis两种持久化方式的原理 Redis为持久化提供了两种方式:RDB:在指定的时间间隔能对你的数据进行快照存储。AOF:记录每次对服务器写的操作,当服务器重启的时候会重新执行这些命令来恢复原始的数据。本文将通过下面内容的介绍,希望能够让大家更全面、清晰的认识这两种持久化方式,同时理解这种保存数据的思路,应用于自己的系统设计中。持久化的配置RDB与AOF持久化的工作原理如何从持久化中恢复数据关于性能与实践建议持久... 继续阅读 >
201804-08 [Redis源码阅读]redis持久化 作为web开发的一员,相信大家的面试经历里少不了会遇到这个问题:redis是怎么做持久化的?不急着给出答案,先停下来思考一下,然后再看看下面的介绍。希望看了这边文章后,你能够回答这个问题。为什么需要持久化?由于Redis是一种内存型数据库,即服务器在运行时,系统为其分配了一部分内存存储数据,一旦服务器挂了,或者突然宕机了,那么数据库里面的数据将会丢失,为了使服务器即使突然关机也能保存数据,必须通... 继续阅读 >
201802-26 Redis 的 5 个常见应用场景 前言Redis是一个强大的内存型存储,具有丰富的数据结构,使其可以应用于很多方面,包括作为数据库、缓存、消息队列等等。如果你的印象中Redis只是一个key-value存储,那就错过了Redis很多强大的功能,下面就是实际应用场景中5个最普遍的案例。1.全页面缓存如果你使用的是服务器端内容渲染,你又不想为每个请求重新渲染每个页面,就可以使用Redis把常被请求的内容缓存起来,能够大大的降低页面请求的延迟... 继续阅读 >
201712-06 Redis 数据类型及应用场景 一、redis特点所有数据存储在内存中,高速读写提供丰富多样的数据类型:string、hash、set、sortedset、bitmap、hyperloglog提供了AOF和RDB两种数据的持久化保存方式,保证了Redis重启后数据不丢失Redis的所有操作都是原子性的,还支持对几个操作合并后的原子性操作,支持事务通常我们都把数据存到关系型数据库中,但为了提升应用的性能,我们应该把访频率高且不会经常变动的数据缓存到内存中。... 继续阅读 >
201709-22 Nginx 通过 Lua + Redis 实现动态封禁 IP 一、背景为了封禁某些爬虫或者恶意用户对服务器的请求,我们需要建立一个动态的IP黑名单。对于黑名单之内的IP,拒绝提供服务。二、架构实现IP黑名单的功能有很多途径:1、在操作系统层面,配置iptables,拒绝指定IP的网络请求;2、在WebServer层面,通过Nginx自身的deny选项或者lua插件配置IP黑名单;3、在应用层面,在请求服务之前检查一遍客户端IP是否在黑名单。为了方... 继续阅读 >
201706-27 Redis高级功能 - 慢查询日志 Redis提供了5种数据结构,但除此之外,Redis还提供了注入慢查询分析,RedisShell、Pipeline、事务、与Lua脚本、Bitmaps、HyperLogLog、PubSub、GEO等附加功能,这些功能可以在某些场景发挥很重要的作用.慢查询分析许多存储系统(如:MySQL)提供慢查询日志帮助开发与运维人员定位系统存在的慢操作.所谓慢查询日志就是系统在命令执行前后计算每条命令的执行时间,当超过预设阈值,就将这条命令的相关信息(例... 继续阅读 >
201703-20 缓存那些事 前言一般而言,现在互联网应用(网站或App)的整体流程,可以概括如图1所示,用户请求从界面(浏览器或App界面)到网络转发、应用服务再到存储(数据库或文件系统),然后返回到界面呈现内容。随着互联网的普及,内容信息越来越复杂,用户数和访问量越来越大,我们的应用需要支撑更多的并发量,同时我们的应用服务器和数据库服务器所做的计算也越来越多。但是往往我们的应用服务器资源是有限的,且技术变革是缓慢的,数... 继续阅读 >
201703-15 Redis之父:10x程序员应该具备哪些素质? 在开发界有一个长期引起争议的说法,那就是所谓的10x程序员是否存在?这个说法是Brooks,F.P在《没有银弹》中首次提出的,他认为在普通设计师(程序员)和优秀设计师(程序员)之间,有着10倍多的差异。对于10x程序员是否存在这个问题,开源键值存储数据库系统Redis的开发者antirez(SalvatoreSanfilippo)认为,如果把编程工作看作是一门“非线性”学科的话,那么不仅存在10x程序员,甚至连100x程序员这种异兽都有,同... 继续阅读 >
201611-30 Redis单机主从高可用性优化 redis是一款高性能的内存数据库,本文侧重描述redis在主从模式下遇到的一些问题以及如何调优,特别是在云环境下遇到的一些特殊问题,至于redis如何使用以及数据结构等,可以百度,网上有大量的资料。主结点在非集群环境的情况下,使用redis主从模式来保证业务的高可用性,因此在此种模式下,读写都在主机,要保证主机高性能必须在主机上尽量少的IO操作同时又要兼顾网络导致的主从断链而带来的频繁的fullsync,因此针对... 继续阅读 >
201611-23 Redis 主从配置心得及其高可用方案 redis主从复制过程:当配置好slave后,slave与master建立连接,然后发送sync命令。无论是第一次连接还是重新连接,master都会启动一个后台进程,将数据库快照保存到文件中,同时master主进程会开始收集新的写命令并缓存。后台进程完成写文件后,master就发送文件给slave,slave将文件保存到硬盘上,再加载到内存中,接着master就会把缓存的命令转发给slave,后续master将收到的写命令发送给slave。如果master同时收到... 继续阅读 >
201611-03 memcached与redis实现的对比 memcached和redis,作为近些年最常用的缓存服务器,相信大家对它们再熟悉不过了。前两年还在学校时,我曾经读过它们的主要源码,如今写篇笔记从个人角度简单对比一下它们的实现方式,权当做复习,有理解错误之处,欢迎指正。文中使用的架构类的图片大多来自于网络,有部分图与最新实现有出入,文中已经指出。一.综述读一个软件的源码,首先要弄懂软件是用作干什么的,那memcached和redis是干啥的?众所周知,数据一般会放在数... 继续阅读 >
201608-01 redis 常用命令 一:客户端启动redis./redis-server&二:在客户端打开redis操作窗口sudoredis-cli三:获取所有的keykeys*四:Hashes相关1:获取某个hash中全部的filed及value。hgetalluser2:设置hashfield为指定值,如果key不存在,则先创建。hsetmyhashfield1Hello3:同时设置hash的多个field。hmsetmyhashfield1Hellofield2World4:获取指定的hashfield: hgetmyhashfield 5:获取全部指定的hashfiled... 继续阅读 >
201601-27 Yii2.0使用Redis使用技巧缓存 前些天简单学习了下Redis,现在准备在项目上使用它了。我们目前用的是Yii2框架,在官网搜索了下Redis,就发现了yii2-redis这扩展。安装后使用超简单,打开common/config/main.php文件,修改如下。'cache'=>[//'class'=>'yii\caching\FileCache','class'=>'yii\redis\Cache',],'redis'=>['class'=>'yii\redis\Connection','hostname'=>'localhost','port'=>6379,'database'=>0,],... 继续阅读 >
201504-25 Windows下开机自动启动Redis的实现方法 Windows下安装Redis参考这篇文章:Windows下安装使用Redis及其PHP扩展1、将启动命令写入批处理文件createredis.bat(路径以自己的安装路径为准):E:\tools\redis\32bit\redis-server.exeE:\tools\redis\32bit\redis.conf2、利用vbs调用bat(路径以自己保存的createredis.bat路径为准):新建一个vbs文件openredis.vbs:CreateObject("WScript.Shell").Run"cmd/cE:\bat\createredis.bat",0接下来就是如何调用vbs了,我采... 继续阅读 >