若要修改测试环境的redis数据,首先获得类型(五中类型字符串、散列、列表、集合、有序集合),
一、通用类型即对key的操作
1 获得键值的数据类型。返回none表示输入的键不存在,string表示字符串,hash 散列类型,list列表,set集合类型,zset(有序集合类型)
type 键名
比如:type name
2 获得所有的keys
keys *
比如:
redis> MSET one 1 two 2 three 3 four 4 # 一次设置 4 个 key
OK
redis> KEYS *o*
1) "four"
2) "two"
3) "one"
redis> KEYS t??
1) "two"
redis> KEYS t[w]*
1) "two"
3 exists 键名
判断一个键是否存在,存在则返回1,不存在返回0
redis> SET db "redis"
OK
redis> EXISTS db
(integer) 1
redis> DEL db
(integer) 1
redis> EXISTS db
(integer) 0
4 删除键,成功返回1,失败返回0。
# 删除单个 key
redis> SET name huangz
OK
redis> DEL name
(integer) 1
# 删除一个不存在的 key
redis> EXISTS phone
(integer) 0
5命令类型:设置/获得(1个或者多个)、删除、自增、获得某个范围的值。
增删查找命令对比
| 字符串 | 散列 | 列表 | 集合 | 有序集合 | |
设置/新增 | set key | HSET key field value | LPUSH key value RLPUSH key value | SADD key member | ZADD key score member | |
查询 | get | HGET key field HKEYS key(返回所有的field) HGETALL key 返回所有的field和value | lrange key start stop lindex key index LINSERT key BEFORE|AFTER pivot value | SCARD(返回集合数量) Smember SRANDMEMBER | ZCARD key ZCOUNT key min max | |
删除其中一个元素 | del key | hdel key field | lpop/rpop brpop(带阻塞) | SMOVE SPOP | ZREM key member | 1 设置失效) |
修改 | set | hset | LSET key index value | 无 | | |
二、字符串、整数
1 设置和获取字符串的值 set/get。
说明:set 设置的key若存在,则会覆盖。get获取的key不存在则会返回nil。
redis> GET db
(nil)
redis> SET db redis
OK
2 递增数字,incr(自增1) 和incrby(增加指定整数)
当数字不存在时,会直接回默认键值0,所以第一次递增后值是1
redis> SET page_view 20
OK
redis> INCR page_view
(integer) 21
说明:若给一个字符串自增,则会返回
incrby
# key 存在且是数字值
redis> SET rank 50
OK
redis> INCRBY rank 20
(integer) 70
redis> GET rank
"70"
6 自减 decr(自减1)和decrby(自减指定整数)
7 尾部追加 append
# 对不存在的 key 执行 APPEND
redis> EXISTS myphone # 确保 myphone 不存在
(integer) 0
redis> APPEND myphone "nokia" # 对不存在的 key 进行 APPEND ,等同于 SET myphone "nokia"
(integer) 5 # 字符长度
# 对已存在的字符串进行 APPEND
redis> APPEND myphone " - 1110" # 长度从 5 个字符增加到 12 个字符
(integer) 12
redis> GET myphone
"nokia - 1110"
8 获取字符串长度
# 获取字符串的长度
redis> SET mykey "Hello world"
OK
redis> STRLEN mykey
(integer) 11
# 不存在的 key 长度为 0
redis> STRLEN nonexisting
(integer) 0
9 设置键值:使用 【字符串:字符串】格式
设置/获得多个键值
三 散列类型命令
命令格式:
一个:
hset key field vaue
hget key field
多个
hmset key field1 value1 field2 value2
hmget key field1 field2
所有
hgetAll key
1、HSet不分插入和更新,执行插入时返回1,执行更新时返回0
2 设置/获得多个字段值hmset、hmget、hgetall
redis> HMSET pet dog "doudou" cat "nounou" # 一次设置多个域
OK
redis> HMGET pet dog cat fake_pet # 返回值的顺序和传入参数的顺序一样
1) "doudou"
2) "nounou"
3) (nil)
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"
3 判断是否存在;hexists
4 HSETNX,当不存在时赋值,若已存在则不执行任何操作。
5 增加数字:hincrby
6 删除:hdel
7只获取字段名/字段值:hkeys/hvals
四 列表类型命令
1 lpush/rpush,像列表左/右边增加元素。,返回列表长度。
# 加入单个元素
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"
2 lpop/rpop,从两端弹出元素。返回弹出的元素,若无,则返回nil。
redis> LLEN course
(integer) 0
redis> RPUSH course algorithm001
(integer) 1
redis> RPUSH course c++101
(integer) 2
redis> LPOP course # 移除头元素
"algorithm001
3 获取队列中元素个数:llen
4 lrange 获得列表子集
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"
5 删除列表中前count为value的值。lrem key count value
# 先创建一个表,内容排列是
# morning hello morning helllo morning
redis> LPUSH greet "morning"
(integer) 1
redis> LPUSH greet "hello"
(integer) 2
redis> LPUSH greet "morning"
(integer) 3
redis> LPUSH greet "hello"
(integer) 4
redis> LPUSH greet "morning"
(integer) 5
redis> LRANGE greet 0 4 # 查看所有元素
1) "morning"
2) "hello"
3) "morning"
4) "hello"
5) "morning"
redis> LREM greet 2 morning # 移除从表头到表尾,最先发现的两个 morning
(integer) 2 # 两个元素被移除
redis> LLEN greet # 还剩 3 个元素
(integer) 3
redis> LRANGE greet 0 2
1) "hello"
2) "hello"
3) "morning"
redis> LREM greet -1 morning # 移除从表尾到表头,第一个 morning
(integer) 1
redis> LLEN greet # 剩下两个元素
(integer) 2
redis> LRANGE greet 0 1
1) "hello"
2) "hello"
redis> LREM greet 0 hello # 移除表中所有 hello
(integer) 2 # 两个 hello 被移除
redis> LLEN greet
(integer) 0
6 获得/指定索引的元素值
lindex key index
lset key index value
7 保留指定列表片段:ltrim
redis> LRANGE alpha 0 -1 # alpha 是一个包含 5 个字符串的列表
1) "h"
2) "e"
3) "l"
4) "l"
5) "o"
redis> LTRIM alpha 1 -1 # 删除 alpha 列表索引为 0 的元素
OK
redis> LRANGE alpha 0 -1 # "h" 被删除了
1) "e"
2) "l"
3) "l"
4) "o"
五 集合类型
集合类型是无顺序、唯一的、列表类型是有序不唯一。有序指的是index有序。
1 增加/删除。SADD/SREM.
# 添加单个元素
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"
2 获得集合所有元素.SMEMBERS key。
# key 不存在或集合为空
redis> EXISTS not_exists_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"
获得元素个数SCARD
redis> SADD tool pc printer phone
(integer) 3
redis> SCARD tool # 非空集合
(integer) 3
redis> DEL tool
(integer) 1
redis> SCARD tool # 空集合
(integer) 0
3 判断元素是否在集合中。SISMEMBER key member
4 集合间运算;SDIFF、SINTER(交集)、SUNION(并集)
5 从集合中弹出元素SPOP
六 有序集合类型(key- value类型)
1 与列表对比:
(1 )列表是通过链表实现的获取靠近两端的数据速度极快,当元素增多之后,访问中间元素会变慢。更适合"新鲜事"或者日志,这样很少访问中间元素的
(2)有序集合通过散列表和跳跃表实现的,所以即使读取位于中间的元素也很快(logN)
(3)列表中不能简单调整元素的位置,有序集合可以(通过更改这个元素的分数)
(4)有序集合比列表更耗内存。
2 增加元素Zadd key score member.
# 添加单个元素
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"
3 获得元素的分数。zscore key member
4 获得排名在某个范围的元素列表。
5获得分数在某个范围中的元素
6 增加某个元素的分数
zincrby key increment member。
7 集合中数量。zcard key
8 获得指定分数范围内的元素个数
zcount key min max。
9 删除一个/多个元素 zrem key member。
10 按照排名范围删除元素 zremrangebyrank key start stop
11 按照分数范围删除元素:
移除有序集
key
中,所有
score
值介于
min
和
max
之间(包括等于
min
或
max
)的成员。
redis> ZRANGE salary 0 -1 WITHSCORES # 显示有序集内所有成员及其 score 值
1) "tom"
2) "2000"
3) "peter"
4) "3500"
5) "jack"
6) "5000"
redis> ZREMRANGEBYSCORE salary 1500 3500 # 移除所有薪水在 1500 到 3500 内的员工
(integer) 2
redis> ZRANGE salary 0 -1 WITHSCORES # 剩下的有序集成员
1) "jack"
2) "5000"
12 获得元素的排名。zrank/zrevrank
redis> GET db
(nil)
redis> SET db redis
OK