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就有时间了
// 设置有效期,但是是毫秒(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的值,看执行结果,还是之前的数据
$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); // 移动
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,重复返回falseRedis::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));
还没有整理完,有时间了,继续整理添加……
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)