PHP 中如何使用Redis

Redis文档

目录

1 Redis 1

1.1 简介 1

2 PHP安装redis扩展 2

3 Redis的使用 4

3.1 PHP中使用redis 4

3.2 cmd中使用redis 4

4 redis的使用命令 4

4.1 字符串类型 4

4.2 哈希类型(hash) 7

4.3 链表类型(list) 8

4.4 set(集合) 9

4.5 zset(有序集合) 10

4.6 其它常用命令 11

Redis

PHP 中如何使用Redis

1.1 简介

redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、hash(哈希)、list(链表)、set(集合)和zset(有序集合)。这些数据类型都支持push/pop、add/remove及取交集并集   和差集及更丰富的操作,而且这些操作都是原子性的。

在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别  的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master- slave(主从)同步。

Redis 是一个高性能的key-value数据库。Nosql(非关系型数据库)

Redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部  分场合可以对关系数据库起到很 好的补充作用。它提供了Python,Ruby,Erlang,PHP客户端,使用很方便

 

PHP安装Redis扩展

PHP 中如何使用Redis

 

使用phpinfo()函数查看PHP的版本信息,这会决定扩展文件版本。

下载redis扩展文件(一 定要保证版本的正确性)

下载地址:选择适合的版本否则不会生效)

http://windows.php.net/downloads/pecl/snaps/redis/ http://windows.php.net/downloads/pecl/releases/igbinary/ 

:如果在phpinfo()里看到TS则选择ts版本,如果是NTS则下载nts版本

 

PHP 中如何使用Redis


 

如上图则下载:php_redis-4.2.0-7.3-ts-vc15-x86.zip

解压后,将php_redis.dll和php_redis.pdb拷贝至php的ext目录下  

修改php.ini,在该文件中加入:extension=php_redis.dll

注意:extension=php_redis.dll一定要放在extension=php_igbinary.dll的前面,否则此扩展不会生效

重启Apache后,使用phpinfo查看扩展是否成功安装

PHP 中如何使用Redis 

Redis的使用

3.1 PHP中使用Redis

<?php

$redis = new Redis ();  //实例化Redis

$redis->connect ("localhost", 6379);  //连接

$redis->auth ('密码'); 

$redis->select (库的索引值);  //选库(0~15)

$redis->set ('key', 'value');  //存储数据

echo $redis->get ("key");  //获取

3.2 cmd中使用redis

首先进入到redis的安装目录

然后再命令命令行下输入 cd/redis     注:redis就是你的安装路径

然后输入 redis-cli  连接到redis,然后就可以对redis进行操作了
PHP 中如何使用Redis

Redis的使用命令

4.1 字符串类型

4.1.1 命令

1. set命令:设置一个键和值,键存在则只覆盖,返回ok

格式set

例如set key value

 

2. get命令:获取一个键的值

格式get 键

例如get key

 

3. setnx命令:设置一个不存在的键和值(防止覆盖)

格式setnx key value key已存在则返回0表示失败成功返回1

 

4. setex命令:设置一个指定有效期的键和值(单位秒,成功返回ok

格式setex [有效时间] 到期后获取则无返回值

例如setex key 10 value

不写有效时间则表示永久有效,等价于set

 

5. setrange命令:替换子字符串  (替换长度由子子串长度决定)

格式setrange 键 位置(0开始) 子字串

例如setrange key 1 a key键对应值的第0个位置开始替换成功则返回2

 

6. mset命令:批量设置键和值,成功则返回ok

例如mset key1 value1 key2 value2 key3 value3

 

7. msetnx命令:批量设置不存在的键和值,成功则返回1,失败返回0

例如msetnx key1 value key2 value2 key3 value3

 

8. getset命令:获取原值,并设置新值成功后返回原值

例如getset key value

 

9. getrange命令:获取指定范围的值

例如getrange key 0 4 获取指定04位置上的值

 

10. mget命令: 批量获取值

例如mget key1 key2 key3

11. incr命令: 指定键的值做加加操作,返回加后的结

例如incr key

 

12. incrby命令: 设置某个键加上指定

例如incrby key m 其中m可以是正整数或负整数(加减操作)

 

13. decr命令: 指定键的值做减减操作,返回减后的结果。

例如decr key

 

14. decrby命令: 设置某个键减上指定

例如decrby key m 其中m可以是正整数或负整数

 

15. append命令:给指定key的字符串追加value,返回新字符串值的长度

例如append key 追加字串

 

16. strlen 获取字符串的长度

例如strlen 键名 返回对应的长度值。

4.1.2 应用场景

String类型是最基础的一种key-value存储形式,value其实不仅仅可以是String,也可以是数值类型。常常用来 做计数器这类自增自减的功能,可用在粉丝数、微博数等。

 

4.2 哈希类型(hash)

Redis hash 是一个键值(key => value)对集合。Redis hash 是一个 string 类型的 field 和 value 的映射

表,hash 特别适合用于存储对象。

Hash表也称散列表,也有直接译作哈希表,Hash表是一种特殊的数据结构,它能够快速定位到想要查找的记录, 根据哈希的表名,直接定位

结构如下:

PHP 中如何使用Redis

 

 

 

 


4.2.1 命令

1. hset命令:设置一个哈希表的键和值成功则返回1

格式:hset hash名(hash表名) 键 值

例如hset key field value

 

2. hsetnx命令:设置一个哈希表中不存在的键

格式hsetnx hash名 键 值 成功返回1,失败返回0

例如hsetnx key field value

 

3. hmset命令:批量设置,成功返回ok

格式hmset key field1 value1 field2 value2

 

4. hmget命令批量获取

格式hmget hash名(hash表名) 键1 键2 键3

例如hmget key field1 field2 field3

 

5. hget命令: 获取执行哈希名中的键对应值

格式:hget hash名 键

例如:hget key field

 

6. hlen key  获取某哈希key名中键的数量

7. hdel key field    删除哈希key中find键

8. del key    删除当前hash表数据,成功返回1

9. hkeys key  返回哈希名为key中的所有键。

10. hvals key  返回哈希名为key中的所有值。

11. hgetall key    返回哈希名为key中的所有键和值。

12. hexists key field  查看哈希名为key field 是否存在,若存在返回1不存在则返回0

 

 

4.2.2 应用场景

存储部分变更数据,如用户信息等。

 

4.3 链表类型(list)

Redis中,List类型是按照插入顺序排序的字符串链表。和数据结构中的普通链表一样,

List中可以包含的最大元素数量是4294967295

从元素插入和删除的效率视角来看,如果我们是在链表的两头插入或删除元素,这将会是非常高效的操作,  即 使链表中已经存储了百万条记录,该操作也可以在常量时间内完成。然而需要说明的是,

如果元素插入或删除操作是作用于链表中间,那将会是非常低效的。结构如下:

 

PHP 中如何使用Redis 

 

 

4.3.1 命令

1. lpush list value  在list头部压入一个值,返回list中元素的总个数

 

2. lrange list 0 -1  获取list中内容0:表示开头 -1表示结尾。

 

3. rpush list value   在list尾部压入一个字串,返回list中元素的总个数

 

4. linsert list before value value1  在对应list的特定位置前添加一个元素成功返回列表长度,如果没有找到指定元素 ,返回 -1 。 如果 key 不存在或为空列表,返回 0 。

 

5. linsert list after value value1  在list的特定位置添加一个元素成功返回列表长度,如果没有找到指定元素 ,返回 -1 。 如果 key 不存在或为空列表,返回 0 。

 

6. lset list 1 value  修改指定索引位置上的值,从0开始数把第1个值改成value,成功返回ok

 

7. lrem list 2 value   删除前两个为value的,成功返回1

 

8. lrem list -2 value  删除后两个为value的,成功返回1

 

9. lrem list 0 value   删除所有value1,成功返回1

 

10. ltrim list 0 5   删除(0-5)此范围外的值,成功返回ok

 

11. lpop list  从list的头部删除元素,并返回删除元素

 

12. rpop list  从list的尾部删除元素,并返回删除元素

 

13. rpoplpush list1 list2  将list1的尾部一个元素移出到list2头部。并返回移出的值

 

14. lindex list 1  返回list中索引位置上的元素

 

15. llen list  返回list长度

 

4.3.2 应用场景

list就是链表,略有数据结构知识的人都应该能理解其结构。使用Lists结构,我们可以轻松地实现最新消息排行 等功 能。List的另一个应用就是消息队列,可以利用List的PUSH操作,将任务存在List中,然后工作线程再 用POP操作将任务取出进行执行。 
Redis的list是每个子元素都是String类型的双向链表,可以通过push和pop操作从列表的头部或者尾部添加或 者删除元素,这样List即可以作为栈,也可以作为队列

 

4.4 set(集合)

 

Redis中,我们可以将Set类型看作为没有排序的字符集合,和List类型一样,我们也可以在该类型的数据值上 执行添加、删除或判断某一元素是否存在等操作。

zset是在set的基础上增加了顺序,形成一个有序的集合

结构如下:

PHP 中如何使用Redis 

4.4.1 命令

1. sadd key value  key中添加一个元 素成功返回1,失败(重复)返回0

 

2. smembers key 获取key中的所有元素

 

3. srem key value  key中删除一个value成功返回1,失败(不存在)返回0

 

4. spop key m 随机返回并删除key中的m个元素

 

5. sdiff key1 key2 返回两个集合的差集以key1为标准,获取key2中不存在的。

 

6. scard key   获取key集合里面的元素数量。如果key对应的值不是集合类型的则报错。

 

7. sinter key1  key2  返回key1和key2两个集合的交集。

 

8. smove key1 key2 a 移除指定集合中的元素到目标集合中,如果目标集合中存在该元素则仅仅进行移除(把key1中的 a 移除到 key2中)成功返回1失败返回0

 

4.4.2 应用场景

共同好友、 利用唯一性,统计访问网站的所有独立ip 、好友推荐时,根据tag求交集大于某个阈值就可以推荐

 

4.5 zset(有序集合)

 

Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员,不同的是每个元素都会关 联一个 double类型的分数。

redis正是通过分数来为集合中的成员进行 从小到大的排序。

有序集合的成员是唯一的,但分数(score)却可以重复

4.5.1 命令

1. zadd key 99 value  将一个或多个成员元素加入到有序集当中按权重从小到大排序
格式:zadd key 权重值 value
例如:zadd key 1 one 2 two

2. zcard key  获取集合中的成员数量

3. zcount key 90 100   获取集合中权重在 90到100 的成员数量

4. zincrby key increment member   有序集合中对指定成员的权重加上增量 increment,如果没有这个成员则会设置一个新成员返回成员的权重值
例如:zincrby key 2 two  给two的权重加2

 

5. zrange key start end 返回名称为key 的集合按 权重从大到小排序
例如:zrevrange key 0 -1   // 0 表示有序集第一个成员,以 1 表示有序集第二个成员,以此类推,也可以使用负数下标,以 -1 表示最后一个成员, -2 表示倒数第二个成员,以此类推

 

6. zrevrange key start end 返回名称为 key 的 集合按 权重从排序

7. zrank key member 返回名称为 key 的集合中元素的排名(按 score 从小到大排序)即下标

8. zrevrank key member 返回名称为 key 的集合中元素的排名(按 score 从排序)即下标

9. zrem key member 移除集合中指定成员,可以指定多个,成功返回1

10. zremrangebyrank key start stop  移除集合中,指定排名(下标)区间内的所有成员

11. zrevrange key min max 移除集合中,指定排名(权重)区间内的所有成员

12. zscore key value     返回指定成员的权重值

 

4.5.2 应用场景

游戏积分排名、微博热门话题、热卖商品等

 

 

4.6 其它常用命令

 

1. keys list*  返回名以list开头的所有键(key)

 

2. exists key  判断键名为key的是否存在存在返回1, 不存在返回0

 

3. del key  删除一个键(名为key)成功则返回1

 

4. expire key 10 设置键名为key的过期时间为10秒后

 

5. ttl key  查看键名为key的过期时间,若为-1表示永久

 

6. type key   返回key的类型

 

上一篇:PHP 静态缓存


下一篇:【Sigma敏捷版系列文章】如何利用apiserver-builder自定义Kubernetes API