http://blog.csdn.net/tangsilai/article/details/7477961
============================== String =======================================
一. 字符串: name , age 均为key
设置值: set name boa >> ok
获取值: get name >> "boa"
删除key: del name
查看key存储数据的类型: type name >> string
拼接串: append name isGood >> get name >>"boaisGood"
set age 1
key的值自增1: incr age
key的值自减1: cecr age
多个查询 mget name age >>
1) "boa111"
2) "25"
返回 key 所储存的字符串值的长度: strlen name >>
(integer) 6
======================== Hash ====================================
二. 哈希表: hashkey 为key也叫作表名. 表内容: name "boa" age 25 description "is a good man" // 分 h- / hm-
单个保存: hset hashkey1 name "boa" >> //hset 不支持批量设置
hset hashkey1 age 25 >>
hset hashkey1 description "is a good man" >>
批量保存: hmset hashkey name "boa" age 25 description "is a good man"
查询单个值: hget hashkey name >> //hget不支持查询多个值
"boa"
查询单个值: hmget hashkey name >>
1) "boa"
查询多个值: hmget hashkey name age >>
1) "boa"
2) "25"
获取所有key和value: hgetall hashkey >> //key value
1) "name"
2) "boa"
3) "age"
4) "25"
5) "description"
6) "is a good man"
获取所有key:> hkeys hashkey >>
1) "name"
2) "age"
3) "description"
获取所有value:>hvals hashkey >>
1) "boa"
2) "25"
3) "is a good man"
获取表中字段的数量: hlen hashkey >>
(integer) 3
@@@@ 使用场景: 对象存储.
========================== List ==============================================
三 . 列表: listkey //分左右操作
左插入(从头部插入): head mycat-->mysql-->mongo-->redis(first) tail
lpush listkey redis
lpush listkey mongo
lpush listkey mysql
lpush listkey mycat
右插入(从尾部插入) : head (first)redis<--mongo<--mysql<--mycat tail
rpush listkey2 redis
rpush listkey2 mongo
rpush listkey2 mysql
rpush listkey2 mycat
根据索引(序号)查询列表中的元素: lindex listkey 1 >> //索引从0开始,到length-1为止.
"mongo"
查询指定范围内的元素: lrange listkey 0 2 >> // lrange key start_index stop_index (该范围也是索引的范围)
1) "mycat"
2) "mysql"
3) "mongo"
获取列表长度: llen listkey >>
(integer) 4
移除并获取列表的第一个元素: lpop listkey >>
"mycat"
移除并获取列表的第一个元素: lpop listkey2 >>
"redis"
移除并获取列表的最后一个元素: rpop listkey >>
"redis"
移除并获取列表的最后一个元素: rpop listkey2 >>
"mycat"
移除列表元素 lrem listkey2 1 hello >> // listkey2 目标集合, 1: 表示数量, 正负表示方向 hello 表示要删除匹配的对象.
Lrem 根据参数 COUNT 的值,移除列表中与参数 VALUE 相等的元素。
COUNT 的值可以是以下几种:
count > 0 : 从表头开始向表尾搜索,移除与 VALUE 相等的元素,数量为 COUNT 。
count < 0 : 从表尾开始向表头搜索,移除与 VALUE 相等的元素,数量为 COUNT 的绝对值。
count = 0 : 移除表中所有与 VALUE 相等的值。
移除并获取第一个: blpop listkey 10 //一直等待,直到超时或者发现可弹出的元素为止 10 : 等待时间.
移除并获取最后一个: brpop listkey timeout //~
尾部移除一个元素,将这个元素从头部插入: rpoplpush listkey listkey
@@@@ 使用场景: 消息队列, 发送缓存队列, 支持反向查找和遍历,
假设现在有 job 、 command 和 request 三个列表,其中 job 不存在, command 和 request 都持有非空列表。考虑以下命令:
BLPOP job command request 30 #阻塞30秒,0的话就是无限期阻塞,job列表为空,被跳过,紧接着command 列表的第一个元素被弹出。
1) "command" # 弹出元素所属的列表
2) "update system..." # 弹出元素所属的值
为什么要阻塞版本的pop呢,主要是为了避免轮询。
举个简单的例子如果我们用list来实现一个工作队列。
执行任务的thread可以调用阻塞版本的pop去获取任务这样就可以避免轮询去检查是否有任务存在。
当任务来时候工作线程可以立即返回,也可以避免轮询带来的延迟。
=============================== Set =============================================
四. 集合 : setkey , setkey2 均为set名.
添加元素:sadd setkey "hello" >> (integer) 1
sadd setkey "world" >> (integer) 1
sadd setkey "fuck" >> (integer) 1
sadd setkey "hello" >> (integer) 0
sadd setkey is very good city //批量添加元素
批量添加元素: sadd setkey2 boa is good city fuck
查询集合的所有元素: smembers setkey >>
1) "fuck"
2) "work"
3) "hello"
获取集合的成员个数: scard setkey >>
(integer) 3
移除集合中的一个或者多个成员: srem fuck work >>
返回给定所有集合的交集: sinter setkey setkey2 >>
1) "city"
2) "fuck"
3) "good"
4) "is"
返回给定所有集合的并集: sunion setkey setkey2 >>
1) "boa"
2) "world"
3) "fuck"
4) "good"
5) "is"
6) "city"
7) "very"
8) "hello"
返回给定所有集合的差集: sdiff setkey setkey2 //setkey中有setkey2中没有的集合. >>
1) "world"
2) "very"
3) "hello"
将 world 元素从 setkey 集合移动到 seteky2 集合: smove setkey seteky2 world >>
(integer) 1
@@@@应用场景: 需要自动排重的场景, 随机排列数据 . 可以求交集,并集,差集.
==================================== sorted Set ===================================
五. 有序集合: ssetkey, ssetkey2, ssetkey3
添加元素: zadd ssetkey 1 yyf
zadd ssetkey 2 czq
zadd ssetkey 3 cyf
zadd ssetkey 5 lxy
zadd ssetkey 6 lmz
zadd ssetkey 6 yhz
批量添加(要带分数): zadd ssetkey2 1 yyf 2 czq 3 cyf 4 lxy 5 yhz 6 lmz 5 xxx
查看所有元素: zrange ssetkey 0 -1
1) "yyf"
2) "czq"
3) "cyf"
4) "lxy"
5) "lmz"
6) "yhz"
--------------------------------
zrange ssetkey2 0 -1
1) "yyf"
2) "czq"
3) "cyf"
4) "lxy"
5) "xxx"
6) "yhz"
7) "lmz"
删除元素: zrem ssetkey2 boa
删除多个元素: zrem ssetkey2 yyf czq
(integer) 2
查看元素个数: zcard ssetkey2
(integer) 7
查看指定元素的分数: zscore ssetkey czq >>
"2"