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