文档章节

Redis key

learn_more
 learn_more
发布于 2016/09/13 09:29
字数 2511
阅读 52
收藏 0

 

1、keys pattern 查找所有符合模式的key集合,pattern 使用 * ? [] 通配符,特殊符合使用 \ 转义。注意 KEYS 的速度虽然快,但在一个大的数据库中使用它仍然可能造成性能问题,如果你需要从一个数据集中查找特定的 key ,你最好还是用 Redis 的集合结构(set)来代替。

>keys *

 

2、exists key 检查key在Redis中是否存在,1 或 0

> existr key

 

3、del key [key ...] 删除指定的一个或多个key,不存在的key会自动被忽略

> del key

 

4、dump key 序列化给定 key 的值,并返回被序列化的值,序列化的值不包括生存时间信息,换句话说反序列号存储时需要重新指定生存时间。

1)序列值带有 64 位的校验和,用于检测错误, RESTORE 在进行反序列化之前会先检查校验和,因此你手动改变序列值再使用restore重新存储会出现错误。

2)值的编码格式和 RDB 文件保持一致。

3)RDB 版本会被编码在序列化值当中,如果因为 Redis 的版本不同造成 RDB 格式不兼容,那么 Redis 会拒绝对这个值进行反序列化操作。

> dump str

"\x00\x0bhello world\x06\x00\x9d\x11!9S\x92\x9c\xa7"

 

5、restore key ttl serialized-value [REPLACE] 反序列化给定的序列化值,并将它和给定的 key 关联。参数 ttl 以毫秒为单位为 key 设置生存时间;如果 ttl 为 0 ,那么不设置生存时间。在执行反序列化之前会先对序列化值的 RDB 版本和数据校验和进行检查,如果 RDB 版本不相同或者数据不完整的话,那么 RESTORE 会拒绝进行反序列化,并返回一个错误。如果键 key 已经存在, 并且给定了 REPLACE 选项, 那么使用反序列化得出的值来代替键 key 原有的值; 相反地, 如果键 key 已经存在, 但是没有给定 REPLACE 选项, 那么命令返回一个错误。

>restore str1 0 "\x00\x0bhello world\x06\x00\x9d\x11!9S\x92\x9c\xa7"

>ok

 

6、expire key seconds 为指定的key设置过期时间(秒),系统自动监控过期时间,一旦时间到达,最多延迟一毫秒,这个key就会从Redis里消失,很明显,为key赋值的时候默认生存时间都是永久的,只有通过expire才会设置生存时间。

1)对一个有生存时间的key重新赋值,如 set ,那么这个key又会被重新设置永久保存

2)对一个有生存时间的key修改其值,如 incr ,那么这个key的生存时间不变

3)expire 的最小操作单位就是 key,换句话说,他无法对集合、列表,Hash 内部的子元素指定过期时间。

> set str "hello world"

> expire str 10

 

7、expireat key unix_time 为指定的key设置到某个时间点就过期,这个unix_time 具体怎么计算的没去研究,pexpireat key unix_time 通过毫秒数指定。

> set str "hello world"

> expireat str 14734780496

> pexpireat str 1473478608869

 

8、pexpire key milliseconds 为指定的key设置过期时间(毫秒)

> set str "hello world"

> pexpire str 10000

 

8、ttl key 以秒为单位,返回给定 key 的剩余生存时间(TTL, time to live)。

pttl key 以毫秒为单位,返回给定 key 的剩余生存时间(TTL, time to live)。

1)当 key 不存在时(比如key已经超过了生存时间,或者从没有设定过这个key),返回 -2 。

2)当 key 存在但没有设置剩余生存时间时,返回 -1 。

3)当 key 存在且通过expire 设置了生存时间,则以秒为单位,返回 key 的剩余生存时间。

> ttl str

(integer) 8

>pttl str

(integer) 3187

 

9、persist key 移除给定 key 的生存时间,将这个 key 从易失的(带生存时间 key )转换成持久的(一个不带生存时间、永不过期的 key )。

> set str hello

> expire str 10

> ttl str

(integer) 9

> persist str

> ttl str

(integer) -1

 

10、type key 返回指定key的数据类型,Redis的数据类型是我们使用命令的时候就已经确定。

返回值如下

1)none (key不存在)

2)string (字符串)

3)list (列表)

4)set (集合)

5)zset (有序集)

6)hash (哈希表)

> type str

string

 

11、randomkey 从当前数据库中随机返回(不删除)一个 key ,如果数据库为空返回null.

>randomkey

>"str1"

 

12、migrate host port key destination-db timeout [COPY] [REPLACE]

将 key 原子性地从当前实例传送到目标实例的指定数据库上,说实话我就从未成功过执行这个命令,都是符合IOERROR.

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

COPY :不移除源实例上的 key 。

REPLACE :替换目标实例上已存在的 key 。

> migrate 127.0.0.1 6379 str 0 10000

 

13、select destination-db 指定具体的数据库,Redis默认初始化时会设置16个数据库,名称分别是 0-15,默认连接的是第一个数据库,即 0 库,需要使用 select db 来切换数据库。

> select 1

OK

[1]>

 

14、move key db 将当前数据库的key移动到指定的数据库db去。

如果当前数据库(源数据库)和给定数据库(目标数据库)有相同名字的给定 key ,或者 key 不存在于当前数据库,那么 MOVE 没有任何效果。

> select 1

OK

[1]> set sss "from 1"

OK

[1]> move sss 0

(integer) 1

[1]> get sss

(nil)

[1]> select 0

OK

> get sss

"from 1"

 

15、object subcommand [arguments [arguments]] OBJECT 命令允许从内部察看给定 key 的 Redis 对象。它通常用在除错(debugging)或者了解为了节省空间而对 key 使用特殊编码的情况。当将Redis用作缓存程序时,你也可以通过 OBJECT 命令中的信息,决定 key 的驱逐策略(eviction policies)。这个命令很实用也很复杂,所以要单独拿出来记录,因为分析对象很有用。

> object refcount sss

(integer) 1

> object idletime sss

(integer) 19

 

16、rename key newkey 将 key 改名为 newkey 。当 key 和 newkey 相同,或者 key 不存在时,返回一个错误。当 newkey 已经存在时, RENAME 命令将覆盖旧值。

> rename str str1

> get str

(nil)

> get str1

"hello"

 

17、renamenx key newkey 当且仅当 newkey 不存在时,将 key 改名为 newkey ,当 key 不存在时,返回一个错误。

> renamenx str str1

 

18、scan cursor [MATCH pattern] [COUNT count] scan 命令及其相关的 sscan 命令、 hscan 命令和 zscan 命令都用于增量地迭代(incrementally iterate)一集元素(a collection of elements):

scan 命令用于迭代当前数据库中的数据库键。

sscan 命令用于迭代集合键中的元素。

hscan 命令用于迭代哈希键中的键值对。

zscan 命令用于迭代有序集合中的元素(包括元素成员和元素分值)。

它们每次执行都只会返回少量元素, 所以这些命令可以用于生产环境, 而不会出现像 KEYS 命令、 SMEMBERS 命令带来的问题 —— 当 KEYS 命令被用于处理一个大的数据库时, 又或者 SMEMBERS 命令被用于处理一个大的集合键时, 它们可能会阻塞服务器达数秒之久。不过, 增量式迭代命令也不是没有缺点的: 举个例子, 使用 SMEMBERS 命令可以返回集合键当前包含的所有元素, 但是对于 scan 这类增量式迭代命令来说, 因为在对键进行增量式迭代的过程中, 键可能会被修改, 所以增量式迭代命令只能对被返回的元素提供有限的保证 (offer limited guarantees about the returned elements)。

注意:

1)sscan 、hscan 、zscan 命令的第一个参数总是一个数据库键,因为他们迭代的是指定key内部的value。

2)而 scan 命令则不需要在第一个参数提供任何数据库键,因为它迭代的是当前数据库中的所有数据库键。

3)cursor 是指游标的位置,从0开始,所以每次需要从新开始迭代的时候只要指定cursor为0

4)scan 的返回值数个数组,第一个返回值是指下一个cursor的位置,第二个返回值是指迭代的结果数组,这个数组的个数有count决定,不指定默认为 10。

5)同一个元素可能会被返回多次。 处理重复元素的工作交由应用程序负责, 比如说, 可以考虑将迭代返回的元素仅仅用于可以安全地重复执行多次的操作上。

6)如果一个元素是在迭代过程中被添加到数据集的, 又或者是在迭代过程中从数据集中被删除的, 那么这个元素可能会被返回, 也可能不会, 这是未定义的(undefined)。

> scan 0 match str* count 3

1) "20"

2) 1) "str17"

2) "str8"

> scan 20 match str* count 3

1) "28"

2) 1) "str7"

2) "str10"

3) "str13"

 

 

19、sort key [BY pattern] [LIMIT offset count] [GET pattern [GET pattern ...]] [ASC | DESC] [ALPHA] [STORE destination]

返回或保存给定列表、集合、有序集合 key 中经过排序的元素。排序默认以数字作为对象,值被解释为双精度浮点数,然后进行比较。

1)一般用法(使用数值大小排序)

sort key 返回键值从小到大排序的结果。

sort key desc 返回键值从大到小排序的结果。

 

> sort sss

1) "1"

2) "3"

3) "4"

> sort sss desc

1) "4"

2) "3"

3) "1"

© 著作权归作者所有

上一篇: Redis String
下一篇: Redis 事务
learn_more
粉丝 93
博文 240
码字总数 210196
作品 0
深圳
程序员
私信 提问
phpredis使用方法

安装配置见:http://blog.csdn.net/21aspnet/article/category/927212 常用代码 官方代码:https://github.com/owlient/phpredis/tree/master/tests =====================================......

晨曦之光
2012/03/09
1K
0
redis性能优化(pipeline/lua)

redis优化 最近在做S线的业务中,需要计算用户的排名以及很多杂项数据。由于数据量过多,为了保证系统响应速度和负载能力,所以在Redis中产生了缓存(基于每天)。 pipe line 介绍 Redis的p...

o0无忧亦无怖
2018/10/10
0
0
​​phpredis:php一个key-value扩展 简介

phpredis是php的一个扩展,效率是相当高有链表排序功能,对创建内存级的模块业务关系很有用; 如果对系统存储使用的数据以两种角度分类,一种是按数据的大小划分,分成大数据和小数据,另一种...

renew
2014/09/03
0
0
PHP-redis文档

phpredis是php的一个扩展,效率是相当高有链表排序功能,对创建内存级的模块业务关系 很有用;以下是redis官方提供的命令使用技巧: 下载地址如下: https://github.com/owlient/phpredis(支持...

沉淀岁月
2016/09/08
1
0
PHP操作Redis详解案例

$redis = new Redis(); connect, open 链接redis服务 参数 host: string,服务地址 port: int,端口号 timeout: float,链接时长 (可选, 默认为 0 ,不限链接时间) 注: 在redis.conf中也有时间...

思梦教育
2017/12/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Leetcode PHP题解--D106 997. Find the Town Judge

D106 997. Find the Town Judge 题目链接 997. Find the Town Judge 题目分析 给定一个数组N代表人数,和给定一个数组,每个元素为一个只有两个值(a,b)的数组。 代表a信任b。 从中找到一个b...

skys215
24分钟前
0
0
日志相关---log4j2配置文件详解

一、关于配置文件的名称以及在项目中的存放位置 log4j 2.x版本不再支持像1.x中的.properties后缀的文件配置方式,2.x版本配置文件后缀名只能为".xml",".json"或者".jsn". 系统选择配置文件的...

spinachgit
24分钟前
0
0
redis 消息队列实现

方式一:通过list的阻塞读取命令,blpop或者brpop 消费者 public class Consumer extends DemoApplicationTests{ @Test public void consume(){ int timeout = 0;//永不超......

小海bug
46分钟前
2
0
如何把微信语音汇总成一个MP3文件?

本篇以苹果手机为例,安卓手机也可类似。 第一步,安装同步助手 同步助手是一款在电脑上安装,可以保存手机上的内容的软件。支持把微信的聊天历史内容导出。甚至支持筛选语音文件按顺序导出—...

吴伟祥
52分钟前
4
0
用ffsend使用Firefox Send

导读 ffsend 是 Firefox Send 的命令行客户端。本文将展示 Firefox Send 和 ffsend 如何工作。还会详细介绍如何在 Fedora 中安装和使用它。 ffsend 是 Firefox Send 的命令行客户端。本文将展...

问题终结者
53分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部