您的位置:首页 > 数据库 > Redis

Redis新手快速入门(二)

2017-08-08 23:15 363 查看
以下数据类型的操作从简介绍。

2.3 List的操作

/* 插入数据 */

LPUSH key value [value ...]

// 将一个或多个值 value 插入到列表 key 的表头
// 如果有多个 value 值,那么各个 value 值按从左到右的顺序依次插入到表头: 比如说,对空列表 mylist 执行命令 LPUSH mylist a b c ,列表的值将是 c b a ,这等同于原子性地执行 LPUSH mylist a 、 LPUSH mylist b 和 LPUSH mylist c 三个命令。
// 如果 key 不存在,一个空列表会被创建并执行 LPUSH 操作。
// 当 key 存在但不是列表类型时,返回一个错误。


例:

redis> LPUSH languages python # 加入单个元素

(integer) 1

redis> LPUSH languages python # 加入重复元素

(integer) 2

redis> LRANGE languages 0 -1 # 列表允许重复元素

1) “python”

2) “python”

redis> LPUSH mylist a b c # 加入多个元素

(integer) 3

redis> LRANGE mylist 0 -1

1) “c”

2) “b”

3) “a”

/* 插入数据 */

RPUSH key value [value ...]

// 将一个或多个值 value 插入到列表 key 的表尾(最右边)。
// 如果有多个 value 值,那么各个 value 值按从左到右的顺序依次插入到表尾:比如对一个空列表 mylist 执行 RPUSH mylist a b c ,得出的结果列表为 a b c ,等同于执行命令 RPUSH mylist a 、 RPUSH mylist b 、 RPUSH mylist c 。
// 如果 key 不存在,一个空列表会被创建并执行 RPUSH 操作。
// 当 key 存在但不是列表类型时,返回一个错误。


/* 移除数据 */

LPOP key

// 移除并返回列表 key 的头元素。


例:

redis> LLEN course

(integer) 0

redis> RPUSH course algorithm001

(integer) 1

redis> RPUSH course c++101

(integer) 2

redis> LPOP course # 移除头元素

“algorithm001”

/* 移除数据 */

RPOP key

// 移除并返回列表 key 的尾元素。


/* 查询数据 */

LRANGE key start stop

// 返回列表 key 中指定区间内的元素,区间以偏移量 start 和 stop 指定。
// 下标(index)参数 start 和 stop 都以 0 为底,也就是说,以 0 表示列表的第一个元素,以 1 表示列表的第二个元素,以此类推。
// 你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。


例:

redis> RPUSH fp-language lisp

(integer) 1

redis> LRANGE fp-language 0 0

1) “lisp”

redis> RPUSH fp-language scheme

(integer) 2

redis> LRANGE fp-language 0 1

1) “lisp”

2) “scheme”

2.4 Set的操作(单值多value(不重复))

/* 添加 */

SADD key member [member ...]

// 将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略。
// 假如 key 不存在,则创建一个只包含 member 元素作成员的集合。
// 当 key 不是集合类型时,返回一个错误。


例:

redis> SADD bbs “discuz.net” # 添加单个元素

(integer) 1

redis> SADD bbs “discuz.net” # 添加重复元素

(integer) 0

redis> SADD bbs “tianya.cn” “groups.google.com” # 添加多个元素

(integer) 2

redis> SMEMBERS bbs

1) “discuz.net”

2) “groups.google.com”

3) “tianya.cn”

/* 移除 */

SREM key member [member ...]

// 移除集合 key 中的一个或多个 member 元素,不存在的 member 元素会被忽略。
// 当 key 不是集合类型,返回一个错误。


例:

redis> SMEMBERS languages # 测试数据

1) “c”

2) “lisp”

3) “python”

4) “ruby”

redis> SREM languages ruby # 移除单个元素

(integer) 1

redis> SREM languages non-exists-language # 移除不存在元素

(integer) 0

redis> SREM languages lisp python c # 移除多个元素

(integer) 3

redis> SMEMBERS languages

(empty list or set)

/* 查看 */

SMEMBERS key

// 返回集合 key 中的所有成员。
// 不存在的 key 被视为空集合。


例:

redis> EXISTS not_exists_key # key 不存在或集合为空

(integer) 0

redis> SMEMBERS not_exists_key

(empty list or set)

redis> SADD language Ruby Python Clojure # 非空集合

(integer) 3

redis> SMEMBERS language

1) “Python”

2) “Ruby”

3) “Clojure”

/* 随机出栈 */

SPOP key

// 移除并返回集合中的一个随机元素。
// 如果只想获取一个随机元素,但不想该元素从集合中被移除的话,可以使用 SRANDMEMBER 命令。

SRANDMEMBER key [count]

// 如果命令执行时,只提供了 key 参数,那么返回集合中的一个随机元素。
// 从 Redis 2.6 版本开始, SRANDMEMBER 命令接受可选的 count 参数:
// 如果 count 为正数,且小于集合基数,那么命令返回一个包含 count 个元素的数组,数组中的元素各不相同。如果 count 大于等于集合基数,那么返回整个集合。
// 如果 count 为负数,那么命令返回一个数组,数组中的元素可能会重复出现多次,而数组的长度为 count 的绝对值。
// 该操作和 SPOP 相似,但 SPOP 将随机元素从集合中移除并返回,而 SRANDMEMBER 则仅仅返回随机元素,而不对集合进行任何改动。


2.5 Hash的操作(KV模式不变,但V是一个键值对)

/* 添加 */

HSET key field value

// 将哈希表 key 中的域 field 的值设为 value 。
// 如果 key 不存在,一个新的哈希表被创建并进行 HSET 操作。
// 如果域 field 已经存在于哈希表中,旧值将被覆盖。


例:

redis> HSET website google “www.g.cn” # 设置一个新域

(integer) 1

redis> HSET website google “www.google.com” # 覆盖一个旧域

(integer) 0

/* 查看 */

HGET key field

// 返回哈希表 key 中给定域 field 的值。


例:

redis> HSET site redis redis.com

(integer) 1

redis> HGET site redis

“redis.com”

/* 查看全部 */

HGETALL key

// 返回哈希表 key 中,所有的域和值。
// 在返回值里,紧跟每个域名(field name)之后是域的值(value),所以返回值的长度是哈希表大小的两倍。


例:

redis> HSET people jack “Jack Sparrow”

(integer) 1

redis> HSET people gump “Forrest Gump”

(integer) 1

redis> HGETALL people

1) “jack” # 域

2) “Jack Sparrow” # 值

3) “gump”

4) “Forrest Gump”

/* 删除 */

HDEL key field [field ...]

//删除哈希表 key 中的一个或多个指定域,不存在的域将被忽略。


例:

测试数据

redis> HGETALL abbr

1) “a”

2) “apple”

3) “b”

4) “banana”

5) “c”

6) “cat”

7) “d”

8) “dog”

删除单个域

redis> HDEL abbr a

(integer) 1

删除不存在的域

redis> HDEL abbr not-exists-field

(integer) 0

删除多个域

redis> HDEL abbr b c

(integer) 2

redis> HGETALL abbr

1) “d”

2) “dog”

2.6 Zset的操作(Sorted Set)

/* 增加 */

ZADD key score member [[score member] [score member] ...]

// 将一个或多个 member 元素及其 score 值加入到有序集 key 当中。
// 如果某个 member 已经是有序集的成员,那么更新这个 member 的 score 值,并通过重新插入这个 member 元素,来保证该 member 在正确的位置上。
// score 值可以是整数值或双精度浮点数。
// 如果 key 不存在,则创建一个空的有序集并执行 ZADD 操作。
// 当 key 存在但不是有序集类型时,返回一个错误。
// 对有序集的更多介绍请参见 sorted set 。


例:

添加单个元素

redis> ZADD page_rank 10 google.com

(integer) 1

添加多个元素

redis> ZADD page_rank 9 baidu.com 8 bing.com

(integer) 2

redis> ZRANGE page_rank 0 -1 WITHSCORES

1) “bing.com”

2) “8”

3) “baidu.com”

4) “9”

5) “google.com”

6) “10”

添加已存在元素,且 score 值不变

redis> ZADD page_rank 10 google.com

(integer) 0

redis> ZRANGE page_rank 0 -1 WITHSCORES # 没有改变

1) “bing.com”

2) “8”

3) “baidu.com”

4) “9”

5) “google.com”

6) “10”

添加已存在元素,但是改变 score 值

redis> ZADD page_rank 6 bing.com

(integer) 0

redis> ZRANGE page_rank 0 -1 WITHSCORES # bing.com 元素的 score 值被改变

1) “bing.com”

2) “6”

3) “baidu.com”

4) “9”

5) “google.com”

6) “10”

/* 查看 */

ZRANGE key start stop [WITHSCORES]

/*
返回有序集 key 中,指定区间内的成员。
其中成员的位置按 score 值递增(从小到大)来排序。
具有相同 score 值的成员按字典序(lexicographical order )来排列。
如果你需要成员按 score 值递减(从大到小)来排列,请使用 ZREVRANGE 命令。
下标参数 start 和 stop 都以 0 为底,也就是说,以 0 表示有序集第一个成员,以 1 表示有序集第二个成员,以此类推。
你也可以使用负数下标,以 -1 表示最后一个成员, -2 表示倒数第二个成员,以此类推。
超出范围的下标并不会引起错误。
比如说,当 start 的值比有序集的最大下标还要大,或是 start > stop 时, ZRANGE 命令只是简单地返回一个空列表。
另一方面,假如 stop 参数的值比有序集的最大下标还要大,那么 Redis 将 stop 当作最大下标来处理。
可以通过使用 WITHSCORES 选项,来让成员和它的 score 值一并返回,返回列表以 value1,score1, ..., valueN,scoreN 的格式表示。
客户端库可能会返回一些更复杂的数据类型,比如数组、元组等。
*/


例:

redis > ZRANGE salary 0 -1 WITHSCORES # 显示整个有序集成员

1) “jack”

2) “3500”

3) “tom”

4) “5000”

5) “boss”

6) “10086”

redis > ZRANGE salary 1 2 WITHSCORES # 显示有序集下标区间 1 至 2 的成员

1) “tom”

2) “5000”

3) “boss”

4) “10086”

redis > ZRANGE salary 0 200000 WITHSCORES # 测试 end 下标超出最大下标时的情况

1) “jack”

2) “3500”

3) “tom”

4) “5000”

5) “boss”

6) “10086”

redis > ZRANGE salary 200000 3000000 WITHSCORES # 测试当给定区间不存在于有序集时的情况

(empty list or set)

更多redis内容:

Redis新手快速入门(一)http://blog.csdn.net/Ink4T/article/details/76944789
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  redis