redis --------- 使用命令(每天一个)
Key(键)
Del 语法:DEL Key [key ...] 删除给定的一个或者多个key 不存在的key会被忽略。
返回值: 被删粗key的数量# 删除单个 key
redis> SET name huangz
OK redis> DEL name
(integer) 1 # 删除一个不存在的 key redis> EXISTS phone
(integer) 0 redis> DEL phone # 失败,没有 key 被删除
(integer) 0 # 同时删除多个 key redis> SET name "redis"
OK redis> SET type "key-value store"
OK redis> SET website "redis.com"
OK redis> DEL name type website
(integer) 3 DUMP 用于序列化给定key 并返回被序列化的值 redis>dump key_name
redis>set greeting "hello,dumping world!"
redis>dump greeting
"\x00\x15hello, dumping world!\x06\x00E\xa0Z\x82\xd8r\xc1\xde"
redis>dump not-exists-key
(nil) Exists 检查给定key是否存在
时间复杂度O(1)
返回值 若key存在 返回1,否则返回0.
redis>set db "redis"
ok
redis>exists db
(integer) 1
redis>del db
redis>exists db
(integer) 0
EXPIRE EXPIRE key seconds
为给定key 设置生存时间,当key过期时(生存时间为0 )它会被自动删除。
生存时间可以通过使用 DEL 命令来删除整个key
来移除,或者被 SET 和 GETSET 命令覆写(overwrite),
这意味着,如果一个命令只是修改(alter)一个带生存时间的key
的值而不是用一个新的key
值来代替(replace)它的话,那么生存时间不会被改变。 rename 命令 改名后的key的生存时间和改名前一样。
persist命令 可以在不删除key 情况下 移除key的生存时间,让key重新成为一个持久的key 过期时间精确度 redis2.4版本中 过期时间延迟在1秒内 ---即使key已经过期,但它还是可能在过期一秒之内被访问到。延迟被降低到1毫秒
时间复杂度 O(1)
返回值 设置成功返回1,key不存在或者不能为key设置生存时间时(比如在低于2.13版本的reids中更新key的时间)返回0 redis>set cache_page "www.google.com"
ok
redis> expire cache_page 30 #设置过期时间为30秒
(integer)1
redis>TTL cache_page #查看剩余生存时间
(integer) 23
redis>expire cache_page 3000 #更新过期时间
(integer)1
reids>TTL cache_page
(integer) 2996 EXPIREAT key timestamp expireat的作用和expire 类似 都是用于key 设置生存时间
不同于Expireat 命令接受的时间参数是UNIX 时间戳 时间复杂度 O(1)
返回值 如果生存时间设置成功 返回1
如果key不存在或者没办法设置生存时间 返回0 redis> set cache www.google.com
ok
redis>expirreat cache 1355292000 #这个key将在2012.12.12过期
(interger)1
redis>TTL cache
(interger) 45081860 KEYS
keys pattern 查找所有符合给定模式pattern的key
keys * 匹配数据库中所有key
keys h?llo 匹配hello,hallo 和hxllo等
keys h*llo 匹配hllo 和 heeeello等
keys h[ae]llo 匹配hello 和hallo ,但是不匹配hillo
特殊符号用\隔开 keys 的速度非常快 但在一个大的数据库中使用它仍然可能造成性能问题。如果你需要从一个数据库集中查找特定的key 你最好还是用redis的集合结构set来代替
时间复杂度 O(N)
返回值:符合给定模式的key列表
MIGRATE MIGRATE HOST PORT key destination-db timeout [copy] [replace]
将key 从原子性地当前实例传送到目标实例的指定数据库,一旦传送成功 key保证会出现在目标实例上,而当前实例上的key会被删除
实例:
先启用两个redis实例,一个使用默认的6379端口,一个使用7777端口
用客户端连接6379端口的实例,设置一个键,然后将它迁移到7777端口的实例上:
redis 127.0.0.1:6379>set greeting "Hello from 6379 instance"
ok
redis 127.0.0.1:6379>MIGRATE 127.0.0.1 7777 GREETING 0 1000
OK
redis 127.0.0.1:6379>exists greeting
(integer)0
使用另一个客户端,查看7777端口上的实例:
redis 127.0.0.1:7777>get greeting
Hello from 6379 instance
MOVE move key db
将当前数据库的key移动到给定的数据库db当中
如果当前数据库(源数据库)呵呵给定数据库有相同名字的给定key,或者key不存在于当前数据库,那么move没有任何效果
因此,也可以利用这一特性,将move当作锁原语
返回值 移动成功返回1 失败返回0
# key 存在于当前数据库
redis> SELECT 0 # redis默认使用数据库 0,为了清晰起见,这里再显式指定一次。
OK
redis> SET song "secret base - Zone"
OK
redis> MOVE song 1 # 将 song 移动到数据库 1
(integer) 1
redis> EXISTS song # song 已经被移走
(integer) 0
redis> SELECT 1 # 使用数据库 1
OK
redis:1> EXISTS song # 证实 song 被移到了数据库 1 (注意命令提示符变成了"redis:1",表明正在使用数据库 1)
(integer) 1
# 当 key 不存在的时候
redis:1> EXISTS fake_key
(integer) 0
redis:1> MOVE fake_key 0 # 试图从数据库 1 移动一个不存在的 key 到数据库 0,失败
(integer) 0
redis:1> select 0 # 使用数据库0
OK
redis> EXISTS fake_key # 证实 fake_key 不存在
(integer) 0
# 当源数据库和目标数据库有相同的 key 时
redis> SELECT 0 # 使用数据库0
OK
redis> SET favorite_fruit "banana"
OK
redis> SELECT 1 # 使用数据库1
OK
redis:1> SET favorite_fruit "apple"
OK
redis:1> SELECT 0 # 使用数据库0,并试图将 favorite_fruit 移动到数据库 1
OK
redis> MOVE favorite_fruit 1 # 因为两个数据库有相同的 key,MOVE 失败
(integer) 0
redis> GET favorite_fruit # 数据库 0 的 favorite_fruit 没变
"banana"
redis> SELECT 1
OK
redis:1> GET favorite_fruit # 数据库 1 的 favorite_fruit 也是
"apple"
OBJECT OBJECT SUBCOMMAND [ARGUMENTS [arguments]]
object命令允许从内部察看给定key的redis对象
object命令有多个子命令
object refcount <key> 返回给定key 引用所存储的值次数。此命令用于排错
object encoding <key> 返回给定key锁存储的值 所使用的内部表示
object IDLETIME <KEY> 返回给定key 自存储依赖的空闲时间(idle,没有被读取也没有被写入),一秒为单位。
对象可以以多种方式编码:
字符串可以被编码为 raw (一般字符串)或 int (为了节约内存,Redis 会将字符串表示的 64 位有符号整数编码为整数来进行储存)。
列表可以被编码为 ziplist 或 linkedlist 。 ziplist 是为节约大小较小的列表空间而作的特殊表示。
集合可以被编码为 intset 或者 hashtable 。 intset 是只储存数字的小集合的特殊表示。
哈希表可以编码为 zipmap 或者 hashtable 。 zipmap 是小哈希表的特殊表示。
有序集合可以被编码为 ziplist 或者 skiplist 格式。 ziplist 用于表示小的有序集合,而 skiplist 则用于表示任何大小的有序集合。
REFCOUNT 和 IDLETIME 返回数字。
ENCODING 返回相应的编码类型
redis> SET game "COD" # 设置一个字符串
OK
redis> OBJECT REFCOUNT game # 只有一个引用
(integer) 1
redis> OBJECT IDLETIME game # 等待一阵。。。然后查看空闲时间
(integer) 90
redis> GET game # 提取game, 让它处于活跃(active)状态
"COD"
redis> OBJECT IDLETIME game # 不再处于空闲状态
(integer) 0
redis> OBJECT ENCODING game # 字符串的编码方式
"raw"
redis> SET big-number 23102930128301091820391092019203810281029831092 # 非常长的数字会被编码为字符串
OK
redis> OBJECT ENCODING big-number
"raw"
redis> SET small-number 12345 # 而短的数字则会被编码为整数
OK
redis> OBJECT ENCODING small-number
"int"
persist persist key 移除给定key的生存时间,将这个key 从易失的 带生存时间key 转换成持久的 一个不带生存时间、永不过期的key
返回值: 当生存时间移除成功时,返回1;
如果key不存在或者key 没有设置生存时间 返回0;
redis>set mykey "hello"
ok
redis>expire mykey 10 # 为key 设置生存时间
integer 1
redis>TTL mykey
integer 10
redis>persist mykey # 移除key的生存时间
integer 1
redis>TTL mykey
integer -1
PEXPIREAT KEY milliseconds-timestamp
返回值 :如果生存时间设置成功,返回1.
当key不存在或者没办法设置生存时间时,返回0
redis> SET mykey "Hello"
OK
redis> PEXPIREAT mykey 1555555555005
(integer) 1
redis> TTL mykey # TTL 返回秒
(integer) 223157079
redis> PTTL mykey # PTTL 返回毫秒
(integer) 223157079318
scan
语法:scan cursor [Match pattern] [count count]
scan 命令及其相关sscan命令 hscan命令和zscan命令都用于增量迭代
scan 命令用于迭代当前数据库中的数据库键
sscan 命令用于迭代集合键中的元素
Hscan 命令用于迭代哈希键中的键值对
zscan 命令用于迭代有序集合中的元素(包括元素成员和元素分值)。
scan命令的基本用法
SCAN 命令是一个基于游标的迭代器(cursor based iterator): SCAN 命令每次被调用之后, 都会向用户返回一个新的游标, 用户在下次迭代时需要使用这个新游标作为 SCAN 命令的游标参数, 以此来延续之前的迭代过程。
当 SCAN 命令的游标参数被设置为 0
时, 服务器将开始一次新的迭代, 而当服务器向用户返回值为 0
的游标时, 表示迭代已结束。
scan 命令的迭代过程示例:
redis 127.0.0.1:6379> scan 0
1) "17"
2) 1) "key:12"
2) "key:8"
3) "key:4"
4) "key:14"
5) "key:16"
6) "key:17"
7) "key:15"
8) "key:10"
9) "key:3"
10) "key:7"
11) "key:1"
redis 127.0.0.1:6379> scan 17
1) "0"
2) 1) "key:5"
2) "key:18"
3) "key:0"
4) "key:2"
5) "key:19"
6) "key:13"
7) "key:6"
8) "key:9"
9) "key:11"
在上面这个例子中, 第一次迭代使用 0 作为游标, 表示开始一次新的迭代。
第二次迭代使用的是第一次迭代时返回的游标, 也即是命令回复第一个元素的值 —— 17 。
从上面的示例可以看到, SCAN 命令的回复是一个包含两个元素的数组, 第一个数组元素是用于进行下一次迭代的新游标, 而第二个数组元素则是一个数组, 这个数组中包含了所有被迭代的元素。
在第二次调用 SCAN 命令时, 命令返回了游标 0 , 这表示迭代已经结束, 整个数据集(collection)已经被完整遍历过了。
以 0 作为游标开始一次新的迭代, 一直调用 SCAN 命令, 直到命令返回游标 0 , 我们称这个过程为一次完整遍历(full iteration)
redis --------- 使用命令(每天一个)的更多相关文章
- redis键命令
1.ping命令用于检测redis是否启动 成功返回pong表示链接成功 2.在远程redis服务上执行命令 Redis-cli -h host -p port -a password 如果是连接本机 ...
- Redis常用命令
Redis常用命令Redis提供了丰富的命令对数据库和各种数据类型进行操作,这些命令可以再Linux终端使用.1.键值相关命令2.服务器相关命令 一.键值相关命令 1.get get 键值 当 key ...
- Redis常用命令入门5:有序集合类型
有序集合类型 上节我们一起学习了集合类型,感受到了redis的强大.现在我们接着学Redis的最后一个类型——有序集合类型. 有序集合类型,大家从名字上应该就可以知道,实际上就是在集合类型上加了个有序 ...
- Redis常用命令入门1:字符串类型命令
Redis总共有五种数据类型,在学习的时候,一定要开一个redis-cli程序,边看边练,提高效率. 一.最简单的命令 1.获得符合规则的键名列表 keys * 这里的*号,是指列出所有的键,同时*号 ...
- 第2讲 Redis常用命令与高级应用
目录 一.redis数据类型 5. sorted sets类型和操作 二.Redis常用命令 1.键值相关命令 2.服务器相关命令 三. redis高级应用 1. 给redis服务器设置密码 2.持久 ...
- redis shell命令大全
redis shell命令大全(转自http://blog.mkfree.com/posts/5105432f975ad0eb7d135964) 作者:oyhk 2013-1-28 3:11:35 ...
- Redis Key 命令
Redis Key 命令 del key1 key2 - keyn 删除键为key1,key2-keyn,空格分隔. persist key 移除给定 key 的生存时间,将这个 key ...
- Redis 笔记与总结5 Redis 常用命令之 键值命令 和 服务器命令 && 高级应用之 安全性 和 主从复制
Redis 提供了丰富的命令对数据库和各种数据库类型进行操作,这些命令可以在 Linux 终端使用. 1. 键值相关命令: 2. 服务器相关命令 键值相关命令 ① keys 命令 返回满足给定 pat ...
- Redis常用命令速查 02_转
一.Key Key命令速查: 命令 说明 DEL 删除给定的一个或多个 key,不存在的 key 会被忽略,返回值:被删除 key 的数量 DUMP 序列化给定 key,返回被序列化的值,使用 RES ...
随机推荐
- Android利用Volley异步载入数据完整具体演示样例(二)
MainActivity例如以下: package cc.y; import android.app.Activity; import android.content.Context; import ...
- HDU1171_Big Event in HDU【01背包】
Big Event in HDU Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
- 利用POI抽取word中的图片并保存在文件中
利用POI抽取word中的图片并保存在文件中 poi.apache.org/hwpf/quick-guide.html 1.抽取word doc中的图片 package parse; import j ...
- C# 学习笔记 三层架构系列(控件一)
下面是我两周的学习总结:这是我写给自己的,如果哪位朋友有幸看到这篇文章就是缘分.如果所说的内容不对,就请纠正.勿喷!!! 想要将两周的学习知识通过文字.通过代码.通过图片储备起来,以防自己那天思维短路 ...
- openstack封装待调试
- MSP430:输入捕获
在做超声模块时用到 //捕获上升沿 void Capture_Pos(void) { P2SEL |= Echo; //选择P23作为捕捉的输入端子 Timer1_A //TA1CCTL1 |=CM_ ...
- Nginx的alias与root的用法区别和location匹配规则
1.alias与root的用法区别 最基本的区别:alias指定的目录是准确的,root是指定目录的上级目录,并且该上级目录要含有location指定名称的同名目录. location /abc/ { ...
- ckeditor使用时,第一次可以显示,修改后显示不了的问题
1.谷歌浏览器会留有缓存,除去缓存后,就可以更改ckeditor了.下面是解决方法:
- kindeditor上传文件的使用
在线富文本编辑器kindeditor配置(.Net Framework 3.5) 下载地址:http://kindeditor.net/down.php 解压放在项目要目录下, 在Bin目录下添加 ...
- Akka源码分析-Remote-Creating Actors Remotely
在akka官网中关于远程actor交互,介绍了两种方法,一种是通过actorSelection查询,另一种是通过actorOf在远程节点创建一个actor.actorSelection我们之前的博客中 ...