Redis青铜修炼手册(一) — NoSQL&&Redis介绍
前面提到Redis支持五中数据类型。String、List、Hash、Set、Zset。本文主要介绍操作这五种数据类型的一些命令,以及其他常用命令
需要说明的是,Redis中,键的数据类型必须是字符串
String- set key value [EX seconds] [PX milliseconds] [NX|XX]
如果key不存在,创建value,如果key存在则value覆盖旧值
127.0.0.1:6379> set hello world OK 127.0.0.1:6379> get hello "world"EX:设置key的过期时间,单位秒。等同于setex key
通过ttl查看还有多少秒过期,返回-1 表示永不过期。-2 表示已过期。
127.0.0.1:6379> set hello world ex 5 OK 127.0.0.1:6379> get hello "world" // 通过ttl查看剩余失效时间,单位秒。 127.0.0.1:6379> ttl hello (integer) 1 // 等同于 127.0.0.1:6379> setex hello 5 world OK 127.0.0.1:6379> get hello "world"PX:设置key的过期时间,单位毫。等同于psetex key milliseconds value 进行保存
127.0.0.1:6379> set hello world px 5000 OK 127.0.0.1:6379> get hello "world" // 等同于 127.0.0.1:6379> psetex hello 5000 world OK 127.0.0.1:6379> get hello "world" //查看剩余失效毫秒数 127.0.0.1:6379> pttl hello (integer) 2516NX(not exist):只有再key不存在时,才可以设置key的值,
等同于setnx key value
XX:只有key存在时,才可以设置key的值// 因为键hello,已经存在,所以通过nx设置值 wrold1无效 127.0.0.1:6379> set hello world1 nx (nil) 127.0.0.1:6379> get hello "world" //因为键hello存在 所以通过xx设置值world1 成功 127.0.0.1:6379> set hello world1 xx OK 127.0.0.1:6379> get hello "world1"
- GETSET key value
插入新值,返回旧值,如果该key之前不存在,返回nil
# key1 插入值value1 ,因为key1之前不存在所以返回nil 127.0.0.1:6379> GETSET key1 value1 (nil) 127.0.0.1:6379> GETSET key1 value2 "value1"
- STRLEN key 返回键对应的值的长度,key不存在的时候返回0 且 只适用于value是字符串的时候。
127.0.0.1:6379> set len abcd OK 127.0.0.1:6379> STRLEN len (integer) 4
- GETRANGE key start end
获取指定区间范围内的值,闭区间
127.0.0.1:6379> set key abc123 OK // 从0 开始 到末尾结束 127.0.0.1:6379> GETRANGE key 0 -1 "abc123" // 从0 开始 第二个元素结束。 127.0.0.1:6379> GETRANGE key 0 2 "abc"
- SETRANGE key offset value
设置指定区间范围内的值,替换对应长度的字符
127.0.0.1:6379> get key "abc123" // 从第一个元素开始一次替换成kkk 127.0.0.1:6379> SETRANGE key 1 kkk (integer) 6 127.0.0.1:6379> get key "akkk23"
- MSET key value [key value …]
- MGET key [key …]
设置、获取多个key、v
127.0.0.1:6379> mset key1 a key2 b OK 127.0.0.1:6379> MGET key1 key2 1) "a" 2) "b"
- APPEND key value
在key的值后面追加value,如果key不存在,赋值value给key。返回值的长度
127.0.0.1:6379> get append (nil) 127.0.0.1:6379> APPEND append hello (integer) 5 127.0.0.1:6379> get append "hello" 127.0.0.1:6379> APPEND append world (integer) 10 127.0.0.1:6379> get append "helloworld"
- INCR key
如果值为数字,则+1,返回+1 之后的结果。
如果key不存在,则默认为0,然后+1。
如果值不是数字,则返回错误
- DECR key
和INCR唯一的区别就是 -1
计数器场景中常用。
127.0.0.1:6379> get num (nil) 127.0.0.1:6379> incr num (integer) 1 127.0.0.1:6379> incr num (integer) 2 127.0.0.1:6379> set num1 10 OK 127.0.0.1:6379> incr num (integer) 3
127.0.0.1:6379> DECR decrnum (integer) -1 127.0.0.1:6379> set decrnum 10 OK 127.0.0.1:6379> decr decrnum (integer) 9 127.0.0.1:6379> decr decrnum (integer) 8
- INCRBY key increment
为key增加一定的值,increment为增量
同理 DECRBY key decrement,为key减少一定的量
INCRBY key increment 为key增加一定的值,increment为增量 同理 DECRBY key decrement,为key减少一定的量
- DEL key [key …] 删除key
127.0.0.1:6379> set key1 abc OK 127.0.0.1:6379> set key2 def OK 127.0.0.1:6379> del key1 key2 (integer) 2 127.0.0.1:6379> get key1 (nil) // 判断key2 是否存在,不存在返回0 127.0.0.1:6379> EXISTS key2 (integer) 0HASH
hash是一个键值对集合。是一个string类型的field和value的映射表。hash可以看做是java中的map
- HSET key field value
这里的field、value就是字典中的k,v
===>> HSET key value(key value)
插入一条student对象 name。 为codeMan的数据。
创建field成功则返回1.否则返回0
127.0.0.1:6379> HSET student name codeMan (integer) 1 127.0.0.1:6379> HGET student name "codeMan" 127.0.0.1:6379> HSET student name codeGirl (integer) 0 127.0.0.1:6379> HGET student name "codeGirl"
- HSETNX key field value 只有当field不存在时,才会生效。
127.0.0.1:6379> HSET student age 13 (integer) 1 // key:student 中的field(age) 已存在,所以返回0 127.0.0.1:6379> HSETNX student age 13 (integer) 0 // 通过HDEL删除field 127.0.0.1:6379> HDEL student age (integer) 1 // field 不存在 返回1 127.0.0.1:6379> HSETNX student age 13 (integer) 1 127.0.0.1:6379> HGET student age "13" // HEXISTS查看是否存在 field 。如果存在返回1.不存在返回0 127.0.0.1:6379> HEXISTS student age (integer) 1
- HLEN key 查看key的长度,元素个数
// 返回2 分别是name 和age 两个field 127.0.0.1:6379> HLEN student (integer) 2 // 通过hkeys 查看key中的field 127.0.0.1:6379> HKEYS student 1) "name" 2) "age"
- HSTRLEN key field 查看field的长度
127.0.0.1:6379> HGET student name "codeGirl" 127.0.0.1:6379> HSTRLEN student name (integer) 8
- HINCRBY key field increment 对field 增加increment。field对应的值必须为数字
127.0.0.1:6379> HGET student age "13" 127.0.0.1:6379> HINCRBY student age 5 (integer) 18 127.0.0.1:6379> HGET student age "18"
- HMGET key field [field …] 查看多个field的值
- HMSET key field value [field value …] 对一个key设置多个field 和value
如果field已存在则进行修改,不存在则创建
127.0.0.1:6379> HMGET student name age 1) "codeGirl" 2) "18" 127.0.0.1:6379> HMSET student sex girl name codeMM age 23 OK 127.0.0.1:6379> HMGET student name age sex 1) "code" 2) "23" 3) "girl" // hvals 返回所有field的值 127.0.0.1:6379> HVALS student 1) "code" 2) "23" 3) "girl" // 先返回所有field,再返回对应的值 127.0.0.1:6379> HGETALL student 1) "name" 2) "code" 3) "age" 4) "23" 5) "sex" 6) "girl"
LIST
用于存放列表,单值多value
- LPUSH key value [value …] 依次向元素的左边插入value(LPUSH left push),正进反出
- RPUSH key value [value …] 依次向元素的右边插入value ,正进正出
- LRANGE key start stop 取出范围内的元素
向key中插入一个列表。列表顺序与插入顺序一致。返回插入的元素个数
127.0.0.1:6379> lpush code python java golang ruby (integer) 4 127.0.0.1:6379> rpush code1 python java golang ruby (integer) 4 127.0.0.1:6379> LRANGE code 0 -1 1) "ruby" 2) "golang" 3) "java" 4) "python" 127.0.0.1:6379> LRANGE code1 0 -2 1) "python" 2) "java" 3) "golang"
- LPOP key 移除左边第一个元素
- RPOP key 移除右边第一个元素
127.0.0.1:6379> LRANGE code 0 -1 1) "ruby" 2) "golang" 3) "java" 4) "python" 127.0.0.1:6379> lpop code "ruby" 127.0.0.1:6379> rpop code "python" // z再次查看已经被移除 127.0.0.1:6379> LRANGE code 0 -1 1) "golang" 2) "java"
- LINDEX key index 查看第index个元素
//查看第二个元素 127.0.0.1:6379> LINDEX code 1 "java" 127.0.0.1:6379> LINDEX code 0 "golang"
- LREM key count value 删除count个 value
- LTRIM key start stop 截取从start开始 stop结尾的元素,重新赋值给key
// 存储abbbbc 127.0.0.1:6379> lpush word a b b b b c (integer) 6 127.0.0.1:6379> LRANGE word 0 -1 1) "c" 2) "b" 3) "b" 4) "b" 5) "b" 6) "a" // 删除3个b元素 127.0.0.1:6379> LREM word 3 b (integer) 3 127.0.0.1:6379> LRANGE word 0 -1 1) "c" 2) "b" 3) "a" // 截取0 到1个元素 重新赋值给word 127.0.0.1:6379> LTRIM word 0 1 OK 127.0.0.1:6379> LRANGE word 0 -1 1) "c" 2) "b"
- RPOPLPUSH source destination 从source中取出最右边的元素,并返回。放到destination的头部
127.0.0.1:6379> LRANGE word 0 -1 1) "c" 2) "b" 127.0.0.1:6379> LRANGE word1 0 -1 1) "q" 2) "p" 3) "o" // 返回word最右边的元素 127.0.0.1:6379> RPOPLPUSH word word1 "b" 127.0.0.1:6379> LRANGE word1 0 -1 1) "b" 2) "q" 3) "p" 4) "o"
- LINSERT key BEFORE|AFTER pivot value 在最左边的pivot的前面(befor)或者后面(after) 插入value。如果pivot不存在,返回-1 不执行任何操作。
127.0.0.1:6379> LRANGE word 0 -1 1) "c" // 在c的左边添加a 127.0.0.1:6379> LINSERT word before c a (integer) 2 127.0.0.1:6379> LRANGE word 0 -1 1) "a" 2) "c"
SET
- SADD key member [member …]
像key中添加一个或多个 member。有重复元素 自动跳过。最终返回的是实际元素的个数
- SMEMBERS key 查看元素的内容
127.0.0.1:6379> SADD set a a b (integer) 2 // 实际元素为b a 127.0.0.1:6379> SMEMBERS set 1) "b" 2) "a"
- SISMEMBER key member 查看member 是否是key中的成员.
是返回1, 不是返回0
127.0.0.1:6379> SISMEMBER set a (integer) 1 127.0.0.1:6379> SISMEMBER set c (integer) 0
- SPOP key [count] 返回key中的一个元素,并将其从set中移除
- SRANDMEMBER key [count] 随机返回count个元素,不将其移除
127.0.0.1:6379> SMEMBERS set 1) "b" 2) "a" 127.0.0.1:6379> SRANDMEMBER set "b" 127.0.0.1:6379> SMEMBERS set 1) "b" 2) "a" 127.0.0.1:6379> SPOP set "b" 127.0.0.1:6379> SMEMBERS set 1) "a"
- SREM key member [member …]
移除集合中一个或多个元素.返回移除元素的个数。
127.0.0.1:6379> SADD code java python c (integer) 3 127.0.0.1:6379> SREM code java c (integer) 2 127.0.0.1:6379> SMEMBERS code 1) "python"
- SMOVE source destination member
将source中的member元素移动到destination
如果source总不存在member 则不执行任何操作
如果destination 已经存在member,则只是从source中移除member元素。destination 保持不变
127.0.0.1:6379> SADD word1 a b c d (integer) 4 127.0.0.1:6379> SADD word2 j k l (integer) 3 127.0.0.1:6379> SMOVE word1 word2 a (integer) 1 127.0.0.1:6379> SMEMBERS word2 1) "a" 2) "l" 3) "k" 4) "j" 127.0.0.1:6379> SMOVE word1 word2 u (integer) 0 // scard key 返回元素个数 127.0.0.1:6379> SCARD word2 (integer) 4
- SINTER key [key …]
一个key时,返回key的内容
多个key时,返回他们的交集
127.0.0.1:6379> SADD group1 a b c (integer) 3 127.0.0.1:6379> SADD group2 c f g (integer) 3 127.0.0.1:6379> SINTER group1 1) "c" 2) "b" 3) "a" 127.0.0.1:6379> SINTER group1 group2 1) "c"
ZSET
- ZADD key [NX|XX] [CH] [INCR] score member [score member …]
- ZRANGE key start stop [WITHSCORES] 通过start,stop查看元素
将member及其score(排序分数)插入到有序列表中,如果已经存在member则更新其score。并重新调整其位置
127.0.0.1:6379> ZADD net 1 google.cn 2 biying.com 3 baidu.com (integer) 3 127.0.0.1:6379> ZRANGE net 0 -1 1) "google.cn" 2) "biying.com" 3) "baidu.com"
- ZSCORE key member 查看key中member元素的分数
- ZCOUNT key min max 返回有序集 key 中, score 值在 min 和 max 之间(默认包括 score 值等于 min 或 max )的成员的数量。
- ZRANGE key start stop [WITHSCORES] 返回key中从start开始stop结尾的元素
- ZREVRANGE key start stop [WITHSCORES] 返回key中分苏在start到stop区间的元素
- ZREM key member [member …] 移除一个或多个member
127.0.0.1:6379> ZSCORE net google.cn "1" 127.0.0.1:6379> 127.0.0.1:6379> ZCOUNT net 0 2 (integer) 2 127.0.0.1:6379> ZRANGE net 0 2 1) "google.cn" 2) "biying.com" 3) "baidu.com" 127.0.0.1:6379> ZRANGE net 0 1 1) "google.cn" 2) "biying.com" 127.0.0.1:6379> ZREVRANGE net 0 1 1) "baidu.com" 2) "biying.com" 127.0.0.1:6379> ZREVRANGE net 0 -1 1) "baidu.com" 2) "biying.com" 3) "google.cn"
欢迎关注公众号"程序员共成长", 公众号内回复【获取资源】领取程序员专属礼包!!!



