`
文章列表
     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的时候把我们测试用的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 ...
   工作中要在一台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 ...
     今天在工作中有这么一个小功能需要实现,在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 ...
       虽然说网络连接在大多数情况下,都是正常的,但大家在互联网上冲浪的时候,肯定都遇到过网络不正常的情况,比如大家在上XX网站的时候,经常会被提示:该网站暂不可用/该访问被拒绝/找不到该网站等等,你懂得。 ...
对于Exception的处理,究竟是采用check exception还是unchecked exception,众说纷纭,业绩很多大牛都有不同的意见,本文的关注点不在这个话题上,而是着重于,当我们程序中,需要把各种check exception转化为自定义的和业务逻辑相关的Runtime exceptionn的时候,如何利用Spring AOP来简化这一转化过程。 在实际工作中,如果我们也想像Spring Jdbctemplate一样,把check exception转化为Runtime exception的话,笨一点的办法就是在每次抛出check exception的地方都将其捕获,然 ...
Global site tag (gtag.js) - Google Analytics