laravel redis 命令 - 1.键 | keys

DEL

删除指定的键。如果一个密钥不存在,它将被忽略。
格式:DEL key [key ...]
返回:已删除的键的数量。

DUMP

序列化给定 key ,并返回被序列化的值,使用 RESTORE 命令可以将这个值反序列化为 Redis 键。
格式:DUMP greeting
返回:如果 key 不存在,那么返回 nil 。否则,返回序列化之后的值。

例子:
$redis->set('name', '哈哈哈'); // 设置一个键值
$dump = $redis->dump('name'); // 序列化
$data = $redis->restore('name-again', 10000, $dump); // 反序列化,并且赋值给name-again,key可以根据需要修改
dump($redis->get('name-again'));  打印name-again的值

RESTORE

反序列化给定的序列化值,并将它和给定的 key 关联。
格式:RESTORE key ttl serialized-value [REPLACE]
参数解释:
key:反序列化后赋值给这个key
ttl:如果ttl为0,则密钥创建时不会过期,否则设置指定的到期时间(以毫秒为单位)。
serialized-value:序列化的值
返回:如果反序列化成功那么返回 OK ,否则返回一个错误。
例子:请参考DUMP的例子

EXISTS

检查给定 key 是否存在。
格式:EXISTS key [key ...]
返回:若 key 存在,返回 1 ,否则返回 0

EXPIRE

为给定 key 设置生存时间,当 key 过期时(生存时间为 0 ),它会被自动删除。
格式:EXPIRE key seconds
参数解释:
seconds:秒数
注意:
超时只能通过删除或覆盖密钥内容的命令清除,包括 DEL,SET,GETSET 和所有*STORE命令。
超时也可以被清除,使用 PERSIST 命令将密钥恢复为持久密钥。
如果使用 RENAME 重命名密钥,则相关的生存时间将转移到新的密钥名称。

EXPIREAT

EXPIREAT 的作用和 EXPIRE 类似,都用于为 key 设置生存时间。
不同在于 EXPIREAT 命令接受的时间参数是 UNIX 时间戳(unix timestamp)。
格式:EXPIREAT key timestamp
参数解释:
timestamp:指定过期时间的时间戳
返回值:
如果生存时间设置成功,返回 1 。
当 key 不存在或没办法设置生存时间,返回 0 。

例子:
$redis->set('name', '小红'); // 定义一个值
$redis->expireat('name', 1575435900); // 设置过期时间 这个 key 将在 2019/12/4 13:05:00 过期

KEYS

查找所有符合给定模式 pattern 的 key 。

格式:KEYS pattern

参数解释:
pattern:
KEYS * 匹配数据库中所有 key 。(* 表示代替任意一个、0个或多个)
KEYS h?llo 匹配 hello , hallo 和 hxllo 等。(?表示代替任意一个)
KEYS h*llo 匹配 hllo 和 heeeeello 等。(* 表示代替任意一个、0个或多个)
KEYS h[ae]llo 匹配 hello 和 hallo ,但不匹配 hillo 。([]表示代替括号里指定的值)

MIGRATE

迁移指定的key到指定的服务器数据库中,一旦传送成功,key会到达目标数据库中, 当前的key会删除。

  • 命令的内部实现是这样的:它在当前实例对给定 key 执行 DUMP 命令 ,将它序列化,然后传送到目标实例,目标实例再使用 RESTORE 对数据进行反序列化,并将反序列化所得的数据添加到数据库中;当前实例就像目标实例的客户端那样,只要看到 RESTORE 命令返回 OK ,它就会调用 DEL 删除自己数据库上的 key 。

  • 当 IOERR 出现时,有以下两种可能:
    1.key 可能存在于两个实例。
    2.key 可能只存在于当前实例

格式:MIGRATE host port key destination-db timeout [COPY] [REPLACE]
参数:
host:服务器ip
port:端口号
destination-db:数据库
timeout:超时毫秒数
COPY:可选,不要从本地实例中删除密钥
REPLACE:可选,替换远程实例上的现有密钥。

返回:迁移成功时返回 OK ,否则返回相应的错误。

例子:
SET greeting "Hello from 6379 instance"
MIGRATE 127.0.0.1 7777 greeting 0 1000

MOVE

将当前数据库的 key 移动到给定的数据库 db 当中。
格式:MOVE key db
返回:移动成功返回 1 ,失败则返回 0 。

  • 如果要移动的目标数据库已存在相同的Key,则会移动失败
例子:
SELECT 0                             # redis默认使用数据库 0,为了清晰起见,这里再显式指定一次。
SET song "secret base - Zone"        # 赋值
MOVE song 1                          # 将 song 移动到数据库 1
EXISTS song                          # song 已经被移走
SELECT 1                             # 使用数据库 1
EXISTS song                          # 证实 song 被移到了数据库 1 (注意命令提示符变成了"redis:1",表明正在使用数据库 1)

OBJECT (测试时发现好多都返回Null,未深入研究)

命令允许检查与键相关的 Redis 对象的内部。对于调试或了解您的密钥是否使用特殊编码的数据类型以节省空间非常有用。
OBJECT命令支持多个子命令:
OBJECT REFCOUNT <key>返回与指定键相关联的值的引用数。该命令主要用于调试。
OBJECT ENCODING <key> 返回用于存储与键关联的值的内部表示形式。
OBJECT IDLETIME <key>返回自指定键存储的对象空闲以来的秒数(未通过读取或写入操作请求)。虽然该值以秒为单位返回,但此计时器的实际分辨率为10秒,但在将来的实施中可能会有所不同。

PERSIST

移除给定 key 的生存时间(带生存时间转换成永不过期)
格式:PERSIST key
返回值:
当生存时间移除成功时,返回 1 .
如果 key 不存在或 key 没有设置生存时间,返回 0 。

PEXPIRE

这个命令和 EXPIRE 命令的作用类似,但是它以毫秒为单位设置 key 的生存时间,而不像 EXPIRE 命令那样,以秒为单位。
格式:PEXPIRE key milliseconds
参数解释:
milliseconds:毫秒数(1秒等于1000毫秒)
返回:
设置成功,返回 1
key 不存在或设置失败,返回 0

PEXPIREAT

这个命令和 EXPIREAT 命令类似,但它以毫秒为单位设置 key 的过期 unix 时间戳,而不是像 EXPIREAT 那样,以秒为单位。
格式:PEXPIREAT key milliseconds-timestamp
参数解释:
milliseconds-timestamp:指定过期时间的时间戳(毫秒为单位)
返回:
如果生存时间设置成功,返回 1 。
当 key 不存在或没办法设置生存时间时,返回 0

TTL

以秒为单位,返回给定 key 的剩余生存时间
格式:TTL key
返回:
当 key 不存在时,返回 -2 。
当 key 存在但没有设置剩余生存时间时,返回 -1 。
否则,以秒为单位,返回 key 的剩余生存时间。
在 Redis 2.8 以前,当 key 不存在,或者 key 没有设置剩余生存时间时,命令都返回 -1 。

PTTL

这个命令类似于 TTL 命令,但它以毫秒为单位返回 key 的剩余生存时间,而不是像 TTL 命令那样,以秒为单位。
格式:PTTL key
返回:
当 key 不存在时,返回 -2 。
当 key 存在但没有设置剩余生存时间时,返回 -1 。
否则,以秒为单位,返回 key 的剩余生存时间。
在 Redis 2.8 以前,当 key 不存在,或者 key 没有设置剩余生存时间时,命令都返回 -1 。

RANDOMKEY

从当前数据库中随机返回(不删除)一个 key 。
格式:RANDOMKEY
返回:
当数据库不为空时,返回一个 key 。
当数据库为空时,返回 nil 。

RENAME

修改key名称
格式:RENAME key newkey
参数解释:
当 key 和 newkey 相同,或者 key 不存在时,返回一个错误。
当 newkey 已经存在时, RENAME 命令将覆盖旧值。
返回:
改名成功时提示 OK ,失败时候返回一个错误。

RENAMENX

当且仅当 newkey 不存在时,将 key 改名为 newkey 。
格式:RENAMENX key newkey
返回值:
修改成功时,返回 1 。
如果 newkey 已经存在,返回 0 。

SORT

返回或保存给定列表、集合、有序集合 key 中经过排序的元素。
格式:SORT key [BY pattern] [LIMIT offset count] [GET pattern [GET pattern ...]] [ASC|DESC] [ALPHA] [STORE destination]
参数解释:

  • 一般 SORT 用法: SORT key 和 SORT key DESC
  • 对字符串进行排序要使用 ALPHA 修饰符: SORT key ALPHA
  • 使用 LIMIT 修饰符限制返回结果:SORT key LIMIT 0 5 注意:0是开始位置,5是查询返回个数
  • 使用外部key进行排序
    1.BY 选项
    SORT uid BY user_level_* :让 uid 键按照 user_level_{uid} 的大小来排序
    注意:测试的uid是列表(LPUSH uid 1,LPUSH uid 2, ....),user_level_*是字符串(SET user_name_1 ton,SET user_name_2 json,...)
LPUSH uid 1
LPUSH uid 2
SET user_name_1 ton
SET user_name_2 json
SORT uid BY user_level_*

2.GET 选项
SORT uid GET user_name_*先排序 uid , 再取出键 user_name_{uid} 的值
3.组合使用 BY 和 GET
SORT uid BY user_level_* GET user_name_*:先按 user_level_{uid} 来排序 uid 列表, 再取出相应的 user_name_{uid} 的值
4.获取多个外部键
GET user_level_* GET user_name_*:将 uid 的值、及其相应的 user_level_* 和 user_name_* 都返回为结果
5.获取外部键,但不进行排序(最好组合使用)

SORT uid BY not-exists-key GET user_level_* GET user_name_*

6.哈希排序

HMSET user_info_1 name admin level 9999
HMSET user_info_2 name jack level 10
HMSET user_info_3 name peter level 25
SORT uid BY user_info_*->level
  • 保存排序结果: SORT uid STORE new_uid 说明:保存uid的排序结果到new_uid中
laravel 例子(只有部分,有的没找到方法,待补充)
# 一般的用法
$redis->lpush('list', 2,4,7,5,2);
$l = $redis->sort('list', array('sort'=>'DESC'));
# 对字符串排序
$redis->lpush('list2', 'a', 'g', 's', 'b', 'e');
$d = $redis->sort('list2', array('ALPHA'=>true));
# 使用Limit限制返回结果
$d = $redis->sort('list', array('limit'=>array(2,3))); // 返回顺序位置中2的元素3个(这里的3是指个数,而不是位置)
# 使用外部key进行排序
$redis->lpush('uid',1);
$redis->lpush('uid',2);
$redis->lpush('uid',3);
$redis->set('user_name_1','admin1');
$redis->set('user_name_2','admin2');
$redis->set('user_name_3','admin3');
$d = $redis->sort('uid', array('get'=>'user_name_*'));
# 使用在上一条的基础上,获取多个外部健
$redis->set('user_level_1','l1');
$redis->set('user_level_2','l2');
$redis->set('user_level_3','l3');
$d = $redis->sort('uid', array('get'=>array('user_level_*', 'user_name_*')));
# 保存排序结果
$redis->sort('uid', array('sort'=>'desc', 'store'=>'new_uid')); // 倒序排序uid,并且赋值给new_uid
$d = $redis->lrange('new_uid', 0, -1); // 获取new_uid的值

TYPE

返回 key 所储存的值的类型。
格式:TYPE key
返回:
none (key不存在)
string (字符串)
list (列表)
set (集合)
zset (有序集)
hash (哈希表)

SCAN

使用 SCAN 命令和密切相关的命令 SSCAN,HSCAN 和 ZSCAN 来递增地遍历一组元素。

  • SCAN:遍历当前选定的 Redis 数据库中的一组键。
    格式:scan 0 第一次执行必须从0开始,下次执行的时候,根据这次返回的结果第一个元素再执行
    scan 0  // 返回 1) "17",  2) "key:12","key:8","key:9"...... # 因为返回的第一个元素是17,说明还没遍历完, 拿17继续遍历
    scan 17 // 返回 1) "0",  2) "key:3","key:55","key:13"..... # 因为返回的第一个元素是0,说明遍历结束。如果非0还能继续遍历
    
  • SSCAN:遍历指定的集合
    格式:sscan myset 0
  • HSCAN:遍历指定的哈希
    格式:hscan myhash 0
  • ZSCAN:遍历指定的有序集合
    格式:zscan my
    • 指定每次执行返回指定的元素数量 COUNT num
    • 让命令只返回和指定模式相匹配的元素, MATCH <pattern>
    • 返回指定元素的数量和返回指定模式匹配元素可以结合使用例如: scan 0 MATCH k COUNT 1000
laravel 例子
// 创建新集合
$redis->sadd('myset', 1,2,3,'foo', 'foobar', 'feelsgood');

// 创建新哈希
$redis->hset('hash1', 'key2', 'v2');
$redis->hset('hash1', 'key1', 'v1');
$redis->hset('hash1', 'key3', 'v3');

// 创建有序集合
$redis->zadd('page_rank', '3', 'v3');
$redis->zadd('page_rank', '2', 'v2');
$redis->zadd('page_rank', '5', 'v5');

$p = 0;
do {
    $d = $redis->SCAN($p, array('count'=>20,'MATCH'=>'*f*')); # 遍历整个数据库,筛选出key存在f字母的出来
    # $d = $redis->SSCAN('myset', $p, array('count'=>20,'MATCH'=>'*f*'));# 遍历指定的集合,筛选出key存在f字母的出来
    # $d = $redis->HSCAN('hash1', 0, array('count'=>20,'MATCH'=>'k*'));# 遍历指定的哈希,筛选出key为k字母开头的数据出来
    # $d = $redis->ZSCAN('page_rank', 0, array('count'=>20)); # 遍历整个有序集合,每次数量为20条
    $p = $d[0];
    dump($d);exit;
} while($p != 0);
``
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,922评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,591评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,546评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,467评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,553评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,580评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,588评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,334评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,780评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,092评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,270评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,925评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,573评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,194评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,437评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,154评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,127评论 2 352

推荐阅读更多精彩内容