select num

数据库选择 默认有16[0到15]个数据库,默认自动选择0号数据库

move key num

移动key到num服务器

del key [key ...]

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

exists key

检查给定 key 是否存在。

expire key

整型值 设置key的生命周期 单位秒数

如果为p(pexpire)单位就变为毫秒

expireat key timestamp

指定key在UNIX 时间戳(unix timestamp)变失效

KEYS pattern

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

  • KEYS * 匹配数据库中所有 key 。
  • KEYS h?llo 通配单个字符 如 hello , hallo 和 hxllo 等。
  • KEYS h*llo 通配任意多个字符(包括没有) 如hllo 和 heeeeello 等。
  • KEYS h[ae]llo 通配括号内的某1个字符 如hello 和 hallo ,但不匹配 hillo 。

特殊符号用 \ 隔开。

ttl key

查询key的生命周期 默认-1,永久有效; 单位秒数 如果为(pttl)单位就变为毫秒

persist key

不让key失效;

randomkey

从当前数据库中随机返回(不删除)一个 key 。

rename key newkey

将 key 改名为 newkey 。

renamenx key newkey

当且仅当 newkey 不存在时,将 key 改名为 newkey 。

type key

返回 key 所储存的值的类型。

flushdb

清空当前数据库;

SORT与SCAN

这两个命令稍微复杂一点,所以单独拎出来讲

sort

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

如果要把redis作为noSql来用的话,该命令就是一个非常重要的命令了,作用有 分页,排序,数据关联

排序

按数值排序

# 开销金额列表
redis> LPUSH today_cost 30 1.5 10 8
(integer) 4 # 排序
redis> SORT today_cost
1) "1.5"
2) "8"
3) "10"
4) "30" # 逆序排序
redis 127.0.0.1:6379> SORT today_cost DESC
1) "30"
2) "10"
3) "8"
4) "1.5"

按字符串排序

必须显示的指定 alpha 选项才能进行排序,否则不能排序;

127.0.0.1:6379> SORT website
(error) ERR One or more scores can't be converted into double 127.0.0.1:6379> SORT website alpha
1) "www.alipay.com"
2) "www.baidu.com"
3) "www.china.com"
4) "www.sina.com"
5) "www.tence.com" 127.0.0.1:6379> SORT website alpha desc
1) "www.tence.com"
2) "www.sina.com"
3) "www.china.com"
4) "www.baidu.com"
5) "www.alipay.com"

limit

排序从0开始算

127.0.0.1:6379> SORT testnum  limit 5
(error) ERR syntax error 127.0.0.1:6379> SORT testnum limit 5 10
1) "5"
2) "6"
3) "8"
4) "9"
5) "10"
6) "11"
7) "24"

关联外部数据

# admin

redis 127.0.0.1:6379> LPUSH uid 1
(integer) 1 redis 127.0.0.1:6379> SET user_name_1 admin
OK redis 127.0.0.1:6379> SET user_level_1 9999
OK # jack redis 127.0.0.1:6379> LPUSH uid 2
(integer) 2 redis 127.0.0.1:6379> SET user_name_2 jack
OK redis 127.0.0.1:6379> SET user_level_2 10
OK # peter redis 127.0.0.1:6379> LPUSH uid 3
(integer) 3 redis 127.0.0.1:6379> SET user_name_3 peter
OK redis 127.0.0.1:6379> SET user_level_3 25
OK # mary redis 127.0.0.1:6379> LPUSH uid 4
(integer) 4 redis 127.0.0.1:6379> SET user_name_4 mary
OK redis 127.0.0.1:6379> SET user_level_4 70
OK
redis 127.0.0.1:6379> SORT uid
1) "1" # admin
2) "2" # jack
3) "3" # peter
4) "4" # mary # ↓↓ 根据外部的level来排序
redis 127.0.0.1:6379> SORT uid BY user_level_*
1) "2" # jack , level = 10
2) "3" # peter, level = 25
3) "4" # mary, level = 70
4) "1" # admin, level = 9999

user_level_* 是一个占位符, 它先取出 uid 中的值, 然后再用这个值来查找相应的键。

# 获取关联数据
127.0.0.1:6379> sort uid get user_name_*
1) "admin"
2) "jack"
3) "peter"
4) "mary" 127.0.0.1:6379> sort uid get user_name_* by user_level_*
1) "jack"
2) "peter"
3) "mary"
4) "admin" # 获取多个外部键
redis 127.0.0.1:6379> SORT uid GET user_level_* GET user_name_*
1) "9999" # level
2) "admin" # name
3) "10"
4) "jack"
5) "25"
6) "peter"
7) "70"
8) "mary" # 占位符 # 可以获得当前uid的值,这里由于markdown语法的问题,所以临时转义一下;
127.0.0.1:6379> sort uid desc get \# get user_level_* get user_name_*
1) "4"
2) "70"
3) "mary"
4) "3"
5) "25"
6) "peter"
7) "2"
8) "10"
9) "jack"
10) "1"
11) "999"
12) "admin"

根据 not-exists-key 可以忽略排序,感觉没什么用

redis 127.0.0.1:6379> SORT uid BY not-exists-key GET # GET user_level_* GET user_name_*
1) "4" # id
2) "70" # level
3) "mary" # name
4) "3"
5) "25"
6) "peter"
7) "2"
8) "10"
9) "jack"
10) "1"
11) "9999"
12) "admin"

关于哈希表的关联

BY 和 GET 选项都可以用 key->field 的格式来获取哈希表中的域的值, 其中 key 表示哈希表键, 而 field 则表示哈希表的域;

redis 127.0.0.1:6379> HMSET user_info_1 name admin level 9999
OK redis 127.0.0.1:6379> HMSET user_info_2 name jack level 10
OK redis 127.0.0.1:6379> HMSET user_info_3 name peter level 25
OK redis 127.0.0.1:6379> HMSET user_info_4 name mary level 70
OK 127.0.0.1:6379> SORT uid get # get user_info_*->level by user_info_*->level desc
1) "1"
2) "9999"
3) "4"
4) "70"
5) "3"
6) "25"
7) "2"
8) "10"

保存sort结果

127.0.0.1:6379> SORT uid get # get user_info_*->name  by user_info_*->level desc store user_level_desc_name
(integer) 8
127.0.0.1:6379> EXPIRE user_level_desc_name 60
(integer) 1

可以通过将 SORT 命令的执行结果保存,并用 EXPIRE 为结果设置生存时间,以此来产生一个 SORT 操作的结果缓存。

这样就可以避免对 SORT 操作的频繁调用:只有当结果集过期时,才需要再调用一次 SORT 操作。

另外,为了正确实现这一用法,你可能需要加锁以避免多个客户端同时进行缓存重建(也就是多个客户端,同一时间进行 SORT 操作,并保存为结果集),这一般是用在数据量较大的时候,在程序里面做如下操作:

  1. 先判断 user_level_desc_name 有没有;如果有就直接取出;
  2. 如果没有,然后用setnx加个锁(时间具体看数据大小,或者建立完缓存再让其失效),来建立缓存(这时如果有其他进程访问,就会判断到有这个锁就不建立缓存),然后返回数据;

以上参考: http://doc.redisfans.com/key/sort.html

scan

SCAN cursor [MATCH pattern] [COUNT count]

SCAN 命令及其相关的 SSCAN 命令、 HSCAN 命令和 ZSCAN 命令都用于增量地迭代(incrementally iterate)一集元素(a collection of elements):

  • SCAN 命令用于迭代当前数据库中的数据库键。
  • SSCAN 命令用于迭代集合键中的元素。
  • HSCAN 命令用于迭代哈希键中的键值对。
  • ZSCAN 命令用于迭代有序集合中的元素(包括元素成员和元素分值)。

当 KEYS 命令被用于处理一个大的数据库时, 又或者 SMEMBERS 命令被用于处理一个大的集合键时, 它们可能会阻塞服务器达数秒之久。这时候就要选择用 SCAN 命令了。

使用 SMEMBERS 命令可以返回集合键当前包含的所有元素, 但是对于 SCAN 这类增量式迭代命令来说, 因为在对键进行增量式迭代的过程中, 键可能会被修改, 所以增量式迭代命令只能对被返回的元素提供有限的保证 (offer limited guarantees about the returned elements)。

SSCAN 命令、 HSCAN 命令和 ZSCAN 命令的第一个参数总是一个数据库键。而 SCAN 命令则不需要在第一个参数提供任何数据库键 —— 因为它迭代的是当前数据库中的所有数据库键。

SCAN 命令是一个基于游标的迭代器,每次被调用之后, 都会向用户返回一个新的游标, 用户在下次迭代时需要使用这个新游标作为 SCAN 命令的游标参数, 以此来延续之前的迭代过程。当 SCAN 命令的游标参数被设置为 0 时, 服务器将开始一次新的迭代, 而当服务器向用户返回值为 0 的游标时, 表示迭代已结束。

redis 127.0.0.1:6379> scan 0
1) "17" # 当前迭代的游标到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" # 然后从17开始继续迭代,迭代到0就代表迭代结束,它会自动rewind;
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" # 也可以通过count来限制每次迭代的数量,注意,在每次迭代时这个count的值可以不一样;
127.0.0.1:6379> scan 0 count 5
1) "28"
2) 1) "member1"
2) "user_info_1"
3) "user_name_3"
4) "user_level_4"
5) "coll"

使用MATCH 选项

通过给定 MATCH 参数可以实现 keys 那样的按模式迭代;但是,这里的按模式迭代和keys有一些本质上的区别:

对元素的模式匹配工作是在命令从数据集中取出元素之后, 向客户端返回元素之前的这段时间内进行的, 所以如果被迭代的数据集中只有少量元素和模式相匹配, 那么迭代命令或许会在多次执行中都不返回任何元素。

redis 127.0.0.1:6379> scan 224 MATCH *11*
1) "80"
2) (empty list or set) redis 127.0.0.1:6379> scan 80 MATCH *11*
1) "176"
2) (empty list or set) redis 127.0.0.1:6379> scan 176 MATCH *11* COUNT 1000
1) "0"
2) 1) "key:611"
2) "key:711"
3) "key:118"
4) "key:117"
5) "key:311"
6) "key:112"
7) "key:111"
8) "key:110"
9) "key:113"
10) "key:211"
11) "key:411"
12) "key:115"
13) "key:116"
14) "key:114"
15) "key:119"
16) "key:811"
17) "key:511"
18) "key:11"

更多请参考: http://doc.redisfans.com/key/index.html

【redis专题(8)】命令语法介绍之通用KEY的更多相关文章

  1. 【redis专题(7)】命令语法介绍之Pub/Sub

    Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息.主要的目的是解耦消息发布者和消息订阅者之间的耦合,这点和设计模式中的观察者模式比较相似.p ...

  2. 【redis专题(2)】命令语法介绍之string

    REDIS有5大数据结构:string,link,sortedset,sets,hash. 这5个结构我将用5篇文章来记录各自是怎么用的,然后再用一篇文章来说一下各自的应用场景: 更多语法请参考: h ...

  3. 【redis专题(6)】命令语法介绍之hash

    可以把hash看做一个数组hset array key1 value2;,该数据类型特别适用于存储 增 hset key field value 作用: 把key中filed域的值设为value 注: ...

  4. 【redis专题(5)】命令语法介绍之sets

    标签(空格分隔): Redis 关于 redis的无序集合有三个特点: 无序性, 确定性(描述准确) , 唯一性: 有点类似于数据容器: 增 SADD key member1 [member2] 作用 ...

  5. 【redis专题(4)】命令语法介绍之sorted_set

    有序集合可以模拟优先级队列的实现 增 zadd key score1 value1 score2 value2 .. redis 127.0.0.1:6379> zadd stu 18 lily ...

  6. 【redis专题(3)】命令语法介绍之link

    通过链表结构可以模仿队列结构与堆栈结构:关于队列结构和堆栈结构可以查看https://www.zybuluo.com/a5635268/note/290475 增 lpush key value1 v ...

  7. Jedis对Redis的常用命令操作

    本篇主要总结一些Jedis对Redis的常用命令操作: 1.对key操作命令 2.对String操作命令 3.对List操作命令 4.对Set操作命令 5.对Hash操作命令 6.排序操作指令 一.项 ...

  8. redis学习笔记01 — 基本介绍、安装配置及常用命令

    redis--NoSQL的一种 为了解决高并发.高可用.高扩展.大数据存储等一系列问题而产生的数据库解决方案,就是NoSQL NoSQL,非关系型数据库,全名:Not Only Sql,它不能代替关系 ...

  9. redis GEO地理位置命令介绍

    GEOADD keylongitude latitude member [longitude latitude member ...] Available since 3.2.0. Time comp ...

随机推荐

  1. 了解 : angular ng-messages

    ng-messages="form['positionTitle' + languageVersion.typeEnum].$error ng-messages="form.pos ...

  2. alisql安装步骤

    卸载原有自带的Mysql yum remove mysql-libs   安装依赖包 yum install centos-release-scl devtoolset-4-gcc-c++ devto ...

  3. 深入理解 JavaScript 异步系列(2)—— jquery的解决方案

    第一部分,jQuery-1.5 之后的 ajax 本地址http://www.cnblogs.com/wangfupeng1988/p/6515779.html未经允许不得转载~ $.ajax这个函数 ...

  4. 1593: [Usaco2008 Feb]Hotel 旅馆

    1593: [Usaco2008 Feb]Hotel 旅馆 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 391  Solved: 228[Submit ...

  5. 制作流程图,activity,好不容易找到的

    Star UML指导手册 Module by: Stephen Wong 原著:Stephen Wong            翻译:火猴 1.   综述:http://pan.baidu.com/s ...

  6. Web 页面测试总结—控件类

    web端页面测试,最常见的是基本控件的测试,只有了解常见的控件和其测试方法,才能掌握测试要点,避免漏测情况发生.根据日常工作总结,将控件和常见逻辑集合在一起,总结了几个控件类测试查场景如下. 导航条 ...

  7. Struts2中ActionContext及ServletActionContext介绍(转载)

    1. ActionContext 在Struts2开发中,除了将请求参数自动设置到Action的字段中,我们往往也需要在Action里直接获取请求(Request)或会话(Session)的一些信息, ...

  8. SOA面向服务的架构理解

    Ø  单一应用架构 ·当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本. Ø  垂直应用架构 当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆成互不相干的几 ...

  9. JavaWeb之JDBC

    一.介绍 C#定义了ADO.Net接口来实现对SQLServer.Oracel等数据库的访问,那Java定义了JDBC接口实现对数据库的访问,数据库提供商只要实现这些接口,Java语言就能访问数据库. ...

  10. 解决SQLServer 2008 日志无法收缩,收缩后大小不改变

    问题 数据库日志文件上G,或者几十G了,使用日志收缩,和日志截断收缩都不管用.体积一直减不下来.. 解决方案 查看日志信息 在查询分析器中执行如下代码来查看日志信息:  DBCC LOGINFO('数 ...