Redis教程之基础-五种数据基本操作
2017-01-15 22:46
696 查看
若要修改测试环境的redis数据,首先获得类型(五中类型字符串、散列、列表、集合、有序集合),
一、通用类型即对key的操作
1 获得键值的数据类型。返回none表示输入的键不存在,string表示字符串,hash 散列类型,list列表,set集合类型,zset(有序集合类型)
type 键名
比如:type name
2 获得所有的keys
keys *
比如:
3
exists 键名 判断一个键是否存在,存在则返回1,不存在返回0
4 删除键,成功返回1,失败返回0。
5命令类型:设置/获得(1个或者多个)、删除、自增、获得某个范围的值。
增删查找命令对比
二、字符串、整数
1 设置和获取字符串的值 set/get。
说明:set 设置的key若存在,则会覆盖。get获取的key不存在则会返回nil。
2 递增数字,incr(自增1) 和incrby(增加指定整数)
当数字不存在时,会直接回默认键值0,所以第一次递增后值是1
说明:若给一个字符串自增,则会返回
incrby
6 自减 decr(自减1)和decrby(自减指定整数)
7 尾部追加 append
8 获取字符串长度
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
3 判断是否存在;hexists
4 HSETNX,当不存在时赋值,若已存在则不执行任何操作。
5 增加数字:hincrby
6 删除:hdel
7只获取字段名/字段值:hkeys/hvals
四 列表类型命令
1 lpush/rpush,像列表左/右边增加元素。,返回列表长度。
2 lpop/rpop,从两端弹出元素。返回弹出的元素,若无,则返回nil。
3 获取队列中元素个数:llen
4 lrange 获得列表子集
5 删除列表中前count为value的值。lrem key count value
6 获得/指定索引的元素值
lindex key index
lset key index value
7 保留指定列表片段:ltrim
五 集合类型
集合类型是无顺序、唯一的、列表类型是有序不唯一。有序指的是index有序。
1 增加/删除。SADD/SREM.
2 获得集合所有元素.SMEMBERS key。
获得元素个数SCARD
3 判断元素是否在集合中。SISMEMBER key member
4 集合间运算;SDIFF、SINTER(交集)、SUNION(并集)
5 从集合中弹出元素SPOP
六 有序集合类型(key- value类型)
1 与列表对比:
(1 )列表是通过链表实现的获取靠近两端的数据速度极快,当元素增多之后,访问中间元素会变慢。更适合"新鲜事"或者日志,这样很少访问中间元素的
(2)有序集合通过散列表和跳跃表实现的,所以即使读取位于中间的元素也很快(logN)
(3)列表中不能简单调整元素的位置,有序集合可以(通过更改这个元素的分数)
(4)有序集合比列表更耗内存。
2 增加元素Zadd key score member.
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 )的成员。
12 获得元素的排名。zrank/zrevrank
一、通用类型即对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
相关文章推荐
- redis中的五种数据类型和基本操作
- redis实战基础篇:redis的5种数据类型的基本操作
- Redis 基础知识(5种数据类型基本操作)
- redis中的五种数据类型和基本操作
- Redis入门教程:特性及数据类型的操作
- SQLServer XML数据的五种基本操作
- hrbustoj 1545:基础数据结构——顺序表(2)(数据结构,顺序表的实现及基本操作,入门题)
- SQL Server 中对XML数据的五种基本操作【转】
- MySQL基础教程15 —— SQL语法之数据操作语句DML——DELETE语法
- SQL Server 中对XML数据的五种基本操作
- Redis基本数据类型和相关操作
- SQL Server 中对XML数据的五种基本操作
- Redis中五种数据类型简单操作
- python基础教程之基本数据类型和变量声明介绍
- redis 对支持的数据类型的基本操作
- redis基本数据类型操作之 list
- JMP数据表操作基础教程(中)
- JMP数据表操作基础教程(上)
- Redis入门教程:特性及数据类型的操作
- Redis入门教程:特性及数据类型的操作