Redis 基本操作

时间:2023-03-09 19:25:29
Redis 基本操作

参考网址:http://doc.redisfans.com/           

redis 在操作的时候,不区分大小写(包括php)

Key(键)

DEL key [key ...]

删除给定的一个或多个 key 。

不存在的 key 会被忽略。

http://doc.redisfans.com/key/del.html

EXISTS key

检查给定 key 是否存在。

http://doc.redisfans.com/key/exists.html

String(字符串)

GET key

返回 key 所关联的字符串值。

如果 key 不存在那么返回特殊值 nil 。

假如 key 储存的值不是字符串类型,返回一个错误,因为 GET 只能用于处理字符串值。

http://doc.redisfans.com/string/get.html

SET key value [EX seconds] [PX milliseconds] [NX|XX]

将字符串值 value 关联到 key 。

如果 key 已经持有其他值, SET 就覆写旧值,无视类型。

对于某个原本带有生存时间(TTL)的键来说, 当 SET 命令成功在这个键上执行时, 这个键原有的 TTL 将被清除。

http://doc.redisfans.com/string/set.html

Hash(哈希表)

HSET key field value    设置值          hset

将哈希表 key 中的域 field 的值设为 value 。

如果 key 不存在,一个新的哈希表被创建并进行 HSET 操作。

如果域 field 已经存在于哈希表中,旧值将被覆盖。

http://doc.redisfans.com/hash/hset.html

HGET key field        获取值         hget

返回哈希表 key 中给定域 field 的值。

http://doc.redisfans.com/hash/hget.html

HGETALL key                       获取所有key        hgetall

返回哈希表 key 中,所有的域和值。

在返回值里,紧跟每个域名(field name)之后是域的值(value),所以返回值的长度是哈希表大小的两倍。

http://doc.redisfans.com/hash/hgetall.html

HDEL key field                   删除key下的域                               

删除哈希表 key 中的一个或多个指定域,不存在的域将被忽略。

http://doc.redisfans.com/hash/hdel.html

HINCRBY key field increment   递增(整数) hincrby

为哈希表 key 中的域 field 的值加上增量 increment 。

增量也可以为负数,相当于对给定域进行减法操作。

如果 key 不存在,一个新的哈希表被创建并执行 HINCRBY 命令。

如果域 field 不存在,那么在执行命令前,域的值被初始化为 0

http://doc.redisfans.com/hash/hincrby.html

HINCRBYFLOAT key field increment   递增(浮点) hincrbyfloat

为哈希表 key 中的域 field 加上浮点数增量 increment 。

如果哈希表中没有域 field ,那么 HINCRBYFLOAT 会先将域 field 的值设为 0 ,然后再执行加法操作。

如果键 key 不存在,那么 HINCRBYFLOAT 会先创建一个哈希表,再创建域 field ,最后再执行加法操作

http://doc.redisfans.com/hash/hincrbyfloat.html

hash的不能马上设置时间,只能用expire来设置key的时间,所以自己写个redis类来实现比较好。

expire 设置失效时间(单位/秒)
persist 取消失效时间
ttl/pttl(单位为 秒/毫秒) 查看键的剩余时间

有偿阅读项目用到:

hash
$redis = model('Redis');
$redis::hSet('yhytest','yhy','3332',20);//非原生reids(reids模块)
$redis::hSet('yhytest','yhy2','454',20);//非原生reids(reids模块)
echo $redis::hGet('yhytest','yhy');//非原生reids(reids模块)
var_dump($redis::$redis->hgetall('pd_yhytest')); //用原生的redis
 $bool5 = $redis::hIncrBy('user:jifen:day:('.$date.')',$uid,$jifen,3*24*3600); //用户当天金币//非原生reids(reids模块)

List(列表)

LPUSH key value [value ...]       从左边插入(相当于php的array_unshift)   # 列表允许重复元素

将一个或多个值 value 插入到列表 key 的表头

如果有多个 value 值,那么各个 value 值按从左到右的顺序依次插入到表头: 比如说,对空列表 mylist 执行命令 LPUSH mylist a b c,列表的值将是 c b a ,这等同于原子性地执行 LPUSH mylist a 、 LPUSH mylist b 和 LPUSH mylist c 三个命令。

如果 key 不存在,一个空列表会被创建并执行 LPUSH 操作。

当 key 存在但不是列表类型时,返回一个错误。

http://doc.redisfans.com/list/lpush.html

LPOP key     从左边移除(php的array_shift) 

移除并返回列表 key 的头元素。

http://doc.redisfans.com/list/lpop.html

RPUSH key value [value ...]     从右边插入(相当于php的array_push)  

将一个或多个值 value 插入到列表 key 的表尾(最右边)。

如果有多个 value 值,那么各个 value 值按从左到右的顺序依次插入到表尾:比如对一个空列表 mylist 执行 RPUSH mylist a b c ,得出的结果列表为 a b c ,等同于执行命令 RPUSH mylist a 、 RPUSH mylist b 、 RPUSH mylist c 。

如果 key 不存在,一个空列表会被创建并执行 RPUSH 操作。

当 key 存在但不是列表类型时,返回一个错误。

http://doc.redisfans.com/list/rpush.html

RPOP key   从右边移除(php的array_pop) 

移除并返回列表 key 的尾元素。

http://doc.redisfans.com/list/rpop.html

LLEN key   查询长度(就是list里有几个)

返回列表 key 的长度。

如果 key 不存在,则 key 被解释为一个空列表,返回 0 .

如果 key 不是列表类型,返回一个错误。

http://doc.redisfans.com/list/llen.html

LINDEX key index      查询(用下标)

返回列表 key 中,下标为 index 的元素。

下标(index)参数 start 和 stop 都以 0 为底,也就是说,以 0 表示列表的第一个元素,以 1 表示列表的第二个元素,以此类推。

你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。

如果 key 不是列表类型,返回一个错误。

http://doc.redisfans.com/list/lindex.html

LRANGE key start stop     区间查询    例如:lrange key 0 -1   查询全部

返回列表 key 中指定区间内的元素,区间以偏移量 start 和 stop 指定。

下标(index)参数 start 和 stop 都以 0 为底,也就是说,以 0 表示列表的第一个元素,以 1 表示列表的第二个元素,以此类推。

你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。

注意LRANGE命令和编程语言区间函数的区别

假如你有一个包含一百个元素的列表,对该列表执行 LRANGE list 0 10 ,结果是一个包含11个元素的列表,这表明 stop 下标也在LRANGE 命令的取值范围之内(闭区间),这和某些语言的区间函数可能不一致,比如Ruby的 Range.new 、 Array#slice 和Python的range() 函数。

超出范围的下标

超出范围的下标值不会引起错误。

如果 start 下标比列表的最大下标 end ( LLEN list 减去 1 )还要大,那么 LRANGE 返回一个空列表。

如果 stop 下标比 end 下标还要大,Redis将 stop 的值设置为 end 。

http://doc.redisfans.com/list/lrange.html

有偿阅读项目用到:

list
$lastRead = $redis::$redis->lindex(config('redis_prefix').'user:jifen:log:('.$this->uid.')',0);
$bool4 = $redis::$redis->lpush(config('redis_prefix').'user:jifen:log:('.$uid.')',$record); //金币记录(保留100条)
$num = $redis::$redis->llen (config('redis_prefix').'user:jifen:log:('.$uid.')');
$redis::$redis->rpop(config('redis_prefix').'user:jifen:log:('.$uid.')');

Set(集合)

SADD key member [member ...]      集合里不可添加一样的值(值唯一) sadd

将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略。

假如 key 不存在,则创建一个只包含 member 元素作成员的集合。

当 key 不是集合类型时,返回一个错误。

http://doc.redisfans.com/set/sadd.html

SREM key member [member ...]     移除某个值  srem

移除集合 key 中的一个或多个 member 元素,不存在的 member 元素会被忽略。

当 key 不是集合类型,返回一个错误。

http://doc.redisfans.com/set/srem.html

SMEMBERS key    查询所有成员,返回是数组(array)形式【php】

返回集合 key 中的所有成员。

不存在的 key 被视为空集合。

http://doc.redisfans.com/set/smembers.html

有偿阅读项目用到:
set
$redis::sadd('blacklist:ip',$ip);
$ips = $redis::smembers('blacklist:ip');
$aNum = Redis::sRem('article:favor:('.$articleId.')',$uid);

SortedSet(有序集合)

ZADD key score member [[score member] [score member] ...]    有序集合添加,添加键值存在并且值一样的添加不进去,除此之外都行(已存在的键值,值会被覆盖)

                                            【添加已存在元素,且 score 值不变】  【添加已存在元素,但是改变 score 值】

将一个或多个 member 元素及其 score 值加入到有序集 key 当中。

如果某个 member 已经是有序集的成员,那么更新这个 member 的 score 值,并通过重新插入这个 member 元素,来保证该 member 在正确的位置上。

score 值可以是整数值或双精度浮点数。

如果 key 不存在,则创建一个空的有序集并执行 ZADD 操作。

当 key 存在但不是有序集类型时,返回一个错误。

对有序集的更多介绍请参见 sorted set 。

http://doc.redisfans.com/sorted_set/zadd.html

ZRANGE key start stop [WITHSCORES]          按区间(根据下标)获取成员,按 score 值递增(从小到大)来排序(默认)

可以只取值不取键:ZRANGE salary 0 -1           # 显示整个有序集成员

返回有序集 key 中,指定区间内的成员。

其中成员的位置按 score 值递增(从小到大)来排序。

具有相同 score 值的成员按字典序(lexicographical order )来排列。

如果你需要成员按 score 值递减(从大到小)来排列,请使用 ZREVRANGE 命令。

下标参数 start 和 stop 都以 0 为底,也就是说,以 0 表示有序集第一个成员,以 1 表示有序集第二个成员,以此类推。
你也可以使用负数下标,以 -1 表示最后一个成员, -2 表示倒数第二个成员,以此类推。
超出范围的下标并不会引起错误。
比如说,当 start 的值比有序集的最大下标还要大,或是 start > stop 时, ZRANGE 命令只是简单地返回一个空列表。
另一方面,假如 stop 参数的值比有序集的最大下标还要大,那么 Redis 将 stop 当作最大下标来处理。
可以通过使用 WITHSCORES 选项,来让成员和它的 score 值一并返回,返回列表以 value1,score1, ..., valueN,scoreN 的格式表示。
客户端库可能会返回一些更复杂的数据类型,比如数组、元组等。

ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]   按区间(根据下标,可判断大小的)获取成员,按 score 值递增(从小到大)来排序(默认)

可以只取值不取键:  ZRANGEBYSCORE salary -inf +inf # 显示整个有序集

返回有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )的成员。有序集成员按 score 值递增(从小到大)次序排列。

具有相同 score 值的成员按字典序(lexicographical order)来排列(该属性是有序集提供的,不需要额外的计算)。

http://doc.redisfans.com/sorted_set/zrangebyscore.html

ZREM key member [member ...]     移除某个成员

移除有序集 key 中的一个或多个成员,不存在的成员将被忽略。

当 key 存在但不是有序集类型时,返回一个错误。

有偿阅读项目用到:

zadd
$uNum = $redis::$redis->zAdd(config('redis_prefix').'user:article:favor:('.$uid.')_zadd',$now,$articleId);//原生
$category = Redis::zRangeByScore('user:mycategory:('.$this->uid.')','-inf','+inf');
$uNum = Redis::zRem('user:article:favor:('.$uid.')',$articleId);
Redis::zdel('user:mycategory:('.$this->uid.')');//删除用户频道缓存 //用的是reids模块里的,原生没有,是直接删除key的

Pub/Sub(发布/订阅)

Transaction(事务)