谈谈Redis的数据类型(一、Strings篇)

Redis可能是我们网站架构/开发中用得最多的软件之一,它有以下几种数据类型:

  • 字符串(Strings)
  • 列表(Lists)
  • 集合(Sets)
  • 哈希(Hashes)
  • 有序集合(Sorted sets)
  • 位图(Bitmaps)
  • HyperLogLogs(这个实在不会翻译)

Strings

相信毫无疑问,Redis中最常用的数据类型就是字符串,这应该是我们用得最多的数据类型,甚至是很多人用过的唯一的Redis的数据类型。

在Redis中,Strings是二进制安全的,也就是可以把任何的二进制数据放到其中(例如一张jpeg图片),当然我们并不建议这样做。字符串类型的存储上限为512MB。字符类型的命令如下:

  • set $KEY $VAL [nx|xx]
    • 设置值
    • nx表示值不存在时设置有效
    • xx表示值存在是设置有效
  • get $KEY $VAL
    • 获取值

  • incr
    • 数值增加1
  • incrby $KEY N
    • 数值增加N
  • decr
    • 数值减少1
  • decrby $KEY N
    • 数值减少N

  • mset
    • 批量化设值
  • mget
    • 批量化取值

  • exists
    • 检查是否存在
  • del
    • 删除键

  • type
    • 获取键类型

  • expire
    • 设置到期时间
  • persist
    • 设置永久存储
  • ttl
    • 返回剩余有效时间

更新一篇文章

不知不觉距离上次发文章距离已经一年多了,现在发一篇文章证明下自己没挂。

接下来有时间会多更新些内容,博客也要准备改版,立字为证。

Mongo的PHP扩展(Windows)

最近由于项目需要,要用到Mongodb,无奈是Windows下面作开发,而PHP官方仅提供到PHP5.3的扩展,这里介绍一个站点,能够下载PHP5的Mongodb各种扩展。

https://s3.amazonaws.com/drivers.mongodb.org/php/index.html

mongo_dll

Javascript数组中的map,every和forEach的区别

今天写JS的时候,发现自己对map,every和forEach这3个函数的区别不熟悉,由此特地查了一下栈爆(stackoverflow.com),也算找到了满意的答复,在此分享:

原问题连接:http://stackoverflow.com/questions/7340893/what-is-the-difference-between-map-every-and-foreach

The difference is in the return values.

.map() returns a new Array of objects created by taking some action on the original item.

.every() returns a boolean – true if every element in this array satisfies the provided testing function. An important difference with .every() is that the test function may not always be called for every element in the array. Once the testing function returns false for any element, no more array elements are iterated. Therefore, the testing function should usually have no side effects.

.forEach() returns nothing – It iterates the Array performing a given action for each item in the Array.

Edit: Here’s the MSDN Docs if you prefer.

MSDN文档:http://msdn.microsoft.com/en-us/library/k4h76zbx%28VS.94%29.aspx

服务器转移到阿里云

之前一直用米国的VPS,但是由于国内的访问速度实在不能忍受,终于下定决心把VPS买在国内。

3月份买的VPS,从开始买,到整个备案下来,用了两个月的时间,昨天终于有空把博客转移到阿里云上面,希望速度和可靠性等方面都有较大提升。

刚把WP迁移进来的时候,它还会下载谷歌CDN上面的一个字体文件,在国内会导致速度太慢以至于影响整个WP页面的打开(https://fonts.googleapis.com/css)。最后通过安装一个小插件“Disable Google Fonts”就解决了这个问题。插件首页是:http://blog.milandinic.com/wordpress/plugins/disable-google-fonts/

现在博客的各种缓存、压缩等都开了,速度也快了很多,迟点再慢慢进行改版。

解决php-fpm无法通过html文件的方法

今天修改nginx配置的时候,由于一个特殊情况,需要php-fpm允许html的通过,其实只要修改一下php-fpm的配置文件[1]即可。

security.limit_extensions = .php .html

[1] php-fpm配置文件的路径一般是和PHP安装目录同级目录的etc/php-fpm.conf,如:/usr/local/php/etc/php-fpm.conf

浅谈onbeforeunload

在以前,似乎我们用onunload比较多,但是在chrome下面,onunload似乎不生效,而onbeforeunload则生效。

严格来说,onbeforeunload会在onunload之前执行,并且它可以组织onunload的执行。

下面分别是chrome和firefox的提示框。

chrome_onbeforeunload firefox_onbeforeunload

 

代码很简单:

window.onbeforeunload = function (){return ‘我是onbeforeunload’;}

可见,在chrome下面,是有文字提示的,firefox下面则没有文字提示。

在window.onbeforeunload指定的函数中,当函数返回null的时候,即return null; 将不会弹出这个窗口,这个特性可以让我们很好的进行相关的处理。

 

域名中含有下划线

今天在IE系列浏览器中,对一个域名设置document.cookie死活都不行,后来找了很久没找到原因,最后居然发现是由于域名中不能含有下划线,下面附RFC的文档描述:

A “name” (Net, Host, Gateway, or Domain name) is a text string up to 24 characters drawn from the alphabet (A-Z), digits (0-9), minus sign (-), and period (.). Note that periods are only allowed when they serve to delimit components of “domain style names”. (See RFC-921, “Domain Name System Implementation Schedule”, for background).

上述文档翻译过来就是:

网络名、主机名、网关名或者域名等“名称”均是由字母、数字、减号或者点构成,且长度不多于24个字符。需要注意的是,在域名中,点的仅能作为域名各部分的分隔符。

鉴于之前一直不知道这个规则,不小心将下划线也作为了域名的一部分,因而导致在chrome,firefox等现代浏览器中正常,在IE8中“表面”正常,但读取COOKIE的时候就出错了。

之前一直不知道这个,惭愧啊。

使Sublime支持MARKDOWN的语法高亮

在默认的Sublime中,是不支持Markdown的语法高亮的,这需要我们安装Markdown的语法高亮器和相关的配色方案。

下面介绍这是怎么做的,需要注意的是,这里的Sublime是2。

1. 新建Markdown.sublime-settings保存以下内容,并放入Packages/User/

{
“extensions”: [“md”]
}

2. 设置新建文件默认为Markdown格式

2.1 使用Package Control(快捷键是Ctrl+Shift+p)安装Default File Type,如果未安装Package Control则需要先进行安装,安装步骤参考:https://sublime.wbond.net/installation#st2

3.1

2.2 新建default_file_type.sublime-settings保存下列内容,并放入Packages/User/

{
“default_new_file_syntax”:”Packages/Markdown/Markdown.tmLanguage”,
“use_current_file_syntax”:true
}

3 自定义Markdown高亮配色方案。

这个需要安装相关的配色方案,步骤如下:

3.1 下载Monokai-custom.tmTheme,并放入Packages/User/

Monokai-custom

3.2 打开Packages/User/Preferences.sublime-settings加入这条:

{
“color_scheme”: “Packages/User/Monokai-custom.tmTheme”
}

最终的效果应该是:

sublime_markdown_syntax

参考:
http://immmmm.com/sublime-text-2-uses-markdown-small-notes.html

 

一个JS的比较问题的备注

在JS中,有两种比较,那就是==和===。

===这个操作符就不用多说了,就是比较值和类型是否相等,等则返回true,其他情况都返回false。需要特别说明的是==。

关于==比较有一个转换优先级的问题,那就是:

  1. undefined == null
  2. 字符串和数字比较:转换成数字;
  3. 布尔和非布尔比较:将布尔转换成数字比较;
  4. 串和数字与对象比较:尝试获得对象的原始值;

知道上面的转换顺序,或许你也就明白,为什么1==true是true而2==true是false了。