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

Redis教程之基础-五种数据基本操作

2017-01-15 22:46 696 查看
若要修改测试环境的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 keyHSET key field valueLPUSH key value

RLPUSH key value
SADD key memberZADD key score member 
查询getHGET 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 keyhdel key fieldlpop/rpop

brpop(带阻塞)
SMOVE

SPOP
ZREM key member1 设置失效)
修改sethsetLSET 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  reds 常用命令