手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表Tag:正则

转:Redis学习手册(内存优化)

项目中在使用Redis,自然对内存这玩意相对比较看重一点,虽然内存不值钱,但能节约一点内存也就意味着可以存储更多的东西。
所以在博客园看到这篇文章的时候,不管现在是用了没,先备份一下资料,我英文烂 ,有点英文资料虽然能看懂,但毕竟不是母语,看起来累。
原文是在这里:
内容详细如下:http://www.cnblogs.com/stephen-liu74/archive/2012/04/11/2370521.html
一、特殊编码:

    自从Redis 2.2之后,很多数据类型都可以通过特殊编码的方式来进行存储空间的优化。其中,Hash、List和由Integer组成的Sets都可以通过该方式来优化存储结构,以便占用更少的空间,在有些情况下,可以省去9/10的空间。
    这些特殊编码对于Redis的使用而言是完全透明的,事实上,它只是CPU和内存之间的一个交易而言。如果内存使用率方面高一些,那么在操作数据时消耗的CPU自然要多一些,反之亦然。在Redis中提供了一组配置参数用于设置与特殊编码相关的各种阈值,如:
    #如果Hash中字段的数量小于参数值,Redis将对该Key的Hash Value采用特殊编码。
    hash-max-zipmap-entries 64
    #如果Hash中各个字段的最大长度不超过512字节,Redis也将对该Key的Hash Value采用特殊编码方式。
    hash-max-zipmap-value 512
    #下面两个参数的含义基本等同于上面两个和Hash相关的参数,只是作用的对象类型为List。
    list-max-ziplist-entries 512
    list-max-ziplist-value 64
    #如果set中整型元素的数量不超过512时,Redis将会采用该特殊编码。
    set-max-intset-entries 512
    倘若某个已经被编码的值再经过修改之后超过了配置信息中的最大限制,那么Redis会自动将其转换为正常编码格式,这一操作是非常快速的,但是如果反过 来操作,将一个正常编码的较大值转换为特殊编码,Redis的建议是,在正式做之前最好先简单测试一下转换效率,因为这样的转换往往是非常低效的。
   
二、BIT和Byte级别的操作:

    从Redis 2.2开始,Redis提供了GETRANGE/SETRANGE/GETBIT/SETBIT四个用于字符串类型Key/Value的命令。通过这些命 令,我们便可以像操作数组那样来访问String类型的值数据了。比如唯一标识用户身份的ID,可能仅仅是String值的其中一段子字符串。这样就可以 通过GETRANGE/SETRANGE命令来方便的提取。再有就是可以使用BITMAP来表示用户的性别信息,如1表示male,0表示female。 用这种方式来表示100,000,000个用户的性别信息时,也仅仅占用12MB的存储空间,与此同时,在通过SETBIT/GETBIT命令进行数据遍 历也是非常高效的。
   
三、尽可能使用Hash:

    由于小的Hash类型数据占用的空间相对较少,因此我们在实际应用时应该尽可能的考虑使用Hash类型,比如用户的注册信息,这其中包括姓名、性别、 email、年龄和口令等字段。我们当然可以将这些信息以Key的形式进行存储,而用户填写的信息则以String Value的形式存储。然而Redis则更为推荐以Hash的形式存储,以上信息则以Field/Value的形式表示。
    现在我们就通过学习Redis的存储机制来进一步证明这一说法。在该篇博客的开始处已经提到了特殊编码机制,其中有两个和Hash类型相关的配置参 数:hash-max-zipmap-entries和hash-max-zipmap-value。至于它们的作用范围前面已经给出,这里就不再过多的 赘述了。现在我们先假设存储在Hash Value中的字段数量小于hash-max-zipmap-entries,而每个元素的长度又同时小于hash-max-zipmap-value。 这样每当有新的Hash类型的Key/Value存储时,Redis都会为Hash Value创建定长的空间,最大可预分配的字节数为:
    total_bytes = hash-max-zipmap-entries * hash-max-zipmap-value
    这样一来,Hash中所有字段的位置已经预留,并且可以像访问数组那样随机的访问Field/Value,他们之间的步长间隔为hash-max- zipmap-value。只有当Hash Value中的字段数量或某一新元素的长度分别超过以上两个参数值时,Redis才会考虑将他们以Hash Table的方式进行重新存储,否则将始终保持这种高效的存储和访问方式。不仅如此,由于每个Key都要存储一些关联的系统信息,如过期时间、LRU等, 因此和String类型的Key/Value相比,Hash类型极大的减少了Key的数量(大部分的Key都以Hash字段的形式表示并存储了),从而进 一步优化了存储空间的使用效率。

------EOF----
这里还有几篇类似的文章:

  1. redis学习笔记之发布订阅
  2. Redis学习手册(事务)
  3. Redis之七种武器(http://blog.nosqlfan.com/html/2942.html)
  4. Redis学习手册(Key操作命令)
  5. RedisWindowsDownload  (http://code.google.com/p/servicestack/wiki/RedisWindowsDownload)
  6. Redis几个认识误区
  7. Redis入门笔记(二)-配置及运行Deploy a High Performance Key-Value Store using Redis on Ubuntu 10.10 (Maverick) (http://library.linode.com/databases/redis/ubuntu-10.10-maverick)
  8. Redis消息通知系统的实现(http://huoding.com/2012/02/29/146)
  9. redis 分布式,主从同步(http://blog.51yip.com/cache/1320.html)

Tags: redis

一篇介绍招聘的文章:如何面试应届生求职者

看到PHP5研究室上这篇文章,总还是有点感慨的。特别是最后那几句话:还是在 ngacn 上看到的一句话,团队需要两种人,要么 NB 的,要么听话的。


原文地址:http://www.phpv.net/html/1696.html
作者:Platinum
内容如下:

为什么要招应届生?不是因为便宜,有人说还没跳过槽的人忠诚度能搞些,这也不尽然,有些人没经受过工作的压力,总以为自己碰巧找到个压力大的工作, 换换会好些。我的原因是……应届生好调教。在他们没有被各种枯燥乏味的工作折磨的以为写程序本来就这么 SB 之前好好洗洗脑子。


1、2、3 是基础题,4、5、6 问的是数据库操作,7 算是综合能力吧。

1. 进制运算

可以是让他模拟一些简单的字符串函数,类似 bin2hex、base_convert、base64_encode,或者单纯的,让他手动算一下 7 进制的 54321 显示为 9 进制是多少。

应该高中或者之前就能接触到 2 进制 10 进制之间的换算了吧,当然,他当时很可能没听懂。通常的情况,如果以前没留意这个问题但有理解能力的,可能能在几分钟的做出一些成功不成功的尝试。至少不应该很茫然。最糟糕的情况,连整数的最大值是多少都不知道,那就算了。

2. 描述一下常见的关于读取文件内容的操作,及各自的特点

应 该不用迟疑太久就把 file、fopen、file_get_contents、readfile 列出来。表现好点还可以提下 readfile 的流式读取不占内存之类的。如果看的教材太老,可能只会说 fopen。最糟糕的辩解是不说跟数据库打交道比较多,文件操作没怎么接触过,完全无视文件静态化的存在。

3. 怎么模拟一个 POST 表单提交

答 socket 或者 cURL 都可以。

4. 列举一些常规优化方式

正 确索引(就不强求完全理解多列索引了,最好能知道每个查询只能用到一个索引),知道索引提高查询速度、降低插入速度。正确的字段类型(能知道 char 和 varchar 的区别和优缺点)。text 类字段可以单放一个表用主键关联。总之他能说的越多越好。顺便问问他他所知道的最大处理能力是每秒多少条,哪怕是测试环境里的 benchmarking(今天看到份简历,号称三年工作经验,将半个月三万条插入形容为他所遇到的最高的负载,写在简历的醒目位置)。

5. “你知道,把时间存在数据库里有两种方法,一种是用时间戳,就是 PHP 函数 time() 产生的那种整数,另一种是 MySQL 里字段类型设成 datetime。那么,为什么一定要后一种方式?”

最简单的一个例子,如果存的是时间戳,你无法按类似“所有周三的数据”这种方式显示内容。这表明了他的学习阶段:是否接触了类似日志分析类的东西。因为这些是早晚都要接触到的。

6. 简单联表查询

有这么两个表

user 表:

id  name
1   张三
2   李四
3   王五
4   赵六

apple 表:

id  user  number
1   1     5
2   3     3
3   1     8
4   4     6
5   3     2
6   4     2

apple 表的 user 字段跟 user 表的 id 对应,一条 SQL 语句查出每个人都有多少苹果

如果他不知道 join,可能会这么写

SELECT user.name, SUM(apple.number) FROM user, apple WHERE user.id = apple.user GROUP BY user.id

正确答案应该是这样

SELECT user.name, SUM(apple.number) FROM user LEFT JOIN apple ON user.id = apple.user GROUP BY id

这两条语句的差别是,不用 join 无法显示出李四有 0 个苹果 -_-

7. 假设我们要做一个公交系统的常见服务,就是做查公交车怎么倒车的。假设完全由你自己来搞,我只关心最后结果,你会怎么做这个项目。说的越详细越好。

可能需要不断提示。考查一个人的做事能力,比方说他首先会想到需要数据,数据库应该怎么设计,有几个表,什么样的字段。
可 以加分的地方可以有这么几个点。给站名编 id,匹配数字的速度要远大于匹配字符串。站点之间要距离的数据,这样计算最优倒车路线应该能考虑到站数,倒车次数、距离等权值。如果很有远见,任意两点 之间的数据应该是提前算好的,比方说有 200 条公交线路和 2000 个站点,始发终点的组合可能是 2000 * 1000,每种线路可能有 1 - 6 种方案,有个表是来装这近一千万行结果的,如果有线路变化,再用本地的机器重新算一遍线路。这样整个系统才有实用价值。不然可能每次查询都需要耗费数秒或 者更长时间,只能当单机软件用。


这些题本身是交流的话题,而不是“做对 5 道以上我就招你”这种门槛。我面试时每道题都会给予充分的时间,如果他做不上来,也起码能判断他的思考方式,而忌讳说“如果你不知道就明说,咱们赶紧做下 一题”。同时也能观察出性格等方面。比方说第 6 题,有人把 SUM 写成 COUNT,我就问他你看看前面写的是否有问题,同时又怕太明显,又补充一句“也可能什么错误也没有、我在误导你,你自己判断”,于是他就不再理会、继续 接着写完整个 SQL。再综合他的其他一些表现,我的结论是此人主见极强的,我不会用。属于出了 BUG 第一念头是 BUG 在解释器上、做出来的程序跟产品需求不符时会说是你产品没说明白的那种。相反,我很欣赏那些在做完第一道题的 7 进制转换后还知道验算的,因为既然是笔算就很容易出错。我觉得这种人思考严谨、负责任。

其他的一些知识,比方说 memcache、SVN、单元测试这些,都属于经验问题,应届生很少需要接触到这些东西(甚至文件静态化也很少碰到),不像上面,我需要以此来判断面试者对编程是否已经入门。

还是在 ngacn 上看到的一句话,团队需要两种人,要么 NB 的,要么听话的。

Tags: 招聘, 应届生

[转摘]去除迅雷广告

看上去挺有用的,所以就记录下来了。
原文:http://www.javauu.com/thread-139-1-1.html

大家现在最常用的多线程下载工具,莫过于迅雷,因为其他下载的速度确实很快,大部分的网站都适用,但其最烦人的就是时不时会弹出一些广告资讯,虽然可以理解(因为迅雷爱钱),但却相当讨人厌;

下面介绍几个步骤来去除已安装在你本机上面的迅雷的广告:
一、关闭迅雷资讯
1.打开迅雷,在"工具"菜单中点击"配置"选项,打开"配置"对话框.
2.切换到"高级"选项卡,清空"显示迅雷资讯"选框,点击"确定"按钮即可禁止自动弹出"迅雷资讯"窗口了.

二、清除小广告
1.先关闭迅雷,然后在迅雷安装目录下打开" Program"文件夹.
如: D:\ Program Files\Thunder Network\Thunder\Program

2.找到"gui.cfg"文件,双击它打开一个文本文档.
分别找到以"ADServer="," PVServer=","ADCountingServer="和HomePage="开头的四段字符,将"="后面的网址都删除掉

3.点击"文件"→"保存"按钮保存修改的文本文档后,关闭该文档
注意还没结束

4.用右键单击"gui.cfg"文件选择"属性",打开属性对话框
勾选"只读"选框,点击"确定"按钮.再重启迅雷那些讨厌的广告就统统不见了.

三、屏蔽热门推荐
1.先关闭迅雷,然后打开迅雷安装目录下的" Profiles"文件夹,双击"UserConfig.ini"文件打开一个文本文件.

2.按下Ctrl+F键打开"查找"对话框,输入"[Splitter_1]",点击"查找下一个"按钮找到该关键词所在位置..
在"[Splitter_1]"下方找到" Pane1_Hide=0",将0改为1,既" Pane1_Hide=1".

3.点击"文件"→"保存"选项保存文件后,再打开迅雷即可看到"热门推荐"窗口已经消失不见了

4.记住还要把UserConfig.ini的文件属性设置为"只读",这样迅雷运行时就不能更改里面的广告面板

经过以上设置,让人厌烦的的迅雷小广告和弹出窗口就统统被我们清除了,迅雷变得如此清爽,使用起来心里就舒服多了.

Tags: 迅雷