赞
踩
MSET :批量添加多个String类型键值对
MGET:批量获取多个String类型键值对
-
- 127.0.0.1:6379> MSET k1 v1 k2 v2 k3 v3
- OK
- 127.0.0.1:6379> MGET k1 k2 k3
- 1) "v1"
- 2) "v2"
- 3) "v3"
- 127.0.0.1:6379>
INCR:让一个整型的key自增1
- 127.0.0.1:6379> set k4 18
- OK
- 127.0.0.1:6379> get k4
- "18"
- 127.0.0.1:6379> incr k4
- (integer) 19
- 127.0.0.1:6379> get k4
- "19"
- 127.0.0.1:6379> incr k4
- (integer) 20
- 127.0.0.1:6379> get k4
- "20"
- 127.0.0.1:6379>
INCRBY :指定整型的key自增,并且指定步长,也即增加多少
- 127.0.0.1:6379> get k4
- "20"
- 127.0.0.1:6379> INCRBY k4 3
- (integer) 23
- 127.0.0.1:6379> get k4
- "23"
指定步长为负数时,就自减了
- 127.0.0.1:6379> INCRBY k4 -3
- (integer) 20
专用自减命令:DECR
- 127.0.0.1:6379> DECR k4
- (integer) 19
-
- 127.0.0.1:6379> DECRBY k4 3
- (integer) 16
INCRBYFLOAT :指定浮点型的key自增,并且指定步长,也即增加多少
- 127.0.0.1:6379> set key 24.1
- OK
- 127.0.0.1:6379> INCRBYFLOAT key 0.5
- "24.6"
- 127.0.0.1:6379> get key
- "24.6"
SETNX :添加一个String类型的键值对,key必须不存在,存在了不执行
- 127.0.0.1:6379> SETNX k5 hello
- (integer) 1
- 127.0.0.1:6379> SETNX k4 hello
- (integer) 0
SETEX:是SET和EXPIRE的组合命令。
添加一个String类型的键值对,并且指定有效期
- 127.0.0.1:6379> SETEX k6 5 hellokey5
- OK
- 127.0.0.1:6379> TTL k6
- (integer) 2
- 127.0.0.1:6379> TTl k6
- (integer) -2
- 127.0.0.1:6379> TTL k6
- (integer) -2
Redis中没有表的概念 , 将key设置为多个层级结构,多个单词之间使用:隔开
一般格式:【项目名称】:【业务名称】:【类型】:【id】
例如:work:user:1 work:product:1
如果value是一个Java对象,可以将对象序列化为json字符串后存储
- {
- "id": 1,
- "username": "john_doe",
- "email": "john@example.com",
- "age": 30,
- "address": {
- "street": "123 Main Street",
- "city": "New York",
- "country": "USA"
- },
- "tags": ["java", "programming", "json"]
- }
可通过key获取json格式的value;避免了id相同的冲突
- 127.0.0.1:6379> set student:info:2 '{"id":2,"name":"李四","age":17,"gender":"女"}'
- 127.0.0.1:6379> set student:info:3 '{"id":3,"name":"王五","age":20,"gender":"男"}'
- OK
- 127.0.0.1:6379> get student:info:1
- "{\"id\":1,\"name\":\"\xe5\xbc\xa0\xe4\xb8\x89\",\"age\":18,\"gender\":\"\xe7\x94\xb7\"}"
- 127.0.0.1:6379> get student:info:2
- "{\"id\":2,\"name\":\"\xe6\x9d\x8e\xe5\x9b\x9b\",\"age\":17,\"gender\":\"\xe5\xa5\xb3\"}"
- 127.0.0.1:6379> get student:info:3
- "{\"id\":3,\"name\":\"\xe7\x8e\x8b\xe4\xba\x94\",\"age\":20,\"gender\":\"\xe7\x94\xb7\"}"
String存储字符串,单独对某个字段修改不方便
Hash结构可以将对象的每个字段单独存储,可针对单个字段CURD
常见命令:
HSET key field value:添加或修改hash类型的key的field的值
HGET key field:获取一个hash类型的key的field的值
- 127.0.0.1:6379> HSET hset1 f1 v1
- (integer) 1
- 127.0.0.1:6379> HGET hset1 f1
- "v1"
还可对field的值进行修改
- 127.0.0.1:6379> HSET hset1 f1 v1alter
- (integer) 0
- 127.0.0.1:6379> HGET hset1 f1
- "v1alter"
一个key的field可以有多个
- 127.0.0.1:6379> HSET hset1 f2 v2
- (integer) 1
- 127.0.0.1:6379> HSET hset1 f3 v3
- (integer) 1
- 127.0.0.1:6379> HGET hset1 f1
- "v1alter"
- 127.0.0.1:6379> HGET hset1 f2
- "v2"
- 127.0.0.1:6379> HGET hset1 f3
- "v3"
HMSET:可以存多组field-value
HMGET:可以获取多个field的值
- 127.0.0.1:6379> HMSET hset2 f1 v1 f2 v1 f3 v3
- OK
- 127.0.0.1:6379> HMGET hset2 f1 f2 f3
- 1) "v1"
- 2) "v1"
- 3) "v3"
HGETALL:获取一个Hash类型的key中所有的field和value
- 127.0.0.1:6379> HGETALL hset2
- 1) "f1"
- 2) "v1"
- 3) "f2"
- 4) "v1"
- 5) "f3"
- 6) "v3"
KEYS:获取一个hash类型的key的所有field
- 127.0.0.1:6379> HKEYS hset2
- 1) "f1"
- 2) "f2"
- 3) "f3"
HVALS:获取所有的值
- 127.0.0.1:6379> HVALS hset2
- 1) "v1"
- 2) "v1"
- 3) "v3"
HINCRBY:让一个hash类型的key的字段值自增并且指定步长
- 127.0.0.1:6379> HSET hset3 5 5
- (integer) 1
- 127.0.0.1:6379> HINCRBY hset3 5 2
- (integer) 7
- 127.0.0.1:6379> hvals hset3
- 1) "7"
HSETNX:添加一个hash类型的key的field值,前提是field不存在,否则不执行
- 127.0.0.1:6379> HSETNX hset3 7 5
- (integer) 1
- 127.0.0.1:6379> HSETNX hset3 7 5
- (integer) 0
- 127.0.0.1:6379> hget hset3 7
- "5"
Redis中的list类型与Java中的LinkedList类似,可看作是双向链表结构,既可以支持正向检索,也支持反向检索
特征:有序、元素可重复插入、插入删除快、查询速度一般
LPUSH key element...:向列表左侧插入一个或多个元素
LPOP key:移除并返回列表左侧的第一个元素,没有则返回nil
PHUSH key element...:向列表右侧插入一个或多个元素
RPOP key:移除并返回列表右侧的第一个元素
LRANGE key star end:返回一段角标范围内的所有元素
BLPOP和BRPOP:与LPOP和RPOP相似,只不过在没有元素时指定等待时间,不直接返回nil
- 127.0.0.1:6379> LPUSH list1 hello world
- (integer) 2
- 127.0.0.1:6379> LPUSH list1 zhangsan lisi wangwu
- (integer) 5
-
- wangwu->lisi->zhangsan->world->hello
-
- 127.0.0.1:6379> LPOP list1
- "wangwu"
- 127.0.0.1:6379> RPUSH list1 zhaoliu
- (integer) 5
-
- lisi->zhangsan->world->hello->zhaoliu
- 127.0.0.1:6379> RPOP list1
- "zhaoliu"
-
- lisi->zhangsan->world->hello
- 127.0.0.1:6379> LRANGE list1 1 3
- 1) "zhangsan"
- 2) "world"
- 3) "hello"
-
- 127.0.0.1:6379> LPUSH list2 lisi
- (integer) 1
- 127.0.0.1:6379> Lpop list2
- "lisi"
-
- 出队列,指定时间,如果不存在,就会阻塞
- 127.0.0.1:6379> BLPop list2 3
- (nil)
- (3.08s)
模拟栈:入口出口在一起;先进后出(LPUSH+LPOP)
模拟队列:入口出口不在一起;先进先出(LPUSH+RPOP)
阻塞队列:满足队列(入口出口不在一起;先进先出)满足阻塞(出队列采用B L/R POP)
与hashset相似,可以看作是value为null的hashmap,因为也是一个hash表,具备hashset的特征
无序、元素不可重复、查找快、支持交集、并集、差集等功能
SADD key member...:添加一个或多个元素
SREM key member:移除set指定的元素
SCARD key:返回set中的元素个数
SISMEMBER key member:判断一个元素是否在set中
SMEMBERS:获取set中的所有元素
SINTER key1 key2:求两个key的交集
SDIFF key1 key2:求差集(a中有的,b没有,这个元素就是a和b的差,多个差就是差集)
SUNION key1 key2:求并集,相同的元素只出现一次
- 127.0.0.1:6379> SADD set1 v1 v2 v3 v4 v5
- (integer) 5
- 127.0.0.1:6379> SREM set1 v1
- (integer) 1
- 127.0.0.1:6379> SCARD set1
- (integer) 4
- 127.0.0.1:6379> SISMEMBER set1 v1
- (integer) 0
- 127.0.0.1:6379> SISMEMBER set1 v2
- (integer) 1
- 127.0.0.1:6379> SMEMBERS set1
- 1) "v3"
- 2) "v5"
- 3) "v2"
- 4) "v4"
- //结果体现了set是无序的
-
- //求交集
- 127.0.0.1:6379> SADD set2 v1 v2 v3 v4
- (integer) 4
- 127.0.0.1:6379> SINTER set1 set2
- 1) "v3"
- 2) "v2"
- 3) "v4"
- //求差集
- 127.0.0.1:6379> SDIFF set1 set2
- 1) "v5"
- //求并集
- 127.0.0.1:6379> SUNION set1 set2
- 1) "v4"
- 2) "v3"
- 3) "v1"
- 4) "v5"
- 5) "v2"
-
是一个可排序的set集合,与Java的treeset类似。SortedSet中每个元素带有一个score属性,基于这个属性可以进行元素排序
可排序、元素不重复、查询速度快,可实现排行榜类似的功能
常用命令:
ZADD key score member:添加一个或多个元素到sortedset,如果存在则更新score值
ZREM key member :删除指定的元素
SCORE key member:获取指定元素的score值
ZRANK key member:获取指定元素的排名
ZCARD key: 获取元素个数
ZCOUNT key min max:统计score值在给定范围内的所有元素个数
ZINCRBY key increment member:让指定元素自增,步长为increment
ZRANGE key min max:按照score排序后,获取指定排名范围内的的元素
ZRANGEBYSCORE key min max :按照score排序后,获取指定范围的元素
ZDIFF:求差集 ZINTER:求交集、ZUNION :求并集
- //插入student
- 127.0.0.1:6379> ZADD student 90 zs 80 li 87 ww 67 zl
- (integer) 4
- //移除zl
- 127.0.0.1:6379> ZREM student zl
- (integer) 1
- //查看score值
- 127.0.0.1:6379> ZSCORE student zs
- "90"
- 127.0.0.1:6379> ZSCORE student li
- "80"
- 127.0.0.1:6379> ZSCORE student ww
- "87"
- //获取指定元素排名
- 127.0.0.1:6379> ZRANk student li
- (integer) 0
- 127.0.0.1:6379> ZRANK student ww
- (integer) 1
- 127.0.0.1:6379> ZRANK student zs
- (integer) 2
- //查询总共有多少元素
- 127.0.0.1:6379> ZCARD student
- (integer) 3
- //查询指定范围的score有多少元素
- 127.0.0.1:6379> ZCOUNT student 80 98
- (integer) 3
- //指定元素为zs。自增步长为10。从90变为100
- 127.0.0.1:6379> ZINCRBY student 10 zs
- "100"
- //根据score排名后,在指定范围获取元素
- 127.0.0.1:6379> ZRANGE student 0 2
- 1) "li"
- 2) "ww"
- 3) "zs"
- 127.0.0.1:6379> ZRANGE student 0 1
- 1) "li"
- 2) "ww"
- 127.0.0.1:6379> ZRANGE student 0 0
- 1) "li"
- //根据score排名后,指定score范围获取元素
- 127.0.0.1:6379> ZRANGEBYSCORE student 80 110
- 1) "li"
- 2) "ww"
- 3) "zs"
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。