- 博客(32)
- 收藏
- 关注
原创 Redis 事件(2) -- 时间事件
Redis时间事件分为以下两类: 1.定时事件:程序在指定时间执行一次。 2.周期性事件:程序每隔指定时间执行一次。 时间事件的属性:1.id:服务器为时间事件创建的全局唯一ID,ID号从小到大递增。2.when:毫秒精度的unix时间戳,记录时间事件的到达时间。3.timeProc:时间事件处理器,一个函数。当时间事件到达事,执行此函数。时间事件的返回
2015-07-12 22:13:52 1191
原创 Redis 事件(1) -- 文件事件
Redis 服务器是一个事件驱动程序,服务器需要处理以下两类事件:1)文件事件Redis服务器通过套接字与客户端(或其他Redis服务器)进行连接,而文件时间就是服务器对套接字操作的抽象。服务器与客户端(或其他服务器)的通信会产生相应的文件事件,而服务器则通过监听并处理这些时间来完成一系列网络通信操作。2)时间事件Redis服务器中的一些操作(比如serverCron函数)需要在给
2015-07-11 21:52:03 1106
原创 Redis AOF持久化
Redis提供了AOF(Append Only File)持久化功能,AOF通过保存服务器所执行命令来记录数据库状态的,和MySQL记录增删改的log有点像哈。AOF持久化功能实现分为命令追加(append)、文件写入(write)和文件同步(sync)三个步骤。1.AOF命令追加当开启AOF持久化功能时,服务器会在执行完一个写命令后,会以协议格式将执行的写命令追加到服
2015-07-11 17:42:22 415
原创 Redis RDB文件结构
Redis RDB文件保存的是二进制数据,结构包括5部分:REDIS | db_version | databases | EOF | check_sumdb_version长度为4个字节,它的值是一个字符串表示的整数,记录RDB文件的版本号。databases记录数据库实例,和各个数据库实例的键值对数据,如果redis-server中所有db都为空,那这个值也为空,长
2015-07-04 21:38:34 1516
原创 Redis RDB持久化
RDB持久化可以自动,也可以手动,这个功能将某个时间点上的数据库状态保存到一个经过压缩的二进制文件中。SAVE命令会阻塞服务,执行完成前客户端的所有请求都会拒绝。BGSAVE命令会新建一个子进程执行持久化操作,不阻塞服务。服务器状态维护了一个dirty计数器以及一个lastsave属性,供RDB持久化策略使用。dirty计数器记录距离上一次成功执行SAVE或BGSA
2015-07-01 23:34:31 463
原创 Redis 数据库(2) redis键过期策略
Redis有4个命令可以设置键的过期时间:1. expire 设置key的生存时间为ttl秒;2. pexpire 设置key的生存时间为ttl毫秒; 3. expireat 设置key的过期时间为ts的秒数时间戳;4. pexpireat 设置key的过期时间为ts的毫秒数时间戳;实际上 expire, pexpire, expireat 3个命令都是
2015-07-01 22:47:39 524
原创 Redis 数据库(1)--redis中的数据库
Redis服务器的所有数据库都保存在服务器状态 redis.h/redisServer结构的db数组中,db数组中每项都是一个 redis.h/redisDb结构,代表一个数据库实例。struct redisServer {//...int dbnum;//...redisDb *db;//...} ;初始化数据库实例默认是16个,可以用过selec
2015-07-01 22:01:33 633
原创 Redis 类型检查和命令多态
Redis中用于操作键的命令基本可以分为2类。其中一种是可以对任何类型的键执行,比如DEL,EXPIRE,RENAME,TYPE,OBJECT,TTL等命令。另一种只能对特定的键执行,比如:SET,GET,APPEND,STRLEN 等仅限用于字符串的键类型;HDEL,HSET,HGET,HLEN 等仅限用于哈希键类型;RPUSH,LPOP,LINSERT,LL
2015-07-01 21:58:03 519
原创 Redis 哈希对象
哈希对象编码可以是ziplist或者hashtable。ziplist编码的哈希对象使用压缩列表作为底层实现。有新的键值对要保存时,程序会先将键值对的键推到列表表尾,再将键值对的值推到列表表尾。hashtable编码的哈希对象使用字典作为底层实现,哈希对象中的每个键值对都是用一个字典键值对来保存。当哈希对象满足下面2个条件时,哈希对象使用ziplist编码,其余
2015-06-28 00:30:23 578
原创 Redis 对象
Redis中每个对象都由一个redisObject结构表示:typeof struct redisObject {//类型unsigned type : 4;//编码unsigned encoding : 4;//指向底层数据结构的指针void *ptr;// . . .} robj;type 对象的类型REDIS_STRING 字符串对象
2015-06-28 00:08:08 383
原创 Redis 压缩列表
压缩列表(ziplist)是列表键和哈希键的底层实现之一。当一个列表键只包含少量列表项,并且每项都是小整数或短字符串时,Redis就会使用压缩列表作为列表键的底层实现。ziplis组成:zlbytes : 记录列表占用内存字节数:在重新分配内存或计算zlend时使用zltail : 记录压缩列表表尾节点距离列表的起始地址有多少字节zllen : 记录压缩列表包含节点数量
2015-06-27 23:42:14 650
原创 Redis 跳跃表的实现
Redis使用跳跃表作为有序集合键的底层实现之一,如果一个有序集合包含的元素数量较多,或者有序集合中成员是较长的字符串时,Redis就会使用跳跃表来作为有序集合键的底层实现。和链表、字典等数据结构在Redis内部的广泛应用不同,Redis只在实现有序集合键和集群节点中用到跳跃表。跳跃表节点 zskiplistNodetypeof struct zskiplistNode {
2015-06-27 16:49:04 490
原创 Redis 字典的实现(2)
1.Redis 字典 Hash算法根据key计算hash值hash = dict -> type -> hashFunction(key);根据sizemask属性和哈希值,计算出索引,ht[x]可以是ht[0]或ht[1]index = hash & dict -> ht[x].sizemask;Redis使用MurmurHash2算法计算键的哈希值,优点在于即使输入的键是有
2015-06-27 15:47:27 398
原创 MySQL导入Emoji表情符号报错
Exception in thread "main" org.springframework.jdbc.UncategorizedSQLException: PreparedStatementCallback; uncategorized SQLException for SQL [update user_info set nick_name = ?, is_regular = ? where u
2015-06-26 18:21:13 2315 1
原创 Redis 字典的实现(1)
字典就是我们熟悉的map,键值对(key-value pair)的抽象数据结构。Redis数据库就是使用字典来作为底层实现的。先介绍下数据结构:1.哈希表typeof struct dictht {//哈希表数组dictEntry **table;//哈希表大小unsigned long size;//哈希表大小掩码,用于计算索引//总是等于size-1
2015-06-25 23:30:59 284
原创 Redis 链表的数据结构
链表节点的数据结构:typeof struct listNode {//前置节点struct listNode *prev;//后置节点struct listNode *next;//节点的值void *value;} listNode;链接的数据结构:typeof struct list {//表头节点listNode *head;//表尾节点
2015-06-24 23:14:44 316
原创 MySQL函数功能
MySQL默认函数功能是关闭的。1.查看状态mysql> show variables like '%func%';+---------------------------------+-------+| Variable_name | Value |+---------------------------------+-------+
2015-06-24 22:08:22 421
原创 Linux下Mysql忘记密码
确认只有你能登录这台机器,因为过程中Mysql出于无密码登录状态,任何有这台机器权限的人都可能进来搞破坏,最好的做法就是拔掉网线。1.编辑my.cnf文件,在mysqld下面加上一行“skip-grant-tables‘,加完之后是这样[root@centos6 ~]# vi /etc/my.cnf [mysqld]skip-grant-tablesdefault-charac
2015-06-24 21:58:30 375
原创 MySql备份需要注意的几点
mysqldump命令备份还原大家经常用备份一个数据库:mysqldump -hlocalhost -uroot -p123456 > mySqlBackup.sql所有数据都是以sql语句的形式存在,还原的时候直接 source mySqlBackup.sql就行,连建库都不需要。但是这里有个坑,不能完全依赖这玩意儿,自己写的自定义函数和存储过程可是会丢失的。mysqld
2015-06-24 21:28:49 448
原创 Redis 简单动态字符串
Redis使用SDS(simple dynamic string)用作字符串默认实现。struct sdshdr{//已使用buf数组的字节数量,也就是字符串长度int len;//未使用的长度int free;//保存字符串char buf[];}SDS遵循C语言字符串以空字符串结尾,保留1个字节的空字符串'\0',该空串不记入len中。
2015-06-23 23:08:59 666
原创 题目10:计算两百万以下所有质数的和。
10以下的质数的和是2 + 3 + 5 + 7 = 17.找出两百万以下所有质数的和。 原题目链接:Problem 10暴力算吧public class Problem10 { public static void main(String[] args) { long sum = 0;
2015-06-23 22:43:54 587
原创 题目9:找出唯一的满足a + b + c = 1000的毕达哥拉斯三元组{a, b, c}。
一个毕达哥拉斯三元组是一个包含三个自然数的集合,aa2 + b2 = c2例如:32 + 42 = 9 + 16 = 25 = 52.已知存在并且只存在一个毕达哥拉斯三元组满足条件a + b + c = 1000。找出该三元组中abc的乘积。 原题目链接:Problem 9差不多也是暴力算public cl
2015-06-23 22:39:26 810
原创 题目8:找出这个1000位数字中连续13个数字乘积的最大值。
找出以下这个1000位的整数中连续13个数字的最大乘积。731671765313306249192251196744265747423553491949349698352031277450632623957831801698480186947885184385861560789112949495459501737958331952853208805511125406987471
2015-06-23 22:34:06 893
原创 题目7:找出第10001个质数。
前六个质数是2,3,5,7,11和13,其中第6个是13.第10001个质数是多少?原题目链接:Problem 7public class Problem7 { public static void main(String[] args) { int index = 0; int prime = 2;
2015-06-23 22:29:58 961
原创 题目6:平方和与和平方的差是多少?
前十个自然数的平方和是:12 + 22 + ... + 102 = 385前十个自然数的和的平方是:(1 + 2 + ... + 10)2 = 552 = 3025所以平方和与和的平方的差是3025 385 = 2640.找出前一百个自然数的平方和与和平方的差。暴力算public class Problem6 {
2015-06-23 22:27:50 980
原创 题目5:找出最小的能被1-20中每个数整除的数。
2520是最小的能被1-10中每个数字整除的正整数。最小的能被1-20中每个数整除的正整数是多少? 原题目链接:Problem 5分解质因数,不多说public class Problem5 { private static HashSet set = new HashSet(); public static
2015-06-23 22:25:39 909
原创 题目4:找出由两个三位数乘积构成的回文。
一个回文数指的是从左向右和从右向左读都一样的数字。最大的由两个两位数乘积构成的回文数是9009 = 91 * 99.找出最大的有由个三位数乘积构成的回文数。 原题目链接:Problem 4还是不能暴力算,因为是求最大的回文数,所以从最大的开始减public class Problem4 { public static v
2015-06-23 22:23:20 575
原创 题目3:找出一个合数的最大质数因子
13195的质数因子有5,7,13和29.600851475143的最大质数因子是多少? 原题目链接:Problem 3这题不能暴力算,算好久,需要用个递归public class Problem3 { //answer 6857 public static void main(String[] args) {
2015-06-23 22:20:17 540
原创 题目2:在斐波那契数列中,找出4百万以下的项中值为偶数的项之和。
斐波那契数列中的每一项被定义为前两项之和。从1和2开始,斐波那契数列的前十项为:1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...考虑斐波那契数列中数值不超过4百万的项,找出这些项中值为偶数的项之和。 原题目链接:Problem 2也没什么好说的,暴力算public class Problem2
2015-06-23 22:16:43 675
原创 题目1:找出1000以下自然数中3和5的倍数之和。
10以下的自然数中,属于3和5的倍数的有3,5,6和9,它们之和是23.找出1000以下的自然数中,属于3和5的倍数的数字之和。 原题目链接:Problem 1不多说,直接暴力算就是了public class Problem1 { public static void main(String[] args) { in
2015-06-23 22:08:53 1307
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人