本文目录导读:

在PHP项目中使用Redis操作字符串类型,主要通过 Redis 类的以下方法实现,以下是常用操作的代码示例和说明:
连接Redis(基础配置)
<?php
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
// 如果有密码
// $redis->auth('yourpassword');
?>
核心字符串操作方法
设置和获取值
// 设置单个键值
$redis->set('key', 'value');
// 设置带过期时间(单位:秒)
$redis->setex('expire_key', 3600, 'expires in 1 hour');
// 设置带过期时间(毫秒)
$redis->pSetEx('pxkey', 5000, 'expires in 5 seconds');
// 获取值
$value = $redis->get('key');
echo $value; // 输出: value
// 当键不存在时设置(防止覆盖)
$redis->setnx('lock_key', 'locked');
// 批量设置/获取
$redis->mset(['key1' => 'val1', 'key2' => 'val2']);
$values = $redis->mget(['key1', 'key2', 'key3']); // key3不存在返回false
数值操作
// 原子递增/递减
$redis->set('counter', 10);
$redis->incr('counter'); // 11
$redis->incrBy('counter', 5); // 16
$redis->decr('counter'); // 15
$redis->decrBy('counter', 3); // 12
// 浮点数递增
$redis->incrByFloat('float_key', 1.5);
字符串修改操作
$redis->append('msg', ' World');
echo $redis->get('msg'); // Hello World
// 获取子字符串(索引从0开始)
$redis->set('text', 'abcdef');
$sub = $redis->getRange('text', 1, 3); // 'bcd'
// 替换指定位置的字符串
$redis->setRange('text', 2, 'XYZ');
echo $redis->get('text'); // 'abXYZef'
// 获取字符串长度
$len = $redis->strlen('text'); // 7
原子操作(并发安全)
// 获取并设置(适用于计数器等场景)
$oldValue = $redis->getSet('counter', 100);
// 对比交换(CAS操作)
$redis->watch('stock');
$current = $redis->get('stock');
// 中间有其他修改则会失败
$redis->multi();
$redis->set('stock', $current - 1);
$redis->exec();
高级场景示例
缓存管理
class RedisCache {
private $redis;
public function __construct() {
$this->redis = new Redis();
$this->redis->connect('127.0.0.1', 6379);
}
public function getData($key, $callback, $ttl = 3600) {
if ($data = $this->redis->get($key)) {
return json_decode($data, true);
}
$data = $callback();
$this->redis->setex($key, $ttl, json_encode($data));
return $data;
}
}
// 使用示例
$cache = new RedisCache();
$users = $cache->getData('users_cache', function() {
return Database::getAllUsers();
});
分布式锁
class RedisLock {
public static function acquire($key, $ttl = 10) {
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
// 使用setnx实现原子性加锁
return $redis->setnx("lock:$key", time() + $ttl);
}
public static function release($key) {
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$redis->del("lock:$key");
}
}
// 使用示例
if (RedisLock::acquire('user_edit_123')) {
// 执行关键操作
RedisLock::release('user_edit_123');
}
限流计数器
class RateLimiter {
public static function check($key, $maxRequests, $window) {
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$current = $redis->incr($key);
if ($current == 1) {
$redis->expire($key, $window);
}
return $current <= $maxRequests;
}
}
// 接口限流:每分钟最多100次
if (!RateLimiter::check('api:user_' . $userId, 100, 60)) {
http_response_code(429);
die('请求过于频繁');
}
注意事项
- 连接复用:生产环境中使用长连接或连接池
- 错误处理:总是检查操作是否成功
if (!$redis->set('key', 'value')) { // 处理错误 } - 序列化:存储对象时记得序列化
$redis->set('user', serialize($userObj)); $userObj = unserialize($redis->get('user')); - TTL管理:合理设置过期时间,避免内存泄漏
- 原子操作:使用
incr/decr代替get+set进行数值操作,确保并发安全
是PHP操作Redis字符串类型的完整指南,涵盖了从基础到高级的所有常用场景。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播