# 在项目中使用
# predis 与 phpredis 的区别
在使用之前,我们先了解一下 predis 与 phpredis 的区别:
Predis:它是使用纯 PHP 编写的。这意味着 Predis 不需要额外的 C 扩展或编译步骤,只需通过 Composer 即可安装和使用。
phpredis:这是一个 PHP 的扩展,使用 C 语言编写。因此,它提供了与 Redis 交互的底层接口,通常具有更好的性能。安装 phpredis 通常需要编译源代码并将其作为 PHP 扩展加载。
Predis 和 phpredis 都是用于在 PHP 中与 Redis 交互的库,但它们在编写语言、性能、连接管理、扩展性、兼容性、使用方式和社区支持方面有所不同。选择哪个库取决于你的具体需求,例如项目需求、性能要求、易用性和安装需求等。
考虑到扩展性和简便性,在 laravel 项目中,选择 predis 开发包。
composer require predis/predis:~1.0
之后需要再查看 database.php 配置文件的 redis 选项,修改 .env 文件中的环境变量:
REDIS_CLIENT=predis
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
在 laravel 项目中,先看 database.php 文件中的配置项,那么可以看出几个重要指标,默认的驱动为 phpredis
,redis 默认连接的数据库是 DB0
, 使用 redis 缓存功能的时候连接的数据库为 DB1
,其他的需要注意的是 redis 的主前缀,以及 redis 缓存键名的次前缀,这得益于可视化工具,一目了然其中数据长什么样子。
'redis' => [
'client' => env('REDIS_CLIENT', 'phpredis'),
'options' => [
'cluster' => env('REDIS_CLUSTER', 'redis'),
'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_database_'),
],
'default' => [
'url' => env('REDIS_URL'),
'host' => env('REDIS_HOST', '127.0.0.1'),
'username' => env('REDIS_USERNAME'),
'password' => env('REDIS_PASSWORD'),
'port' => env('REDIS_PORT', '6379'),
'database' => env('REDIS_DB', '0'),
],
'cache' => [
'url' => env('REDIS_URL'),
'host' => env('REDIS_HOST', '127.0.0.1'),
'username' => env('REDIS_USERNAME'),
'password' => env('REDIS_PASSWORD'),
'port' => env('REDIS_PORT', '6379'),
'database' => env('REDIS_CACHE_DB', '1'),
],
],
# 数据类型的使用场景
redis 拥有多种数据类型,具体的使用方法,可参考官方文档,在此只列举不用数据类型的使用场景。
# hash 的使用场景
对象属性存储:Hash特别适合用于存储对象,可以将对象拆分成多个属性,每个属性名作为field,属性值作为value存储。
配置文件存储:在Web应用程序中,可以使用Hash来保存各种配置参数,如数据库连接参数、日志级别等。
# list 的使用场景:
消息队列:Redis的List可以作为消息队列使用,具有高并发、高性能的特点。
栈和队列:List可以模拟栈(后进先出)和队列(先进先出)的数据结构。
排行榜:List可以用于实现排行榜功能,支持快速增加和查询排名。
# set 集合使用场景:
唯一值存储:由于Set中的数据是唯一的,因此很适合存储需要去重的数据,如用户ID、邮件地址等。
聚合运算:使用Set集合可以方便地实现多个集合之间的交集、并集、差集等聚合操作。
随机选择元素:Set集合有一个随机选择元素的命令SPOP,可以用于抽奖、随机推荐等功能的实现。
# Zset 有序集合使用场景:
需要排序的列表:Zset是有序集合,可以根据分数对集合中的元素进行排序。
排行榜:Zset非常适合用于实现排行榜功能,如朋友圈点赞、游戏分数排行榜等。
# GEO 的使用场景
Geo 的数据类型适合进行地理位置坐标的运算
# Stream 的使用场景
Stream 供了消息队列(MQ)的持久化和主备复制功能,可以让任何客户端访问任何时刻的数据,并且能记住每一个客户端的访问位置,还能保证消息不丢失。