Redis常用命令

1.String类型

Redis常用命令_第1张图片

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": "[email protected]",
  "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\"}"

 2.Hash类型

String存储字符串,单独对某个字段修改不方便

Hash结构可以将对象的每个字段单独存储,可针对单个字段CURD

Redis常用命令_第2张图片

 常见命令:

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"

3.List命令

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)

4.Set类型 

与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"

5.SortedSet类型

是一个可排序的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"

你可能感兴趣的:(redis,redis,java,数据库)