Home>Article>Backend Development> PHP uses Redis examples to explain

PHP uses Redis examples to explain

小云云
小云云 Original
2018-02-27 11:50:57 12581browse


Redis is an open source log-type, Key-Value database written in ANSI C language, supports network, can be memory-based and persistent, and provides APIs in multiple languages. The data types supported by Redis are String (string), List (list), Hash (dictionary), Set (collection), Sorted Set (ordered set); Redis default port is 6379.

1. Connection

$redis = new Redis(); // 实例化$redis->connect('127.0.0.1', 6379); // 连接$redis->auth('redis密码'); // 没密码的redis可忽略此步骤

2. Data type

2-1 string string

// 存储或更改$redis->set('test', 'aaa');// 获取值$redis->get('test'); // aaa

2-2 list list

方法中的l代表list操作
  1. Storage

    $redis->lpush('list', 'a'); // 从左边加入$redis->lpush('list', 'b');$redis->lpush('list', 'c'); $redis->rpush('list', 'd'); // 从右边加入$redis->lset('list', 2, 'e');// 设置或更改列表指定位置的值,成功返回1,失败返回错误信息
  2. Delete

    $redis->lpop('list'); // 删除左边第一个$redis->rpop('list'); // 删除右边第一个// $redis->lrem('list名', '值', num); // 根据值删除元素,第二个参数是要删除的值(值为这个值的元素要被删除),// 第三个参数 num 表示:从哪开始删、删几个, //num>0 从表头往表尾删,删除num个结束; //num<0 从表尾往表头删,删除 |num| 个; //num=0 移除表中所有值为'b'的元素 $redis->lrem('list', 'b', 2);
  3. Get, return array

    $redis->lrange('list', 0, -1); // 返回一个数组。存储在key中的列表里指定范围的元素, // 第一个参数是列表名 // 第二个参数是起始位下标, // 第三个是结束位下标(包含结束位元素)。 // 负数代表倒数,-1代表倒数第一个; // 如果起始大于结束返回空,结束大于实际长度,返回至最后一个元素。$redis->lgetrange('list', 0, 2);// 获取列表指定区间的值,同上$redis->ltrim('list', 0, 3); // 截取并保留列表指定区间的值,其余值删除。 // 成功返回1,失败返回错误信息。负数代表倒数$redis->lsize('list'); // 获取列表的长度$redis->lget('list', 2) // 获取列表指定位置的值$redis->lindex('list', 2); // 获取列表指定位置的值

2-3 hash dictionary

一个string类型的field和value的映射表,特别适合用于存储对象。每个 hash 可以存储 2的32次方 - 1 键值对(40多亿) hash表相当于 redis存储 key => value 中的key, 表内容相当于 value 方法中h代表hash操作
  1. Storage

    // $redis->hset('hash表', key, value); // 如果hash表不存在,创建一个该hash表,如果不存在该key则设置成功,返回true, // 如果存在,则替换掉原来的值,返回false,失败返回false // 第一个参数是字典名 $redis->hset('hashtest', 'a', 'aaa'); // 返回true $redis->hset('hashtest', 'a', 'bbb'); // 返回false,a的值改为bbb $redis->hset('hashtest', 'b', 'bbb'); // 返回true,增加b,值为bb$redis->hmset('hashtest', [1 => 1, 2 => 2, 3 => 3]); // 批量赋值, $redis->hincrby('hashtest', '1', 1); // hash表中的key对应的值自增1(整数), // 第一个参数字典名 // 第二个参数是key名, // 第三个参数是自增的幅度。如果表中不存在该key,则自动添加该key,并设置值为自增幅度$redis->hincrbyfloat('hashtest', '2', 1.5); // hash表中key自增
  2. Get

    $redis->hget('hash表', key); // 获取某个key对应的值 $redis->hget('hashtest', 'a'); // 获取hashtest中a的值$redis->hkeys('hashtest'); // 获取hash表中的所有的keys(键名),返回一个数组 $redis->hvals('hashtest'); // 获取hash表中的所有的values(值),顺序随机,返回一个数组$redis->hgetall('hashtest'); // 获取hash表中所有的键值对,顺序随机,返回一个数组$redis->hlen('hashtest'); // 获取hash表中key的数量 $redis->hmget('hashtest', [1, 2, 3]); // 批量获取多个key对应的value,第二个参数是keyArr $redis->hexists('hashtest', 'b'); // 判断hash表中是否存在该key
  3. Delete

    $redis->hdel('hashtest', 'a'); // 删除hash表中的一个key,成功返回true, // 如果表不存在或key不存在返回false

2-4 set set

Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。 集合中最大的成员数为 2的32次方 - 1 (4294967295, 每个集合可存储40多亿个成员)。 方法中的s代表set操作
  1. Add

    // $redis->sadd('set集合', '值'); // 往settest中加入一个值,成功,返回添加的个数,失败返回0。// 第一个参数是set集合名// 第二个参数是往该集合插入新值,即:往value中插入新值 $redis->sadd('settest', 'a'); // 1 $redis->sadd('settest', 'b'); // 1 $redis->sadd('settest', 'a'); // 0$redis->sadd('settest', ['c', 'd', 'e']); // 一次添加多个值
  2. Get

    $redis->smembers('settest'); // 获取集合中所有的元素$redis->sismember('settest', 'b'); // 判断元素是否是set成员$redis->scard('settest'); // 查看集合中元素的数量$redis->sinter('settest', 'settest2'); // 返回两个集合的交集$redis->sinterstore('settest3', 'settest', 'settest2'); // 将settest和settest2的交集放到集合settest3中$redis->sunion('settest', 'settest2'); // 返回两个集合的并集$redis->sunionstore('settest4', 'settest', 'settest2'); // 将settest和settest2的并集放到集合settest4中$redis->sdiff('settest', 'settest2'); // 返回两个集合的差集$redis->sdiffstore('settest5', 'settest', 'settest2'); // 将settest和settest2的差集放到集合settest5中
  3. Delete

    $redis->srem('settest', 'a'); // 删除集合中的某个值,$redis->srem('settest', 'a', 'b'); // 删除多个值 $redis->spop('settest'); // 移除集合中一个随机的元素,并返回该元素

2-5. sorted set ordered set

Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。 不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。 有序集合的成员是唯一的,但分数(score)却可以重复。 集合中最大的成员数为 2的32次方 - 1 (4294967295, 每个集合可存储40多亿个成员)。 方法中的z代表有序集合操作
  1. Add or update

    // $redis->zadd('有序集合名', 分数, 值); // 向有序集合ztest中一个值,分数值可以是整数值或双精度浮点数。// 执行zadd时,如果不存在,则创建一个新的有序集合;// 如果ztest存在但不是有序集类型时,返回一个错误。 $redis->zadd('ztest', 1, 'a'); $redis->zadd('ztest', 2, 'a'); // 当某元素存在时,更新这个元素的分数,并重新插入该元素,保证元素在正确的位置。 // 但不算新添加的$redis->zadd('ztest', 分数1, 值1, 分数2, 值2); // 向有序集合插入多个值 $redis->zadd('ztest', 2, 'b', 3, 'c', 4, 'd'); $redis->zincrby('set', 2, 'c'); // 指定的值 c 增加 2
  2. Get

    // $redis->zrange('z集合', 起始位, 结束位, 布尔值); // 获取指定区间的有序集合。返回数组。分数从小到大。// 第一个参数: 有序集合名// 第二个参数:起始位置,// 第三个参数:结束位置(包含该位置),负数代表倒数第几个,// 第四个参数:可选参数,布尔值,是否带有分数,默认false $redis->zrange('ztest', 0, 1); // ['a', 'b'] 按分数排序,但是不带分数 $redis->zrange('ztest', 0, 1, true);// ['a' => 2, 'b' => 2] 按分数排序,并且携带分数 ['元素' => '分数']$redis->zrevrange('zset', 1, 2); // 获取指定区间的有序集合。返回数组。分数从大到小。$redis->zscore('ztest', 'a'); // 获取指定元素的分数$redis->zcard('zset'); // 获取存储元素的个数$redis->zcount('zset', 2, 5); // 分数介于 2~5 的元素的个数$redis->zrangebyscore('zset', 2, 3); // 返回分数介于 2~3 的元素,不带分数,显示方式同zrange$redis->zrangebyscore('zset', 2, 3, ['withscores' => true]); // 返回分数介于2~3的元素,并带分数显示,显示方式同zrange
  3. Delete

    $redis->zrem('zset', 'c'); // 删除指定成员$redis->zremrangebyscore('set', 2, 3); // 移除分数介于2~3的元素,返回删除的个数

3. Other common methods

3 -1 Find related keys

// 按条件查出对应的key(键),支持字符串拼接 (返回值是一个数组,即使没查出数据也会返回空数组) // *代表任意字符任意长度, ?任意字符一个长度$redis->keys('A'); // 找出等于 A 的那个 键$redis->keys('a*'); // 找出以 a 开头,后面为任意值的 键,$redis->keys('*b*'); // 找出链接中间包含 b 的 键$redis->keys('c??'); // 找出长度为3,且第一个字符为c的 键$a = a;$redis->keys($a . '*');// 使用keys后可以使用for循环加 get() 来获取相关keys对应的值

3-2 Expiration time

  1. View expiration time

    // $redis->ttl('key名'); // 查看某个key有效期的剩余时间,返回秒数。 // 当 无过期时间 时,返回:-1; // 当 无该key值 时,返回-2; $redis->ttl('ttltest'); // 查看ttltest剩余过期时间
  2. Set expiration time

    Redis::expire('key', second); // 多少秒后过期Redis::expireAt('key', timeStemp); // 到某一个 时间戳(秒) 的时候过期

Related recommendations:

How does PHP use redis message queue to publish micro

Detailed explanation of PHP using Redis instances

php uses Redis to implement methods to prevent secondary writing under large concurrency

The above is the detailed content of PHP uses Redis examples to explain. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn