Redis基本讲解

Redis基本讲解

首先我们要了解redis的使用试用范围,redis不像数据库能建立关系型的数据结构,除了有序集合能关联一个double类型的分数其它的几种都是单一存储的,所以他的局限性就比较高了,那么问题来了,redis存储方式这么单一且不能建立关系型的数据结构,我们为什么还要使用它呢,答案就是他异常的快,比数据库快的多。所以在存储一些简单的数据或者需要处理一个并发性质的队列就非常合适了。但具体使用还是根据不同的场景来决定。Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。

1.字符串(String)

string是redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value。string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。string类型是Redis最基本的数据类型,一个键最大能存储512MB。

 

//设置键值:成功返回true,否则返回false

$redis->set('mystr', 'Welcome!');

//获取键值:成功返回String类型键值,若key不存在或不是String类型则返回false

$ret = $redis->get('mystr');

//从某个key所存储的字符串的指定偏移量开始,替换为另一指定字符串,成功返回替换后新字符串的长度。

$ret = $redis->setRange('mystr', 7, ' to Beijing!');

扫描二维码关注公众号,回复: 2694097 查看本文章

//获取存储在指定key中字符串的子字符串。

$ret = $redis->getRange('mystr', 0, 6);

//设置新值,返回旧值:若key不存在则设置值,返回false

$ret = $redis->getSet('mystr', 'hi man');

//一次设置多个键值对:成功返回true。

$ret = $redis->mset(['name' => 'jet', 'age' => 18]);

//一次获取多个key的值:返回一个键值对数组,其中不存在的key值为false。

$ret = $redis->mget(['name', 'age']);

//设置指定key的值及其过期时间,单位:秒。

//参数:键名,过期时间,键值。成功返回true。

$ret = $redis->setex('name', 10, 'jetwu');

//以毫秒为单位设置指定key的值和过期时间。成功返回true。

$ret = $redis->psetex('name', 10, 'jetwu');

//key的值不存在时,才为其设置值。key不存在且设置成功返回true,否则返回false。

$ret = $redis->setnx('name', 'boby');

//setnx命令的批量操作。只有在给定所有key都不存在的时候才能设置成功,只要其中一个key存在,所有key都无法设置成功。

$ret = $redis->msetnx(['country' => 'China', 'city' => 'Shenzhen']);

//获取指定key存储的字符串的长度,key不存在返回0,不为字符串返回false。

$ret = $redis->strlen('name');

//将指定key存储的数字值增加1。若key不存在会先初始化为0再增加1,若key存储的不是整数值则返回false。成功返回key新值。

$ret = $redis->incr('age');

//给指定key存储的数字值增加指定增量值。

$ret = $redis->incrBy('age', 10);

//给指定key存储的数字值增加指定浮点数增量。

$ret = $redis->incrByFloat('age', 1.5);

//将指定key存储的数字值减一。

$ret = $redis->decr('age');

//将指定key存储的数字值减去指定减量值。

$ret = $redis->decrBy('age', 10);

//为指定key追加值到原值末尾,若key不存在则相对于set()函数。

$ret = $redis->append('mystr', 'haha');

2.Hash(哈希)

Redis hash 是一个键值(key=>value)对集合。Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。

//为hash表中的字段赋值。成功返回1,失败返回0。若hash表不存在会先创建表再赋值,若字段已存在会覆盖旧值。

$ret = $redis->hSet('user', 'realname', 'jetwu');

//获取hash表中指定字段的值。若hash表不存在则返回false。

$ret = $redis->hGet('user', 'realname');

//查看hash表的某个字段是否存在,存在返回true,否则返回false。

$ret = $redis->hExists('user', 'realname');

//删除hash表的一个字段,不支持删除多个字段。成功返回1,否则返回0。

$ret = $redis->hDel('user', 'realname');

//同时设置某个hash表的多个字段值。成功返回true。

$ret = $redis->hMset('user', ['name' => 'jet', 'age' => 18]);

//同时获取某个hash表的多个字段值。其中不存在的字段值为false。

$ret = $redis->hMget('user', ['name', 'age']);

//获取某个hash表所有的字段和值。

$ret = $redis->hGetAll('user');

//获取某个hash表所有字段名。hash表不存在时返回空数组,key不为hash表时返回false。

$ret = $redis->hKeys('user');

//获取某个hash表所有字段值。

$ret = $redis->hVals('user');

//为hash表中不存在的字段赋值。若hash表不存在则先创建,若字段已存在则不做任何操作。设置成功返回true,否则返回false。

$ret = $redis->hSetNx('user', 'realname', 'jetwu');

//获取某个hash表的字段数量。若hash表不存在返回0,若key不为hash表则返回false。

$ret = $redis->hLen('user');

//为hash表中的指定字段加上指定增量值,若增量值为负数则相当于减法操作。若hash表不存在则先创建,若字段不存在则先初始化值为0再进行操作,若字段值为字符串则返回false。设置成功返回字段新值。

$ret = $redis->hIncrBy('user', 'age', 10);

//为hash表中的指定字段加上指定浮点数增量值。

$ret = $redis->hIncrBy('user', 'age', 1.5);

3.List(列表)

Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。

4.Set(集合)

Redis的Set是string类型的无序集合。

集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。

//将一个元素加入集合,已经存在集合中的元素则忽略。若集合不存在则先创建,若key不是集合类型则返回false,若元素已存在返回0,插入成功返回1。

$ret = $redis->sAdd('myset', 'hello');

//返回集合中所有成员。

$ret = $redis->sMembers('myset');

//判断指定元素是否是指定集合的成员,是返回true,否则返回false。

$ret = $redis->sismember('myset', 'hello');

//返回集合中元素的数量。

$ret = $redis->scard('myset');

//移除并返回集合中的一个随机元素。

$ret = $redis->sPop('myset');

//返回集合中的一个或多个随机成员元素,返回元素的数量和情况由函数的第二个参数count决定:

//如果count为正数,且小于集合基数,那么命令返回一个包含count个元素的数组,数组中的元素各不相同。

//如果count大于等于集合基数,那么返回整个集合。

//如果count为负数,那么命令返回一个数组,数组中的元素可能会重复出现多次,而数组的长度为count的绝对值。

$ret = $redis->sRandMember('myset', 2);

//移除集合中指定的一个元素,忽略不存在的元素。删除成功返回1,否则返回0。

$ret = $redis->srem('myset', 'hello');

//迭代集合中的元素。

//参数:key,迭代器变量,匹配模式,每次返回元素数量(默认为10个)

$ret = $redis->sscan('myset', $it, 'a*', 5);

//将指定成员从一个源集合移动到一个目的集合。若源集合不存在或不包含指定元素则不做任何操作,返回false。

//参数:源集合,目标集合,移动元素

$ret = $redis->sMove('myset', 'myset2', 'aaa');

//返回所有给定集合之间的差集,不存在的集合视为空集。

$ret = $redis->sDiff('myset', 'myset2', 'myset3');

//将所有给定集合之间的差集存储在指定的目的集合中。若目的集合已存在则覆盖它。返回差集元素个数。

//参数:第一个参数为目标集合,存储差集。

$ret = $redis->sDiffStore('myset3', 'myset', 'myset2');

//返回所有给定集合的交集,不存在的集合视为空集。

$ret = $redis->sInter('myset', 'myset2', 'myset3');

//将所有给定集合的交集存储在指定的目的集合中。若目的集合已存在则覆盖它。返回交集元素个数。

//参数:第一个参数为目标集合,存储交集。

$ret = $redis->sInterStore('myset4', 'myset', 'myset2', 'myset3');

//返回所有给定集合的并集,不存在的集合视为空集。

$ret = $redis->sUnion('myset', 'myset2', 'myset3');

//将所有给定集合的并集存储在指定的目的集合中。若目的集合已存在则覆盖它。返回并集元素个数。

//参数:第一个参数为目标集合,存储并集。

$ret = $redis->sUnionStore('myset4', 'myset', 'myset2', 'myset3');

5.zset(sorted set:有序集合)

Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。

不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。

zset的成员是唯一的,但分数(score)却可以重复。

//将一个或多个成员元素及其分数值加入到有序集当中。如果某个成员已经是有序集的成员,则更新这个成员的分数值,并通过重新插入这个成员元素,来保证该成员在正确的位置上。分数值可以是整数值或双精度浮点数。

$ret = $redis->zAdd('scores', 98, 'English', 90, 'physics');

//返回有序集中指定区间内的成员。成员按分数值递增排序,分数值相同的则按字典序来排序。

//参数:第四个参数表示是否返回各个元素的分数值,默认为false。

$ret = $redis->zRange('scores', 0, -1, true);//查看Zset所有成员以及它们各自的分数值

//返回有序集中指定区间内的成员。成员按分数值递减排序,分数值相同的则按字典序的逆序来排序。

$ret = $redis->zReverseRange('scores', 0, -1, true);

//返回有序集中指定分数区间的成员列表,按分数值递增排序,分数值相同的则按字典序来排序。默认使用闭区间。

$ret = $redis->zRangeByScore('scores', 90, 100, ['withscores'=>true]);

//返回有序集中指定分数区间的成员列表,按分数值递减排序,分数值相同的则按字典序的逆序来排序。注意,区间表示的时候大值在前,小值在后,默认使用闭区间。

$ret = $redis->zRevRangeByScore('scores', 100, 90, ['withscores'=>true]);

//迭代有序集合中的元素。

//返回值:[元素名=>分数值,,..]

$ret = $redis->zscan('scores', $it, '', 10);

//返回指定有序集的元素数量。

$ret = $redis->zCard('scores');

//返回有序集中指定分数区间的成员数量。

$ret = $redis->zCount('scores', 90, 100);

//返回有序集中指定成员的分数值。若成员不存在则返回false。

$ret = $redis->zScore('scores', 'math');

//返回有序集中指定成员的排名,按分数值递增排序。分数值最小者排名为0。

$ret = $redis->zRank('scores', 'chemistry');

//返回有序集中指定成员的排名,按分数值递减排序。分数值最大者排名为0。

$ret = $redis->zRevRank('scores', 'chemistry');

//移除有序集中的一个或多个成员,忽略不存在的成员。返回删除的元素个数。

$ret = $redis->zRem('scores', 'chemistry', 'English');

//移除有序集中指定排名区间的所有成员。

$ret = $redis->zRemRangeByRank('scores', 0, 2);

//移除有序集中指定分数值区间的所有成员。

$ret = $redis->zRemRangeByScore('scores', 80, 90);

//对有序集中指定成员的分数值增加指定增量值。若为负数则做减法,若有序集不存在则先创建,若有序集中没有对应成员则先添加,最后再操作。

$ret = $redis->zIncrBy('scores', 2, 'Chinese');

//计算给定一个或多个有序集的交集,并将其存储到一个目的有序集中。结果集中某个成员的分数值是所有给定集下该成员分数值之和。

$ret = $redis->zinterstore('zset3', 'zset2', 'zset1');

//计算给定一个或多个有序集的并集,并将其存储到一个目的有序集中。结果集中某个成员的分数值是所有给定集下该成员分数值之和。

$ret = $redis->zunionstore('zset3', 'zset2', 'zset1');

猜你喜欢

转载自blog.csdn.net/tjjucheng/article/details/81568031