新浪计数业务之Redis

今天听一个同事说新浪使用的是Redis,于是自己将研究的过程整理出来以备后用。

我们都知道微博这玩意儿现在很火,新浪作为国内最早使用redis,并且是国内最大的redis使用者,当然备受人们关注。新浪微博中一项很重要数据,计数类业务就用到了Redis。OK,废话不多说,直接切入主题。

 Redis是什么?

解析:一种内存型数据库,虽然其拥有了持久化机制。

Redis配置过程

首先声明,今天我们探讨的配置是在windows系统下

步骤一:下载redis文件包

下载的windows版本是redis-2.0.2,解压到D盘下,在redis-2.0.2中有以下文件

文件解析:

01.Cygwin1.dll:动态链接库文件

  02.Redis.conf  :redis配置文件

  03.Redis-benchmark.exe:性能测试,用以模拟同时由N个客户端发送多个SETs/GETs查询(类似于Apache的ab工具)

  04.Redis-check-aof.exe:更新日志检查(个人感觉这个非常有用,因为其会实时监测日志文件是否更新)

  05.Redis-check-dump.exe:本地数据库检查

  06.Redis-cli:redis命令行操作工具

  07.Redis-server.exe:Redis服务器的daemon启动程序

步骤二:启动Redis服务(conf文件是配置文件,若不指定,则redis-server.exe按默认方式启动)

所以,启动命令有两种写法

写法一:D:\redis-2.0.2>redis-server.exe

在这种场景下,服务启动的参数设置都会走默认值

写法二:D:\redis-2.0.2>redis-server.exe redis.conf(推荐方式)

既然启动的时候要读取配置文件的信息,那么我们在启动服务前先做一件事情,修正配置

文件中一个变量的开关,用高级记事本打开conf文件,然后Ctrl+F,输入appendonly,如下图,找到appendonly no ,将其值设置成yes

接下来就可以启动服务了,启动方式如下图

上图反映的是就是redis的服务开启效果,类似于SQL Server中在的MSSQL服务的开启,当然服务开启后,该窗口不能关闭,否则就代表你要关闭服务。当然可以通过参数的设置让服务在后台运行,但不属于我们今天讨论的范围。

步骤三:通过cmd窗口模拟一个客户端,底层当然还是通过Socket实现。

这时服务开启着,另外开一个窗口进行,设置客户端:

D:\redis-2.0.2>redis-cli.exe -h 192.168.8.50 -p 6379

OK,到此配置成功!

有人可能会问,那么如何将应用程序中的数据写入到redis中呢?

   解析:这是一个好问题,这里我们用Jedis为例来给大家做下演示。演示之前,希望大家能明白一件事情,redis是内存数据库,内存写满后,不会存储到硬盘上(VM不稳定,diskstore未启用),

针对这个不足,redis提供了两种持久化利器:一种是 Snapshotting(快照)也是默认方式,另一种是Append-only file(缩写aof)的方式。

快照缺点:因为两次快照操作之间是有时间间隔的,一旦数据库出现问题,那么快照文件中保存的数据并不是全新的,从上次快照文件生成到Redis停机这段时间的数据全部丢掉了。如果业务对数据准确性要求极高的话,就得采用aof持久化机制了。

Aof:aof 比快照方式有更好的持久化性,是由于在使用aof持久化方式时,redis会将每一个收到的写命令都通过write函数追加到文件中(默认是 appendonly.aof)。当redis重启时会通过重新执行文件中保存的写命令来在内存中重建整个数据库的内容。当然由于os会在内核中缓存 write做的修改,所以可能不是立即写到磁盘上。这样aof方式的持久化也还是有可能会丢失部分修改。不过我们可以通过配置文件告诉redis我们想要通过fsync函数强制os写入到磁盘的时机。有三种方式如下(默认是:每秒fsync一次):

01. appendfsync always //每次收到写命令就立即强制写入磁盘,最慢的,但是保证完全的持久化,不推荐使用

02.appendfsync everysec //每秒钟强制写入磁盘一次,在性能和持久化方面做了很好的折中,推荐

03、appendfsync no //完全依赖os,性能最好,持久化没保证

所以在配置文件中,我们采用的是everysec方式,也就是每隔1s钟,将内存中的数据flush到硬盘上,那么很多人又会问,写到硬盘的位置呢?文件名是什么呢?这统统都要依赖于配置文件的配置,上文已经说过默认会写入到redis目录的appendonly.aof文件中。

接下来就可以去下载Jedis,在Java项目中导入Jedis包,然后即可使用。


 1 import redis.clients.jedis.Jedis;
2 public class Test {
3
4 public static void main(String[] args) {
5 Jedis jj = new Jedis("192.168.8.50");
6 jj.set("name", "李小龙222");
7 String ss = jj.get("name");
8 System.out.println(ss);
9 }
10 }

  注意点:不能将redis取代数据库的位置,目前redis做数据库还不太靠谱。它支持的数据类型太少,而且查询功能太弱。redis并不是为了作为数据库使用的,它更多地是一个高速存取器,一般用作缓存和类似场景。如果你想找一个关系型数据库如mysql的替代者,推荐使用mongodb,支持海量数据,查询功能强大,数据类型支持广泛。目前已有一些团队在后台完全使用mongodb作为数据库。

当然新浪微博就是使用mysql+redis来做数据存储的。

Redis优点:

使用redis的好处是:
1)拥有多种数据结构,可以丰富cache的数据结构和方式。
2)有持久化的机制,能够保证数据在宕机后也不会丢失数据。

使用redis需要考虑的地方:
1)在使用前要需要对容量要有详细的规划
2)没有官方提供的集群方案
3)数据查询的能力肯定没有关系型数据库强

总结:关键的一句话,了解这个产品的特性和不足,把合适的产品用在合适的场景中。

新浪计数业务之Redis

时间: 2024-08-10 23:30:44

新浪计数业务之Redis的相关文章

大公司都有哪些开源项目~~~阿里,百度,腾讯,360,新浪,网易,小米等

红色字体是现阶段比较火的 ---------------------------------------------------------------------------------------------------------------- 奇虎360 https://github.com/Qihoo360 1.MySQL中间层 Atlas Atlas是由 Qihoo 360,  Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目.它在MySQL官方推出的MySQ

国内大公司的开源项目( 阿里 腾讯 百度 新浪 搜狐 豆瓣 大众点评)

阿里 阿里的开源项目很多,这也跟@淘宝正明的开源态度密不可分.有很多重量级的项目,例如LVS.Tengine,或者很有实践价值的中间件,例如 MetaQ(分布式消息系统).dubbo(RPC框架).cobar(数据库中间件),或者是Java世界的工具,例如druid.fastjson.都说国内Java公司的技术架构大部分来自阿里系,我觉得一方面来自阿里员工,一方面也可以来自阿里的开源项目. 地址有几个: https://github.com/alibaba 阿里的前端也挺活跃的,比较有名的就是s

001_汽车之家,新浪和360之间的交流

记addops两次分享交流 本着开放共赢的精神,addops团队分别组织并参加了与"汽车之家"."新浪"的技术交流分享会.此次交流不同于传统技术大会的形式,我们只讨论干货,在具体技术点上做了非常细致的讨论.在与这两个团队的技术分享讨论中,我们互相"碰撞出思维的火花","互相参考学习",可以说收获满满. 同时也欢迎其它公司运维团队积极与我们联系,共同交流,相互成长学习. 汽车之家 我们邀请了汽车之家运维团队来我司进行技术交流.

阿里,百度,腾讯,360,新浪,网易,小米等开源项目

奇虎360 https://github.com/Qihoo360 1.MySQL中间层 Atlas Atlas是由 Qihoo 360,  Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目.它在MySQL官方推出的MySQL-Proxy 0.8.2版本的基础上,修改了大量bug,添加了很多功能特性.目前该项目在360公司内部得到了广泛应用,很多MySQL业务已经接入了Atlas平台,每天承载的读写请求数达几十亿条. 主要功能:* 读写分离* 从库负载均衡* IP过滤*

微信公众号二次开发(二)-注册新浪SAE

新浪SAE:Sina App Engine是新浪提供的云服务,对个人提供免费的Web应用/业务开发托管.运行平台.我们就用它来作为我们的开发服务器测试环境. 注册新浪云http://sinacloud.com/ 创建SAE应用,使用PHP作为开发语言 填写运营者身份信息 进入后台 在后台查看总揽 该服务器我们就将利用它作为我们的二次开发服务器进行配置. 欢迎微信扫一扫或搜索关注我的"Windows自动化运维"公众号,我会每天定期发布Windows自动化运维的相关知识供大家讨论研究. 本

使用新浪云 Java 环境搭建一个简单的微信处理后台

前一段时间,写了一篇在新浪云上搭建自己的网站的教程,通过简单构建了一个 maven 的项目,展示部署的整个流程,具体的操作可以参看这里. 新浪云服务器除了可以搭建自己的网站以外,也非常的适合作为微信公众号回调地址来使用(熟悉微信公众号开发的朋友可能已经了解了,如果不太清楚请参看微信公众平台),微信公众号的开发需要一个公网可以访问的服务器,用于处理消息的 token 的验证,以及自身业务的定制开发.在这里,写了一些简单操作的例子,给大家参考. 准备 开发微信公众号首先要申请自己的公众号,或者获得相

央视《对话》:新浪曹国伟的互联网论剑招数

新浪CEO兼董事长曹国伟 昨晚,央视财经<对话>栏目集结了互联网大咖们同台亮相,乌镇论剑.新浪首席执行官兼董事长曹国伟的一席话,引来了网友关注."未来是移动互联的天下,这个发展速度比预想的快."就让我们一同来看看老曹的互联网论剑招数吧! 移动互联网解决信息对称  带来效率的提升 曹国伟认为,互联网的本质就是提高信息对称性,对于整个行业的发展趋势而言,互联网带来的最大的变化是效率的提升.提高生产者与消费者的联系,降低成本.随着移动互联网的不断增长,这种作用的效果就更加突出,更

新浪是如何分析处理32亿条实时日志的?

服务介绍 随着实时分析技术的发展及成本的降低,用户已经不仅仅满足于离线分析.目前我们服务的用户包括微博,微盘,云存储,弹性计算平台等十多个部门的多个产品的日志搜索分析业务,每天处理约32亿条(2TB)日志. 技术架构 简单介绍一下服务的技术架构: 这是一个再常见不过的架构了: (1)Kafka:接收用户日志的消息队列 (2)Logstash:做日志解析,统一成json输出给Elasticsearch (3)Elasticsearch:实时日志分析服务的核心技术,一个schemaless,实时的数

用python2.7,采集新浪博客

#coding=utf-8 #新浪博客 import urllib import re import os url=['']*1500 #每一骗博客的地址 title=['']*1500 #每一篇博客的标题 page=1 #博客分页 count=1 #文章计数 while page<=9: con=urllib.urlopen('http://blog.sina.com.cn/s/articlelist_1193491727_0_'+str(page)+'.html').read() i=0 h