PHP 中如何使用Redis

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: Redis

Redis文档

目录

1 Redis1

1.1 简介1

2 PHP安装redis扩展2

3 Redis的使用4

3.1 PHP中使用redis4

3.2 cmd中使用redis4

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

1 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客户端,使用很方便

 

2 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-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查看扩展是否成功安装

 

3 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进行操作了

4 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 akey键对应值的第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表是一种特殊的数据结构,它能够快速定位到想要查找的记录,根据哈希的表名,直接定位

结构如下:

 

 

 

 


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

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

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

 

 

 

 

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的基础上增加了顺序,形成一个有序的集合

结构如下:

 

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的类型

 

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
4月前
|
缓存 NoSQL 网络安全
【Azure Redis 缓存】Azure Redis服务开启了SSL(6380端口), PHP如何访问缓存呢?
【Azure Redis 缓存】Azure Redis服务开启了SSL(6380端口), PHP如何访问缓存呢?
|
27天前
|
缓存 NoSQL PHP
Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出
本文深入探讨了Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出。文章还介绍了Redis在页面缓存、数据缓存和会话缓存等应用场景中的使用,并强调了缓存数据一致性、过期时间设置、容量控制和安全问题的重要性。
38 5
|
1月前
|
存储 NoSQL PHP
PHP与Redis结合使用,提升数据存储性能
随着互联网应用的发展,PHP与Redis的结合成为提升数据存储性能的重要手段。PHP作为流行的服务器端语言,常用于网站开发;Redis作为高性能内存数据库,以其快速读写能力,有效优化数据访问速度,减轻数据库压力。两者结合通过缓存机制显著提升应用响应速度,支持高并发场景下的稳定性和可扩展性。
|
1月前
|
存储 NoSQL 关系型数据库
PHP 使用 Redis
10月更文挑战第22天
35 6
|
2月前
|
缓存 NoSQL 数据处理
原生php实现redis缓存配置和使用方法
通过上述步骤,你可以在PHP项目中配置并使用Redis作为高性能的缓存解决方案。合理利用Redis的各种数据结构和特性,可以有效提升应用的响应速度和数据处理效率。记得在实际应用中根据具体需求选择合适的缓存策略,如设置合理的过期时间,以避免内存过度消耗。
58 0
|
3月前
|
消息中间件 NoSQL Go
PHP转Go系列 | ThinkPHP与Gin框架之Redis延时消息队列技术实践
【9月更文挑战第7天】在从 PHP 的 ThinkPHP 框架迁移到 Go 的 Gin 框架时,涉及 Redis 延时消息队列的技术实践主要包括:理解延时消息队列概念,其能在特定时间处理消息,适用于定时任务等场景;在 ThinkPHP 中使用 Redis 实现延时队列;在 Gin 中结合 Go 的 Redis 客户端库实现类似功能;Go 具有更高性能和简洁性,适合处理大量消息。迁移过程中需考虑业务需求及系统稳定性。
|
6月前
|
NoSQL 关系型数据库 MySQL
linux服务器重启php,nginx,redis,mysql命令
linux服务器重启php,nginx,redis,mysql命令
129 1
|
2月前
|
消息中间件 缓存 NoSQL
Redis 是一个高性能的键值对存储系统,常用于缓存、消息队列和会话管理等场景。
【10月更文挑战第4天】Redis 是一个高性能的键值对存储系统,常用于缓存、消息队列和会话管理等场景。随着数据增长,有时需要将 Redis 数据导出以进行分析、备份或迁移。本文详细介绍几种导出方法:1)使用 Redis 命令与重定向;2)利用 Redis 的 RDB 和 AOF 持久化功能;3)借助第三方工具如 `redis-dump`。每种方法均附有示例代码,帮助你轻松完成数据导出任务。无论数据量大小,总有一款适合你。
78 6
|
1月前
|
缓存 NoSQL 关系型数据库
大厂面试高频:如何解决Redis缓存雪崩、缓存穿透、缓存并发等5大难题
本文详解缓存雪崩、缓存穿透、缓存并发及缓存预热等问题,提供高可用解决方案,帮助你在大厂面试和实际工作中应对这些常见并发场景。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:如何解决Redis缓存雪崩、缓存穿透、缓存并发等5大难题