Redis是 Salvatore Sanfilippo 开发的,开源的,高效的基于内存的键值缓存服务,所谓的NoSQL数据库 。它可以存储 strings, hashes, lists, sets, sorted sets等结构的数据。
键值存储的实质是能够存储数据,而且在之后调用具体的键名,可以检索出之前插入的数据。
Salvatore Sanfilippo (creator of Redis) 说Redis 能够被用于替代RDBMS数据库,现在想想,尽管没有什么是不可能的,但是它仍然是一个欠妥的想法。因为Redis在数据的事务操作,以及主从服务的数据同步上还不是很完善。
以下是Redis使用的地方,尽管还有好多地方可以用到:
文章并不是去展示给你 Redis的语法知识 , 而是在PHP中怎么去使用Redis
Redis很容易去安装,包括Windows和Linux
安装Redis:
$ wget http://download.redis.io/releases/redis-2.8.19.tar.gz
$ tar xzf redis-2.8.19.tar.gz
$ cd redis-2.8.19
$ make
Note: 2.8.19 请替换成最新版本
Redis的服务启动都位于安装目录下src目录下,包括redis-cli, 用于Redis的客户端操作,下面是启动Redis服务。
$ src/redis-server
暂不介绍
Predis 是Redis的一个客户端. 它被社区支持,GitHub上直接下载就可以,下图安装了GitHub客户端或者Git软件,进行下载
$ git clone git://github.com/nrk/predis.git
首先,我们 require Redis 的自动加载函数. 之后使用try语句块包裹。以下是连接本地以及远程服务的地址,在虚拟机中安装的服务,请按照远程的配置进行。host使用ifconfig查看,默认的端口是6379.
<?ph
require "predis/autoload.php";
Predis\Autoloader::register();
try {
$redis = new PredisClient();
// This connection is for a remote server
/*
$redis = new PredisClient(array(
"scheme" => "tcp",
"host" => "153.202.124.2",
"port" => 6379
));
*/
}
catch (Exception $e) {
die($e->getMessage());
}
现在我们已经成功的连接了Redis服务器,马上开始学习
Redis使用了丰富的数据类型,可以帮助开发者存储更有意义的数据结构,或者说更接近真实的数据,让检索变得更加高效。下面是Redis支持的数据类型:
在Redis中,最重要的命令可能属 SET
, GET
and EXISTS
.
这些命令用于去从Redis服务器存储,获取,检查。Redis的操作就跟命令要表达的字面意思是一样的。
<?php
// sets message to contian "Hello world"
$redis->set(‘;message‘;, ‘;Hello world‘;);
// gets the value of message
$value = $redis->get(‘message‘);
// Hello world
print($value);
echo ($redis->exists(‘message‘)) ? "Oui" : "please populate the message key";
INCR
and DECR
命令被用于去增加或减少值
<?php
$redis->set("counter", 0);
$redis->incr("counter"); // 1
$redis->incr("counter"); // 2
$redis->decr("counter"); // 1
当然,你也可以指定增加的具体值,使用 INCRBY
and DECRBY
命令
<?php
$redis->set("counter", 0);
$redis->incrby("counter", 15); // 15
$redis->incrby("counter", 5); // 20
$redis->decrby("counter", 10); // 10
这里还有基本的一些命令
Simple List Usage:
<?php
$redis->rpush("languages", "french"); // [french]
$redis->rpush("languages", "arabic"); // [french, arabic]
$redis->lpush("languages", "english"); // [english, french, arabic]
$redis->lpush("languages", "swedish"); // [swedish, english, french, arabic]
$redis->lpop("languages"); // [english, french, arabic]
$redis->rpop("languages"); // [english, french]
$redis->llen("languages"); // 2
$redis->lrange("languages", 0, -1); // returns all elements
$redis->lrange("languages", 0, 1); // [english, french]
hash 是一了键值对的集合,类似于一对多的关系.常用的命令有:
<?php
$key = ‘linus torvalds‘;;
$redis->hset($key, ‘age‘;, 44);
$redis->hset($key, ‘country‘;, ‘;finland‘;);
$redis->hset($key, ‘occupation‘, ‘software engineer‘);
$redis->hset($key, ‘reknown‘, ‘linux kernel‘);
$redis->hset($key, ‘to delete‘, ‘i will be deleted‘);
$redis->hget($key, ‘age‘); // 44
$redis->hget($key, ‘country‘)); // Finland
$redis->del($key, ‘to delete‘);
$redis->hincrby($key, ‘age‘, 20); // 64
$redis->hmset($key, [
‘age‘ => 44,
‘country‘ => ‘finland‘,
‘occupation‘ => ‘software engineer‘,
‘reknown‘ => ‘linux kernel‘,
]);
// finally
$data = $redis->hgetall($key);
print_r($data); // returns all key-value that belongs to the hash
/*
[
‘age‘ => 44,
‘country‘ => ‘finland‘,
‘occupation‘ => ‘software engineer‘,
‘reknown‘ => ‘linux kernel‘,
]
*/
set相关的命令:
SADD:
给set增加N个成员,数组或者单个元素
SREM: 从数组中移除单个或者一个成员
SISMEMBER: 判断成员是否存在
SMEMBERS: 获取set中所有成员
<?php
$key = "countries";
$redis->sadd($key, ‘;china‘;);
$redis->sadd($key, [‘england‘, ‘france‘, ‘germany‘]);
$redis->sadd($key, ‘china‘); // this entry is ignored
$redis->srem($key, [‘england‘, ‘china‘]);
$redis->sismember($key, ‘england‘); // false
$redis->smembers($key); // [‘france‘, ‘germany‘]
因为Resia在内存中存储,你可能并不像永久存储,就比如我之前的介绍Node创建session的文章. 这里可以设置过期的方法有 EXPIRE
, EXPIREAT
, TTL
, PERSIST
–
EXPIRE: 以秒为单位,设置过期时间
EXPIREAT: 过多久之后被删除,以秒为单位
TTL:距离过期还剩多少时间
PERSIST:让一个键永久保存
$key = "expire in 1 hour";
$redis->expire($key, 3600); // expires in 1 hour
$redis->expireat($key, time() + 3600); // expires in 1 hour
sleep(600); // don‘t try this, just an illustration for time spent
$redis->ttl($key); // 3000, ergo expires in 50 minutes
$redis->persist($key); // this will never expire.
后悔中......花了30分钟,翻译了这么一篇没水平的文章,也不知道自己是怎么想的。越想越不对,但是既然翻译了,就翻译完了,里面可能有翻译的不对的地方,或者代码错误的地方,那都不是问题,掠过就可以。
Redis is a better replacement for memcached, as it is faster, scales better (supports master-slave replication), supports datatypes that many (Facebook, Twitter, Instagram) have dropped memcached for Redis. Redis is open source and many brilliant programmers from the open-source community have contributed patches.
原文地址:http://blog.csdn.net/whynottrythis/article/details/45974377