- 浏览: 262683 次
- 性别:
- 来自: 杭州
博客专栏
-
Redis代码阅读
浏览量:23144
最新评论
-
sp42:
可否处理下排版?
由一个UndeclaredThrowableException带来的思考 -
sp42:
可否处理下排版?
异常处理经验小结之二:利用Spring AOP将check exception 转化为unchecked exception -
sp42:
谢谢
异常处理经验小结之一:不要直接抛出InvocationTargetException -
unflynaomi:
我也是这个原因,大赞!!!!
虚拟机ubuntu为什么不能上网? -
1234abc:
谢谢分享,很好的实例,赞一个
一个“诡异”的NumberFormatException
文章列表
tpn(taobao push notification)在使用redis计算消息未读数的过程中,遇到了一系列的问题,下面把这个过程整理了一下,也让大家了解这个纠结的过程,供大家以后使用redis或者做类似的功能时进行参考 redis在tpn里面主要是用于计算移动千牛(Android、IOS)上的消息未读数。tpn的未读消息数是基于bizId维度的,即同一个bizId(每条消息的业务id,如果商品id、订单id等),即使有多条消息,未读数也只能算1。因此在接收消息,计算移动千牛未读数的过程中,就需要对bizId去重,这个去重的功能就是通过redis来实现的。随着消息量的不断 ...
前几天线上一个功能莫名其妙没有正常执行,而且奇怪的这个功能模块以及很久没有改动了,而且一直运行的好好的,从没出问题,今天排查看日志,发现是程序在进行一段内存排序时,抛NumberFormatException了。
Exception in thread "main" java.lang.NumberFormatException: For input string: "30d"
这我就纠结了,因为内存排序是通过把从数据库去取出来的String转化成BigDecimal来进行排序的,而且NumberFormatException就是抛在这句代 ...
前段时间在调试项目中某个功能的时候,由于是在测试环境中,所以在通过RPC框架调用某个远程服务获取相关信息的时候,抛出了一个UndeclaredThrowableException。JDK的java doc是这么解释UndeclaredThrowableException的:如果代理实例的调用 ...
Redis有
内存数据库的赞誉,其支持一下几种数据结构:
1.
String
2.
Hashes
3.
List
4.
Set
本文从源代码角度来分析各种数据结构在
Redis
内部是如何存储和读取的。
在介绍各种数据结构之前,首先来介绍下
redisObject
这个
Struct
,
String
,
Hash
,
List
和
Set
在
Redis
内部都是以
redisObject
来存储的
/* ...
是介绍Redis网络监听的最后一篇文章,着重分析定时时间处理函数serverCron,这个函数其实已经和网络监听没多大关系了,当时因为其绑定在Redis自定义的事件库的定时事件上,所以放到一起来讲。serverCron的这个函数对Redis的正常运行来说很重要,对于Redis的使用者来说,最重要的就是能够迅速直观地看到Redis的当前的运行状况(keys,sizes,memory等),serverCron就能够使用户得知这些信息,此外,serverCron这个方法定时周期地运行,还承担了AOF Write,VM Swap,BGSAVE,Rehash的操作,使得Redis的运行更加平稳。还是来直接 ...
这篇文章接上一篇,主要介绍Redis网络监听流程的各个步骤。
aeCreateEventLoop
:创建用于循环监听的
eventLoop
,
Redis
支持主流的三种事件触发机制:
select ,epoll, kqueue,
可以通过在
config.h
里面配置
HAVE_EPOLL/
HAVE_KQUEUE
来根据不同的操作系统选择合适的机制:调用
ae_epoll.c/ae_select.c/ae_kqueue.c中的
aeApiCreate;创建
eventLoop
的时候没有指定
beforesleep
,在开始循环监听前将函数
...
接下来的三篇文章将对Redis的网络监听流程及涉及到事件库和各个主要方法进行介绍。
在介绍
redis的网络监听流程和事件库之前,我们先设想一下,如果我们不采用
libevent
等流行的开源库进行基于事件的网络监听,而是自己去实现一套基于事件的库去进行网络监听,需要考虑些什么,然后我们带着这些问题去分析
Redis是如果通过少量的代码来完成这个工作的。
在我认为,需要考虑的问题有以下一些(限于水平,暂时只能想到这些
):
1.
采用何种
事件触发机制
,是
epoll,
select,
kququ ...
前面写了一篇文章简单介绍Redis的list结构。再写完之后,我觉得有必要熟悉Redis的启动过程和如何读取Redis的命令,因此本文将通过分析代码来介绍Redis的启动过程,通过查看Redis 的启动脚本,得知Redis的启动时从Redis.c的main方法开始的。Redis启动可以分为以下几个步骤:
初始化Redis服务器全局配置
重置服务器Save参数(具体下文详解)和加载配置文件
初始化服务器
加载数据库
开始网络监听
一,初始化Redis服务器全局配置。这一步骤主要是主要是根据Redis.h中设置的Static值来初始化Redis服务器配置,这里设置是Red ...
Mysql InnoDB的数据库的简易恢复
- 博客分类:
- Mysql
因为我们项目组和别的项目组共享一台测试机,昨天别的组的一个兄弟在升级mysql的时候把我们测试用的mysql给remove掉了,因此今天捣鼓了一下如何恢复和备份mysql,按惯例,记下来,以便以后查看。
使用过mysql的都知 ...
ScheduledThreadPoolExecutor除了具有ThreadPoolExecutor的所有功能外,还可以延迟执行任务或者周期性的执行某个任务。scheduleWithFixedDelay和scheduleAtFixedRate就是用来完成这个功能的。平常使用scheduleAtFixedRate这个方法时并没有多想,但是这几天在实现一个功能的时候,需要考虑scheduleAtFixedRate所执行的task是否会影响任务的周期性,比如scheduleAtFixedRate(command,5,10,TimeUnit.SECONDS),那么这个command的执行会不会影响 ...
Redis
是一个开源的高性能key-value数据库,其很大程度上弥补了memeched这类key-value存储的不足(除了支持String外,还支持Hash,Set,sorted set, List),在部分场合对关系型数据库也起到了很好的补充作用。因为Redis的代码量并不多,因为我逐步阅读了其源代码,以期能对其有深入的理解。首先介绍Redis支持的各种数据结构。
Redis中的链表是双向链表,这一点可以由 adlist.h 中代码得出:
typedef struct listNode {
struct listNode *prev;
s ...
Linux下mysql的卸载和安装
- 博客分类:
- Linux
工作中要在一台centos系统的机器上装mysql,而且这个机器上以前装过mysql了,所有还要把以前的装得mysql删除,然后再新装。由于以前没在linux上装过mysql,折腾了好一会才整好。因此记录下来,以备以后需要时查看。
第一,删除机器上已装的mysql.
查找以前是否有安装过mysql rpm -qa|grep -i mysql
删除mysql: rpm -ev 包名,如 rpm -e mysql-4.1.12-3.RHEL4.1
删除老版本mysql的开发头文件和库: rpm -fr /usr/lib/mysql
rm -f ...
把秒数转化为:小时:分:秒
- 博客分类:
- Java综合
今天在工作中有这么一个小功能需要实现,在DB里面,经过转码的video的duration是按秒来统计的,但是我们在页面显示的时候,一般都是这与显示的:小时:分:秒,04:34:45。所以就需要把秒转化为这个格式。代码很简单,这里记录下,以便以后查看
public static String getDuration(int durationSeconds){
int hours = durationSeconds /(60*60);
int leftSeconds = durationSeconds % (60*60);
int minutes = le ...
如何处理网络异常的浅见
- 博客分类:
- Java综合
虽然说网络连接在大多数情况下,都是正常的,但大家在互联网上冲浪的时候,肯定都遇到过网络不正常的情况,比如大家在上XX网站的时候,经常会被提示:该网站暂不可用/该访问被拒绝/找不到该网站等等,你懂得。 ...
对于Exception的处理,究竟是采用check exception还是unchecked exception,众说纷纭,业绩很多大牛都有不同的意见,本文的关注点不在这个话题上,而是着重于,当我们程序中,需要把各种check exception转化为自定义的和业务逻辑相关的Runtime exceptionn的时候,如何利用Spring AOP来简化这一转化过程。
在实际工作中,如果我们也想像Spring Jdbctemplate一样,把check exception转化为Runtime exception的话,笨一点的办法就是在每次抛出check exception的地方都将其捕获,然 ...