laravel redis五种简单数据类型的使用

laravel redis五种简单数据类型的使用,第1张

laravel redis五种简单数据类型的使用 了解redis

redis是一种支持Key-Value等多种数据结构的存储系统。可用于缓存,事件发布或订阅,高速队列等场景。该数据库使用ANSI C语言编写,支持网络,提供字符串,哈希,列表,队列,集合结构直接存取,基于内存,可持久化。

redis的五种数据类型

Redis一共支持五种数据类:string(字符串),hash(哈希),list(列表),set(集合,无序的)和zset(sorted set有序集合)。

redis的版本为5.3.4

一、String类型的存储以及读取 1.长时间存储,没有过期时间,ttl为-1
// 字符串类型
$redis = Redis::connection();
$redis->set("string_name", "我是字符串类型的值");
dd($redis->get("string_name"));

2.设置有效期,单位是秒(S),ttl为设置的时间
 $redis = Redis::connection();
 $redis->setex('string_name', 50, '我是字符串类型的值'); // 设置有效期为50秒的键值
 dd($redis->get("string_name"));

大家可以看到,ttl就有时间了

3.设置有效期,单位是毫秒(ms),ttl为设置的时间
// 设置有效期,但是是毫秒(ms) 50000/1000 = 50
$redis = Redis::connection();
$redis->psetex('string_name', 50000, '我是字符串类型的值ms'); // 设置有效期为50秒的键值
dd($redis->get("string_name"));

4.带条件的存储
// Redis Setnx(SET if Not eXists) 命令在指定的 key 不存在时,为 key 设置指定的值。
$redis = Redis::connection();
$redis->setnx('string_name', '我是字符串类型的值_setnx');
dd($redis->get("string_name"));

因此在执行3的时候是有过期时间的,因此这个的值为最新设置的,并且ttl为-1

再次执行这次命令,更改value的值,看执行结果,还是之前的数据

5.删除
 $redis = Redis::connection();
 $redis->del('string_name');
 dd($redis->get("string_name"));

6.是否存在
 // 是否存在
 if (Redis::exists('string_name'))
 {
     $value = Redis::get("string_name");
     dd($value);
 } else {
     dd("不存在,从数据库里面取值");
 }

二、Hash类型的以及读取 1.存
// hash
$redis = Redis::connection();
$redis->hset('test', 'key1', 'v1');
$redis->hset('test', 'key2', 'v2');
dd($redis->hget('test', 'key1'));


再来一个看看区别

  $redis = Redis::connection();
  $redis->hset('test1', 'key1', 'v1');
  $redis->hset('test1', 'key2', 'v2');
  dd($redis->hget('test1', 'key1'));

2.增加一个元素
Redis::hset("test", "key3", "v3");
dd(Redis::hget("test", "key3"));


若直接用此命令添加元素,若之前存在就直接覆盖了,验证,以前的value是v1

Redis::hset("test", "key1", "v1_new");
dd(Redis::hget("test", "key3"));

3.添加一个元素,判断是否存在

白话就是若存在则不保存,还是以前的数据,不存在的时候才是本次存入的数据

a.key2此键值以前存在,不会更新value值

Redis::hsetnx("test", "key2", "va_new");


b.key4不存在,则插入

Redis::hsetnx("test", "key4", "v4");

4. 存取多个元素到hash表
 Redis::hmset('test', array('key5' => 'v5', 'key6' => 'v6'));
 dd(Redis::hmget('test', array('key5', 'key6')));

5.删除hash表中指定key的元素
Redis::hdel('test', 'key1');

6.返回hash表元素个数
 // 返回hash的长度
dd(Redis::hlen('test'));

7.返回hash表中的所有key
dd(Redis::hkeys('test'));

8.返回hash表中的所有value
dd(Redis::hvals('test'));

9.获取 hash 中所有的key-value
 dd(Redis::hgetall('test'));

10.返回hash表中的指定key是否存在
// 返回hash表中的指定key是否存在
if (Redis::hexists('test', 'key1')) {
    dd(Redis::hget("test", "key1"));
} else {
    dd("不存在,可以从数据库取");
}

三.Set 无序类型的存储与访问 1.添加

注意:新增返回TRUE,重复返回FALSE

// 添加
Redis::sadd("set", 1);
Redis::sadd("set", 2);
Redis::sadd("set", 3);

2.移除指定元素
Redis::srem("set", 1);

3.d出首元素
Redis::spop("set");

4.移动当前set集合的指定元素到另一个set集合
// 1.若移动的是set里面的最后一个元素,则set就会被删除
// 2.若set1不存在,则会自动创建
Redis::sadd('set', 1);
// 把set里面的2移动到set1里面
Redis::smove('set', 'set1', 2); // 移动


5.返回当前set表元素个数
 dd(Redis::scard("set"));

6.判断元素是否属于当前set集合
dd(Redis::sismember("set", 2));

7.返回当前set集合的所有元素
 dd(Redis::smembers("set"));

8.返回两个表中元素的交集/并集/补集

准备工作:set里面有[1],set1里面有[1,2]

交集
dd(Redis::sinter("set", "set1"));

并集
dd(Redis::sunion("set", "set1"));

补集
dd(Redis::sdiff("set", "set1"));

8.将两个表交集/并集/补集元素 copy 到第三个表中 交集 单表
 // 等同于将'set1'的内容copy到'ste2'中,并将'set2'转为set1表
 Redis::sinterstore('set2', 'set1');

多表
// 将'set'和'set2'中相同的元素 copy 到'set3'表中, 覆盖'set3'原有内容
Redis::sinterstore('set3','set', 'set2');

并集

参考交集

补集

参考交集

四、有序set表 *** 作 1.增加元素,并设置序号,成功返回true,重复返回false
Redis::zadd('zset', 1, 1);
Redis::zadd('zset', 2, 2);
Redis::zadd('zset', 3, 3);

2.对指定元素索引值的增减,改变元素排列次序
// 把value为1的排序改为4+1则是5
Redis::zincrby("zset", 4, 1);

3.移除指定元素
Redis::zrem("zset", 2);

4.按位置次序返回表中指定区间的元素,正序
 // 返回位置 0 和 5 之间(两个)的元素
 dd(Redis::zrange("zset", 0, 5));
 // 返回位置 0 和倒数第一个元素之间的元素(相当于所有元素)
 dd(Redis::zrange("zset", 0, 1));

5.同上,返回表中指定区间的元素,按次序倒排
dd(Redis::zrevrange("zset", 0, 5));

6.按顺序/降序返回表中指定索引区间的元素
  • 值返回
Redis::zadd('zset1', 1, serialize(array("key1"=>"value1")));
Redis::zadd('zset1', 2, serialize(array("key2"=>"value2")));
Redis::zadd('zset1', 3, serialize(array("key3"=>"value3")));
// 返回索引值1-2之间的元素
dd(Redis::zrangebyscore('zset1', 1, 2));

  • 索引值
// 返回索引值1-2之间的元素并包含索引值
dd(Redis::zrangebyscore('zset1', 1, 2, array('withscores'=>true)));

  • limit
// array(0,1), 是返回1个元素, array(0,2)是返回2个元素
dd(Redis::zrangebyscore('zset1', 1, 2, array('withscores'=>true, "limit" => array(0,1))));

7. 统计一个索引区间的元素个数
// 
dd(Redis::zcount('zset1', 1, 2));
//'(3'表示索引值在3-5之间但不含3,同理也可以使用'(5'表示上限为5但不含5
dd(Redis::zcount('zset1', '(3', 5));

还没有整理完,有时间了,继续整理添加……

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5685561.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存