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

了解redis

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

redis的五种数据类型

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

redis的版本为5.3.4

在这里插入图片描述

代码,详情请按照目录查看

字符串类型

  public function testStringRedis()
    {
        // 字符串类型
//        $redis = Redis::connection();
//        $redis->set("string_name", "我是字符串类型的值");
//        dd($redis->get("string_name"));

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

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

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

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

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

hash类型

 // 测试redis的基础类型hash
    public function testHashRedis()
    {
        // hash
//        $redis = Redis::connection();
//        $redis->hset('test1', 'key1', 'v1');
//        $redis->hset('test1', 'key2', 'v2');
//        dd($redis->hget('test1', 'key1'));

        // 增加一个元素
//        Redis::hset("test", "key1", "v1_new");
//        dd(Redis::hget("test", "key3"));

        // 添加一个元素,判断
        //Redis::hsetnx("test", "key4", "v4");

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

        // 删除
        // Redis::hdel('test', 'key1');

        // 返回hash的长度
//        dd(Redis::hlen('test'));
        // 返回hash表中的所有key
//        dd(Redis::hkeys('test'));

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

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

list类型

 // 测试redis的list类型
    public function testListRedis(){
        // 左添加 在左(头部)添加数据到list中  不存在时创建  返回值为添加元素后list的长度
//        Redis::lpush('list', 1);
//        Redis::lpush('list', 2);
//        Redis::lpush('list', 3);

        // 左添加 在左(头部)添加数据到list1中  不存在时不创建  返回0
//        Redis::lpushx('list1', 3);

        // 右添加, 在右(尾部)添加数据到list中  不存在时创建  返回值为添加元素后list的长度
//        Redis::rpush('list', 4);

        //在右(尾部)添加数据到list中  不存在时不创建  返回0
//        Redis::rpushx("list1", 3);

        // 从左(头部)取出list中数据 返回值为取出的数据 若不存在当前key的话,返回nul
        // 取出的是头部第一个元素,就删除了此元素
//        dd(Redis::lpop('list'));

        // 4.从右(尾部)取出list中数据 返回值为取出的数据
        // 取出的是尾部第一个元素,就删除了此元素
//        dd(Redis::rpop('list'));

        // 获取该key中所有数据 是个数组
//        dd(Redis::lrange('list', 0, -1));

        // 获取key为list的list集合中 索引为0的数据
//        dd(Redis::lindex('list', 0));

        // 将list集合中索引为0的value值改为3
//        Redis::lset("list", 0, 3);

        // 获取该list的长度
//        dd(Redis::llen('list'));

        // 只保留索引0到索引1的value值 其余的都删除
//        Redis::lpush('list', 4);
//        Redis::lpush('list', 5);
//        Redis::lpush('list', 6);
//        Redis::ltrim("list", 0, 1);

        // 删除list列表右边的最后一个元素将其追加到list1列表,list1不存在会创建  返回值为那个元素的value值
        Redis::rpoplpush('list','list1');
        dd(1111111);
    }

set 无序

 // 测试redis的无序集合  set
    public function testSetRedis(){
        // 添加
//        Redis::sadd("set", 1);
//        Redis::sadd("set", 2);
//        Redis::sadd("set", 3);

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

        // 弹出首个元素
//        Redis::spop("set");

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

        // 返回当前set表元素个数
//
        // 判断元素是否属于当前set集合
//        dd(Redis::sismember("set", 2));
        // 返回当前set集合的所有元素
//        dd(Redis::smembers("set"));

        // 交集
//        dd(Redis::sinter("set", "set1"));
        // 并集
//        dd(Redis::sunion("set", "set1"));
        // 补集
//        dd(Redis::sdiff("set", "set1"));

        // 交集以后到第三张表
        // 等同于将'set1'的内容copy到'ste2'中,并将'set2'转为set1表
//        Redis::sinterstore('set2', 'set1');

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

set 有序

   // 测试redis的有序集合  set
    public function testZSetRedis(){
        // 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 'limit'=>array(1, 2),表示偏移1条,返回2条
//        dd(Redis::zrangebyscore('zset1', 1, 2, array('withscores'=>true, "limit" => array(0,2))));


        //  7.统计一个索引区间的元素个数
//        dd(Redis::zcount('zset1', 1, 2));

        // 8.统计元素个数
//        dd(Redis::zcard("zset1"));

        // 9.查询元素的索引
//        dd(Redis::zscore('zset', 1));

        // 10.删除一个索引区间的元素
//        Redis::zremrangebyscore('zset1', 0, 2); // 删除索引在0-2之间的元素

        // 11.zrank/zrevrank 返回元素所在表顺序/降序的位置(不是索引)
//        dd(Redis::zrank("zset", 1));
//        dd(Redis::zrevrank ("zset", 1));

        // 12.删除表中指定位置区间的元素
        Redis::zadd('zset', 1, 1);
        Redis::zadd('zset', 3, 3);
        Redis::zadd('zset', 4, "val4");
        Redis::zadd('zset', 5, "val5");
        Redis::zadd('zset', 6, "val6");
        dd(Redis::zremrangebyrank('zset', 1, 3)); //删除位置为1-3的元素,返回删除的元素个数
        dd(1111);
    }

详情

一、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.弹出首元素

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));

在这里插入图片描述

8.统计元素个数

dd(Redis::zcard("zset1"));

在这里插入图片描述

9.查询元素的索引

dd(Redis::zscore('zset', 1));

在这里插入图片描述

10. 删除一个索引区间的元素

原始数据入下:
在这里插入图片描述

Redis::zremrangebyscore('zset1', 0, 2); // 删除索引在0-2之间的元素

在这里插入图片描述

11.zrank/zrevrank 返回元素所在表顺序/降序的位置(不是索引)

zrank
dd(Redis::zrank("zset", 1));

在这里插入图片描述

zrevrank
dd(Redis::zrevrank ("zset", 1));

在这里插入图片描述

12.删除表中指定位置区间的元素,不是索引

原始数据
在这里插入图片描述

Redis::zadd('zset', 1, 1);
Redis::zadd('zset', 3, 3);
Redis::zadd('zset', 4, "val4");
Redis::zadd('zset', 5, "val5");
Redis::zadd('zset', 6, "val6");
dd(Redis::zremrangebyrank('zset', 1, 3)); //删除位置为1-3的元素,返回删除的元素个数

在这里插入图片描述

五.list类型

1.左添加

不存在时创建

 Redis::lpush('list', 1);
 Redis::lpush('list', 2);
 Redis::lpush('list', 3);

在这里插入图片描述

不存在时不创建
Redis::lpushx('list1', 3);

在查看结果的时候是没有list1的
在这里插入图片描述

2.右添加

不存在时创建
Redis::rpush('list', 4);

在这里插入图片描述

不存在时不创建
Redis::rpushx("list1", 3);

依然没有list1
在这里插入图片描述

3.从左(头部)取出list中数据 返回值为取出的数据 若不存在当前key的话,返回null

 // 取出的是头部第一个元素,就删除了此元素
 dd(Redis::lpop('list'));

在这里插入图片描述

4.从右(尾部)取出list中数据 返回值为取出的数据

// 取出的是尾部第一个元素,就删除了此元素
dd(Redis::rpop('list'));

在这里插入图片描述

5.获取该key中所有数据 是个数组

dd(Redis::lrange('list', 0, -1));

在这里插入图片描述

6.获取key为list的list集合中 索引为0的数据

dd(Redis::lindex('list', 0));

在这里插入图片描述

7.将list集合中索引为0的value值改为3

Redis::lset("list", 0, 3);

在这里插入图片描述

8.获取该list的长度

dd(Redis::llen('list'));

在这里插入图片描述

9.只保留索引0到索引1的value值 其余的都删除

Redis::lpush('list', 4);
Redis::lpush('list', 5);
Redis::lpush('list', 6);
Redis::ltrim("list", 0, 1);

在这里插入图片描述

10.删除list列表右边的最后一个元素将其追加到list1列表,list1不存在会创建 返回值为那个元素的value值

Redis::rpoplpush('list','list1');

在这里插入图片描述

在这里插入图片描述

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

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值