## 一:连接redis
```
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);//连接地址和端口
$redis->auth('mypassword');//连接密码
//查看服务是否运行
echo "Server is running: " . $redis->ping();
```
## 二:通用操作:
```
//设置缓存的过期时间为5秒
$redis->expire('key', 5);
//删除缓存
$redis->del('key'); //可以传入数组 ['key1','key2'] 删除多个键
//判断缓存是否存在
$redis->exists('key'); //验证键是否存在,存在返回true
//获取缓存的有效时间,单位秒
$redis->ttl('key'); //key不存在返回-2,key永不过期返回-1
//移除 key 的过期时间,key 将持久保持。
$redis->persist('key');
//获取redis信息
$redis->info();
//获取所有的key
$redis->keys('*') //可以模糊匹配 keys('goods*') 模糊匹配goods的key
//获取值的类型
$redis->type('key')
//查看当前数据库key的数量
$redis->dbSize();
```
## 二:常见String的操作
```
//设置缓存
$redis->set('key','value');
//获取缓存
$redis->get('key'');
//设置key的值同时设置缓存时间
$redis->setex('key', 3600, 'value')
// 批量设置缓存
$redis->mset(['number' => 'value0', 'key' => 'value1']);
//批量获取缓存,返回一个数组
$redis->mget(['number','key']);
//当key不存在时再设置缓存,例如已经有了一个key为goods的缓存,使用setnx('goods','value')方法时将不再缓存
$redis->setnx('key','value');
//批量设置缓存,使用setnx()方法批量操作
$redis->msetnx(['key0' => 'value0', 'key1' => 'value1']);
//自增
$redis->incr('number'); //键值加1
//键值加10
$redis->incrby('number',10);
//自减
$redis->decr('number'); //键值减1
//键值减10
$redis->decrBy('number',10);
//追加值,例如原有值是hello,追加后变成hello-world
$redis->append('key', '-world');
//获取key的长度
$redis->strlen('key');
//截取缓存的值
$redis->getRange('key', 0, 5); // 键值截取从0位置开始到5位置结束
```
## 三:常见List的操作
```
//向列表左边添加一个元素,返回链表长度
$redis->lpush('list', 'javasrcipt');
$redis->lpush('list', 'html');
$redis->lpush('list', 'css');
$redis->lpush('list', 'php');
//获取列表所有值
$list = $redis->lrange('list', 0, -1);
["php","css","javasrcipt "]
//从左边删除一个
$redis->lpop('list');
//获取列表所有值
$list = $redis->lrange('list', 0, -1);
["css","html","javasrcipt "]
//向列表右边添加一个元素,返回链表长度
$redis->rpush('rlist', 'python');
$redis->rpush('rlist', 'go');
$redis->rpush('rlist', 'node');
//获取列表所有值
$list = $redis->lrange('list', 0, -1);
["python","go","node"]
//从右边删除一个
$redis->rpop('rlist');
//获取列表所有值
$list = $redis->lrange('list', 0, -1);
["css","html","javasrcipt "]
//通过下标修改元素的值
$redis->lset('list', 0, 'newV3');
```
## 三:常见 Hash的操作
```
// 缓存订单数据
$redis->hset('order', 'order_key', 'D2022401086');
$redis->hset('order', 'create_time', '20224010618');
$redis->hset('order', 'product_name', '衣服');
$redis->hset('order', 'price', '100');
//还可以批量缓存一个hash,比如缓存一个用户数据
$user = [
'id'=> 1,
'name' => 'itbsl',
'age' => 25,
'email' => 'itbsl@gmail.com',
'address' => '北京朝阳区大望路'
];
$redis->hmset('user', $user);
//获取user的name字段
$redis->hget('user','name');
//获取一个hash中所有的key和value
$redis->hgetall('order');
["order_key" => "D2022401086" ,"create_time" => "product_name" => "衣服", "price" => 100 ]
//获取一个hash中所有的key
$redis->hkeys('order');
["order_key","create_time","product_name","price"]
//获取hash缓存的值
$redis->hvals('order');
["D2022401086","20224010618","衣服","100"]
//获取一个hash中key的数量
$redis->hlen('order');
//删除hash中一个key 如果表不存在或key不存在则返回false
$redis->hdel('order', 'product_name'); //类似unset($order['product_name'])
```
## 四:常见Set的操作
```
//添加
$redis->sadd('team', 'kobe');
$redis->sadd('team', 'jordan');
$redis->sadd('team', 'curry');
$redis->sadd('team', 'kobe');//由于kobe已经被添加到team集合中,所以重复添加是无效的
//获取值
$redis->smembers('set');
["kobe","jordan","curry"]
//删除指定的值
$redis->srem('team', 'kobe', 'curry');
["jordan"]
//查看集合中成员的数量
$redis->scard('team');
//计算两个集合的交集
$redis->sinter('set1', 'set2')
//计算两个集合的并集
$redis->sunion('set1', 'set2')
//计算两个集合的差集
$redis->sdiff('set1', 'set2')
```
## 四:常见ZSet的操作
```
//添加
$redis->zadd('set', 1, 'cat');
$redis->zadd('set', 2, 'dog');
$redis->zadd('set', 3, 'fish');
//获取所有值
$redis->zrange('set', 0, -1);
["cat","dog","fish"]
//获取分值(score)最大的三位,可以用作点击率(score)最高的使用场景
$redis->zRevRange('set', 0, 2, true);
//获取score在[40, 90]之间的元素,按照score从小到大排序
$redis->zRangeByScore('set', 40, 90);
//返回元素的score值
$redis->zscore('set', 'dog'); //2
//查看集合中成员的数量
$redis->zcard('set'); //3
//获取分值在[50,90]的元素的数量
$count = $redis->zCount('zSet', 50, 90);
//删除指定成员
$redis->zrem('set', 'cat');
//删除score在[40, 70]之间的元素
$redis->zRemRangeByScore('set', 40, 70);
```