[教程]为PHP安装phpRedis扩展模块

一.安装phpredis

# wget https://download.github.com/owlient-phpredis-2.1.1-1-g90ecd17.tar.gz
# tar -zxvf owlient-phpredis-2.1.1-1-g90ecd17.tar.gz
# cd owlient-phpredis-2.1.1-1-g90ecd17
# /usr/local/php/bin/phpize
# ./configure –with-php-config=/usr/local/php/bin/php-config
# make && make install

修改php.ini文件,应用扩展

# /usr/local/php/etc/php.ini
加入:
extension=redis.so

重启httpd

# service httpd -k restart

我这里使用的是php-fpm模块运行的Nginx

/usr/local/php/sbin/php-fpm restart

通过phpinfo()函数查看,可以看到redis扩展 Continue reading

Redis的PHP客户端

Redis支持的客户端种类非常多,包括C、Java、PHP、Python等,本文主要介绍PHP客户端的安装和使用。

Redis的客户端实际上担负了通过网络协议与Redis Server进行通信的过程,通信的过程必须遵循协议规范,让客户的调用更加符合特定语言的使用习惯。现有PHP客户端:rediska、phpredis、Predis、Redisent。这些可护短中,有纯PHP的实现方案,也有二进制版本的实现方案。

windows下的redis客户端的安装办法请参考:http://blog.haohtml.com/archives/13466

官方提供的PHP客户端列表如下: Continue reading

redis入门教程

window平台下的redis dll文件下载:https://github.com/char101/phpredis/downloads

Redis 根据 5 种不同的数据类型来操作数据对象:

String(字符串)
Sets(集合)
zsets( 排序后的sets集合)
List(列表)
hash(哈稀)

操作 String 类型的值:

Command Parameters Description
SET key value Set a key to a string value
GET key Return the string value of the key
GETSET key value Set a key to a string returning the old value of the key
MGET key1 key2 … keyN Multi-get, return the strings values of the keys
SETNX key value Set a key to a string value if the key does not exist
SETEX key time value Set+Expire combo command
MSET key1 value1 key2 value2 … keyN valueN Set multiple keys to multiple values in a single atomic operation
MSETNX key1 value1 key2 value2 … keyN valueN Set multiple keys to multiple values in a single atomic operation if none of the keys already exist
INCR key Increment the integer value of key
INCRBY key integer Increment the integer value of key by integer
DECR key Decrement the integer value of key
DECRBY key integer Decrement the integer value of key by integer
APPEND key value Append the specified string to the string stored at key
SUBSTR key start end Return a substring of a larger string

Continue reading

Redis作者谈Redis应用场景

毫无疑问,Redis开创了一种新的数据存储思路,使用Redis,我们不用在面对相似功能的数据库时,把精力放在怎么把大象放进冰箱这样的问题上,而是利用Redis灵活多变的数据结构和数据操作,为不同的大象构建不同的冰箱。希望你喜欢这个比喻。

下面是一篇新鲜出炉的文章,其作者是Redis作者@antirez,他描述了Redis比较适合的一些应用场景,NoSQLFan简单列举在这里,供大家一览:

对于对Redis不懂的可以参考redis入门教程:http://blog.haohtml.com/archives/10174

1.取最新N个数据操作

比如典型的取你网站的最新文章,比如通过下面方式,我们可以将最新的5000条评论的ID放在Redis的List集合中,并将超出集合部分从数据库获取

  • 使用LPUSH latest.comments<ID>命令,向list集合中插入数据
  • 插入完成后再用LTRIM latest.comments 0 5000命令使其永远只保存最近5000个ID
  • 然后我们在客户端获取某一页评论时可以用下面的逻辑(伪代码)
FUNCTION get_latest_comments(start,num_items):
    id_list = redis.lrange("latest.comments",start,start+num_items-1)
    IF id_list.length < num_items
        id_list = SQL_DB("SELECT ... ORDER BY time LIMIT ...")
    END
    RETURN id_list
END

如果你还有不同的筛选纬度,比如某个分类的最新N条,那么你可以再建一个按此分类的List,只存ID的话,Redis是非常高效的。 Continue reading

MongoDB vs Redis vs Tokyo Tyrant

* MongoDB vs Redis vs Tokyo Tyrant
准备对MongoDB, Redis以及Tokyo Tyrant的读写做一个简单的测试,为了进行相对公平的测试,需要了解他们背后的实现机制,下面是一些比较:

存储实现的比较:
* 内存文件映像(Memory-File Mapping) Redis, MongoDB
* 文件 + Cache Tokyo Tyrant
* 内存: Redis, Tokyo Tyrant
Key/Value索引形式:
* B+ Tree : MongoDB, Tokyo Tyrant
* Hash Table: Redis, Tokyo Tyrant
* Fixed Length: Tokyo Tyrant

从上面的比较可以看出,Redis和MongoDB是基于系统内存映像文件,数据能命中在内存的时候读写操作性能应该是非常强的,当然,反过来,如果数据十分分散不能在内存命中,那么内存页的切换开销将是非常可怕的,MongoDB和Redis数据文件不同的是将数据存放在多个文件中,每当上一个存满的时候就会创建新的数据空间文件。鉴于MongoDB 是主要比较对象,而其采用B+Tree进行存储,故TT也使用B+Tree引擎进行比较。 Continue reading

Redis vs Memcached

在用到一个新产品时,我们肯定会做的一件事就是做性能测试。但是你真的会做性能测试吗?说完这句话我开始遥想了一下当年。我当时肯定让我的领导有点失望。

回归正题,今天要说的是一个关于Redis性能测试的争论。

事情起因是一篇叫做Redis vs Memcached的文章,本文作者在听说Redis之后将其和Memcached进行了一组性能对比测试,测试结果Redis完败。然而其测试方法却引起了不小的争执,其博文下的第一篇回复就是Redis作者antirez同学的回复。antirez非常有风度的感谢了他的测试结果,然后指出其测试中的问题。

而后在antirez的一篇博文(On Redis, Memcached, Speed, Benchmarks and The Toilet)中,他指出了一些做性能测试方面的经验,并自己对Redis和Memcached做了性能对比。结果与上面的相反,Redis全胜。这一篇文章好像一个教程一样,让大家别再不懂装懂瞎做性能测试了。

然而此文后两天,antirez又发布了另一篇博文(An update on the Memcached/Redis benchmark),对其上篇文章中的内容进行了补充。

而正如Alex Popescu说的一样,性能测试一定要基于自己的实际情况,用自己的业务数据来进行测试,才是最靠谱的。
MongoDB vs Redis vs Tokyo Tyrant:http://blog.haohtml.com/archives/9995

Redis在Windows,linux平台下的安装配置

为了方便查阅资料,特将网上搜索到的Redis相关安装配置进行归档整理:

window平台Redis安装

下载地址: http://code.google.com/p/servicestack/wiki/RedisWindowsDownload

Redis文件夹有以下几个文件

redis-server.exe:服务程序

redis-check-dump.exe:本地数据库检查

redis-check-aof.exe:更新日志检查

redis-benchmark.exe:性能测试,用以模拟同时由N个客户端发送M个 SETs/GETs 查询 (类似于 Apache 的ab 工具).

指定redis的配置文件,如没有指定,则使用默认设置

解压目录:

d:\>redis-server.exe

redis-cli.exe:命令行客户端,测试用.windows下没有redis.conf配置文件.   Continue reading

Redis几个认识误区

此文的作者是新浪微博平台架构师杨卫华(timyang)大师,如果关注了新浪一些牛人微博的同学应该知道,timyang前段时间正在对Redis进行一些研究和测试,也分享出了不少成果。下面一篇文章相信是timyang这段时间对Redis研究的一个总结,澄清了一些认识上的误区,值得一读。

原文链接:http://timyang.net/data/redis-misunderstanding/

前几天微博发生了一起大的系统故障,很多技术的朋友都比较关心,其中的原因不会超出James Hamilton在On Designing and Deploying Internet-Scale Service(1)概括的那几个范围,James第一条经验“Design for failure”是所有互联网架构成功的一个关键。互联网系统的工程理论其实非常简单,James paper中内容几乎称不上理论,而是多条实践经验分享,每个公司对这些经验的理解及执行力决定了架构成败。 Continue reading

Redis和memcached的关系和区别

Q1:什么是Redis?

http://code.google.com/p/redis/

一种新型open source NoSQL应用,从协议上看它提供高性能key-value以及集合操作等功能。它不仅仅是个cache产品,同时支持persistent和chain replication。

Q2:Redis与Memcached类似的地方

Redis是最类似Memcached的开源项目,也有很多的client库可供选择。

Q3:Redis与Memcached的区别

功能:

1. 从协议上看,Redis提供更多的数据结构和操作,如set, stack, range操作等。

2. Redis不仅仅是个cache,提供persistent和chain replication,加上#1,可以近似替代Memcached+MySQL

3. Memcached提供binary protocol和sasl协议,ms Redis还没有支持 Continue reading