PHP-Redis的使用
Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。
下载地址:https://github.com/MSOpenTech/redis/releases
启动Redis服务端:redis-server.exe redis.windows.conf
在Windows下为PHP安装redis扩展和igbinary扩展:
下载地址:
http://pecl.php.net/package/redis/2.2.7/windows
http://pecl.php.net/package/igbinary
将phpredis.dll和phpigbinary.dll拷贝至php的ext目录下。
修改php.ini,在该文件中加入:
extension=php_igbinary.dll
extension=php_redis.dll
phpinfo()中查看Redis信息.
Redis相比Memcached的优势
Redis不仅支持简单的K/V类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
Redis支持数据的备份,即master-slave模式的数据备份。
Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。
Redis中常用的数据类型
1.String
Strings 数据结构是简单的key-value类型,value其实不仅是String,也可以是数字。普通的key/value 存储都可以归为此类.即可以完全实现目前 Memcached 的功能,并且效率更高。还可以享受Redis的定时持久化,操作日志及 Replication等功能。
2.Hash
Hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。
– Memcahced方式:
–Redis方式:
Key是用户ID, value是一个Map,这个Map的key是成员的属性名,value是属性值,这样对数据的修改和存取都可以直接通过其内部Map的Key(Redis里称内部Map的key为field), 也就是通过 key(用户ID) + field(属性标签) 就可以操作对应属性数据了,既不需要重复存储数据,也不会带来序列化和并发修改控制的问题。
3.List
Lists 就是链表, 是Redis中最重要的数据结构之一,比如Twitter/Sina的关注列表,粉丝列表等都可以用Redis的list结构来实现。另外使用Lists结构,我们可以轻松地实现最新消息排行等功能。
4.Set
Sets 集合的概念就是一堆不重复值的组合。利用Redis提供的Sets数据结构,可以存储一些集合性的数据,比如在微博应用中,可以将一个用户所有的关注人存在一个集合中,将其所有粉丝存在一个集合。Redis还为集合提供了求交集、并集、差集等操作,可以非常方便的实现如共同关注、共同喜好、二度好友等功能,对上面的所有集合操作,你还可以使用不同的命令选择将结果返回给客户端还是存集到一个新的集合中。
Redis set对外提供的功能与list类似是一个列表的功能,特殊之处在于set是可以自动排重的,当你需要存储一个列表数据,又不希望出现重复数据时,set是一个很好的选择,并且set提供了判断某个成员是否在一个set集合内的重要接口,这个也是list所不能提供的。
5.Sorted Set
Redis sorted set的使用场景与set类似,区别是set不是自动有序的,而sorted set可以通过用户额外提供一个优先级(score)的参数来为成员排序,并且是插入有序的,即自动排序。当你需要一个有序的并且不重复的集合列表,那么可以选择sorted set数据结构。
Redis在PHP中的应用
redis=newRedis();
redis->connect(‘127.0.0.1’, 6379);
//echo $redis->ping();
//$redis->set(‘name’, ‘val123’);
//查看所有键或某个键
//var_dump($redis->keys(‘*’));
//删除数据
$redis->del(‘name’);
//查询某键是否存在
var_dump($redis->exists(‘name’));
//同时设置多个值
$redis->mset(array(
‘k1’ => ‘v1’,
‘k2’ => ‘v2’,
‘k3’ => ‘v3’,
));
//同时获取多个值
var_dump($redis->mget(array(
‘k1’,
‘k2’,
‘k3’,
)));
//同时删除多个值
$redis->del(array(
‘k1’,
‘k2’,
‘k3’,
));
//删除所有数据据
$redis->flushAll();
//从列表头部添加值
redis−>lPush(‘list′,‘val1′);
redis->lPush(‘list’, ‘val2’);
$redis->lPush(‘list’, ‘val3’);
//从列表尾部添加值
redis−>rPush(‘list′,‘val99′);
redis->rPush(‘list’, ‘val98’);
//从列表中对值
var_dump($redis->lRange(‘list’, 0, 1));
//获取列表的长度、个数
var_dump($redis->lSize(‘list’));
//获取第三个值
var_dump(
redis−>lGet(‘list′,3));//获取倒数第一个值vardump(
redis->lGet(‘list’, -1));
//为某个键赋值,结果:bool
var_dump($redis->lset(“test”,1,”333”));
//移除list的值,移除几次
$redis->lRemove(‘list’, ‘val1’, 0)
详见Redis-PHP手册::