Jedis客户端
1. 命令
1.1 String类型
1.1.1 常见命令
- SET命令
语法:SET key value [EX seconds | PX milliseconds] [NX|XX]
说明:将string类型的value值设置到指定key中,如果之前该key存在,则会覆盖原先的值,原先数据类型以及TTL时长将会重置
时间复杂度:O(1)
选项:
- EX:设置键的过期时间,以秒为单位
- PX:设置键的过期时间,以毫秒为单位
- NX:只有键存在时才进行设置,不存在则不设置
- XX:只有键不存在时才进行设置,存在则不设置
返回值:
- 如果设置成功,则返回OK
- 如果一些选项参数例如NX、XX,条件不满足则不设置并返回nil
127.0.0.1:6379> keys *
(empty array)
127.0.0.1:6379> set k1 hello
OK
127.0.0.1:6379> get k1
"hello"
127.0.0.1:6379> set k2 world EX 20
OK
127.0.0.1:6379> TTL k2
(integer) 15
127.0.0.1:6379> set k3 value3 PX 20000
OK
127.0.0.1:6379> TTL k3
(integer) 15
127.0.0.1:6379> set k1 hello2 NX
(nil)
127.0.0.1:6379> get k1
"hello"
127.0.0.1:6379> set k5 value5 XX
(nil)
127.0.0.1:6379> get k5
(nil)
127.0.0.1:6379> set k1 hello2 XX
OK
127.0.0.1:6379> get k1
"hello2"
- GET命令
语法:GET key
说明:返回指定key对应的value,如果key不存在则返回nil,如果key对应的value的不为string类型则报错
时间复杂度:O(1)
返回值:
- 如果key存在并且value为string类型则返回value值,如果不为string类型则报错
- 如果key不存在则返回nil
127.0.0.1:6379> SET k1 v1
OK
127.0.0.1:6379> GET k1
"v1"
127.0.0.1:6379> GET k2
(nil)
127.0.0.1:6379> LPUSH k3 11 22 33
(integer) 3
127.0.0.1:6379> get k3
(error) WRONGTYPE Operation against a key holding the wrong kind of value
- MGET命令
语法:MGET key [key...]
说明:一次性获取多个key对应的value,如果value不为string类型或者key不存在则返回nil
时间复杂度:O(K),K为key的个数
返回值:对应value的列表
127.0.0.1:6379> SET k1 v1
OK
127.0.0.1:6379> SET k2 v2
OK
127.0.0.1:6379> LPUSH k3 11 22 33
(integer) 3
127.0.0.1:6379> MGET k1 k2
1) "v1"
2) "v2"
127.0.0.1:6379> MGET k1 k2 k3
1) "v1"
2) "v2"
3) (nil)
127.0.0.1:6379> MGET k1 k2 k4
1) "v1"
2) "v2"
3) (nil)
- MSET命令
语法:MSET key value [key value...]
说明:一次性设置多个key值
时间复杂度:O(K),K为key的个数
返回值:永远为OK
127.0.0.1:6379> flushall
OK
127.0.0.1:6379> keys *
(empty array)
127.0.0.1:6379> MSET k1 v1 k2 v2
OK
为什么已经存在SET、GET命令还是需要MSET、MGET命令呢?这是因为Redis是一个客户端-服务器程序,需要经过网络通信跨主机传输数据,一次性批量传输数据效率大于多次网络通信传输效率!!!
1.1.2 计数命令
- INCR命令
语法:INCR key
说明:给key的整型value值+1,如果key不存在则默认初始值为0,如果不是int类型或者数值范围超过64位有符号整型则报错
时间复杂度:O(1)
返回值:
- 返回integer类型的加完后的数值
127.0.0.1:6379> keys *
(empty array)
127.0.0.1:6379> set k1 10
OK
127.0.0.1:6379> INCR k1
(integer) 11
127.0.0.1:6379> INCR k2
(integer) 1
127.0.0.1:6379> GET k2
"1"
127.0.0.1:6379> set k2 abab
OK
1.2 List类型
List类型就类似于Java当中的顺序表以及链表,更准确的来说是一个"Deque"双端队列,可以快速对其两端元素进行操作,其数据结构大致表示如下:
List类型的特点如下:
- 元素顺序有序(元素的摆放位置是十分重要的)
- 元素可以重复
- 元素下标可以为负数,下标为i的位置也可以使用i - len进行表示
1.2.1 常用命令
- LPUSH命令:
语法格式:LPUSH key element [element...]
说明:向某个key左端插入一个或多个元素
时间复杂度:O(K),K为插入的元素个数
返回值:插入后list的长度
127.0.0.1:6379> keys *
(empty array)
127.0.0.1:6379> LPUSH k1 11 22 33
(integer) 3
127.0.0.1:6379> LRANGE k1 0 -1
1) "33"
2) "22"
3) "11"
- LPUSHX命令:
语法格式:LPUSHX key element [element...]
说明:向某个key左端插入一个或者多个元素(要求key必须存在)
时间复杂度:O(K),K为插入的元素个数
返回值:插入后list的长度
127.0.0.1:6379> keys *
1) "k1"
127.0.0.1:6379> LPUSHX k1 44
(integer) 4
127.0.0.1:6379> LRANGE k1 0 -1
1) "44"
2) "33"
3) "22"
4) "11"
127.0.0.1:6379> LPUSHX k2 33 22 11
(integer) 0
127.0.0.1:6379> keys *
1) "k1"
- RPUSH命令:
语法格式:RPUSH key element [element...]
说明:向某个key右端插入一个或者多个元素
时间复杂度:O(K),K为插入的元素个数
返回值:插入后list的长度
127.0.0.1:6379> keys *
(empty array)
127.0.0.1:6379> RPUSH k1 11 22 33
(integer) 3
127.0.0.1:6379> LRANGE k1 0 -1
1) "11"
2) "22"
3) "33"
- RPUSHX命令:
语法格式:RPUSHX key element [element...]
说明:向某个key右端插入一个或者多个元素(要求key必须存在)
时间复杂度:O(K),K为插入的元素个数
返回值:插入后list的长度
127.0.0.1:6379> keys *
1) "k1"
127.0.0.1:6379> LRANGE k1 0 -1
1) "11"
2) "22"
3) "33"
127.0.0.1:6379> RPUSHX k1 44 55 66
(integer) 6
127.0.0.1:6379> LRANGE k1 0 -1
1) "11"
2) "22"
3) "33"
4) "44"
5) "55"
6) "66"
127.0.0.1:6379> RPUSHX k2 11 22 33
(integer) 0
127.0.0.1:6379> KEYS *
1) "k1"
- LRANGE命令:
语法格式:LRANGE key start end
说明:获取区间[start, end]内的元素,区间左闭右闭,支持负数下标
时间复杂度:O(N)
返回值:区间[start, end]内的元素列表
127.0.0.1:6379> keys *
(empty array)
127.0.0.1:6379> LPUSH k1 11 22 33
(integer) 3
127.0.0.1:6379> LRANGE k1 0 2
1) "33"
2) "22"
3) "11"
127.0.0.1:6379> LRANGE k1 0 -1
1) "33"
2) "22"
3) "11"
- LPOP命令:
语法格式:LPOP key [count]
说明:从list的左端取出元素(即头删)无元素则返回nil,若指定count则删除count个元素
时间复杂度:O(count)
返回值:元素值或者nil
127.0.0.1:6379> keys *
1) "k1"
127.0.0.1:6379> LRANGE k1 0 -1
1) "33"
2) "22"
3) "11"
127.0.0.1:6379> LPOP k1
"33"
127.0.0.1:6379> LRANGE k1 0 -1
1) "22"
2) "11"
127.0.0.1:6379> LPOP k1 2
1) "22"
2) "11"
127.0.0.1:6379> LRANGE k1 0 -1
(empty array)
127.0.0.1:6379> LPOP k1
(nil)
- RPOP命令:
语法格式:RPOP key [count]
说明:从list的右端取出元素(即尾删)无元素则返回nil,若指定count则删除count个元素
时间复杂度:O(count)
返回值:元素值或者nil
127.0.0.1:6379> keys *
(empty array)
127.0.0.1:6379> RPUSH k1 11 22 33
(integer) 3
127.0.0.1:6379> LRANGE k1 0 -1
1) "11"
2) "22"
3) "33"
127.0.0.1:6379> RPOP k1
"33"
127.0.0.1:6379> LRANGE k1 0 -1
1) "11"
2) "22"
127.0.0.1:6379> RPOP k1 2
1) "22"
2) "11"
127.0.0.1:6379> LRANGE k1 0 -1
(empty array)
127.0.0.1:6379> RPOP k1
(nil)
- LINDEX命令:
语法格式:LINDEX key index
说明:返回list下标位置为index的元素(不删除),如果位置不合法就返回nil
时间复杂度:O(N)
返回值:元素值或者nil
127.0.0.1:6379> keys *
(empty array)
127.0.0.1:6379> RPUSH k1 11 22 33
(integer) 3
127.0.0.1:6379> LRANGE k1 0 -1
1) "11"
2) "22"
3) "33"
127.0.0.1:6379> LINDEX k1 0
"11"
127.0.0.1:6379> LINDEX k1 -1
"33"
127.0.0.1:6379> LINDEX k1 10
(nil)
- LINSERT命令:
语法格式:LINSERT key <BRFORE | AFTER> pivot element
说明:向某个指定元素(pivot)前或者后插入元素element,如果有多个pivot则选择从左往右的第一个
时间复杂度:O(N)
返回值:插入后的list长度
127.0.0.1:6379> keys *
1) "k1"
127.0.0.1:6379> LRANGE k1 0 -1
1) "11"
2) "22"
3) "33"
127.0.0.1:6379> LINSERT k1 AFTER 22 11
(integer) 4
127.0.0.1:6379> LRANGE k1 0 -1
1) "11"
2) "22"
3) "11"
4) "33"
127.0.0.1:6379> LINSERT k1 before 11 100
(integer) 5
127.0.0.1:6379> LRANGE k1 0 -1
1) "100"
2) "11"
3) "22"
4) "11"
5) "33"
- LLEN命令:
语法格式:LLEN key
说明:返回某个list的长度
时间复杂度:O(1)
返回值:长度
127.0.0.1:6379> RPUSH k1 11 22 33 44
(integer) 4
127.0.0.1:6379> LRANGE k1 0 -1
1) "11"
2) "22"
3) "33"
4) "44"
127.0.0.1:6379> LLEN k1
(integer) 4
- LREM命令:
语法格式:LREM key count element
说明:
- 如果count = 0那么就删除全部的element
- 如果count < 0则从左往右删除count个element
- 如果count > 0则从右往左删除count个element
时间复杂度:O(N)
返回值:删除元素的个数
127.0.0.1:6379> keys *
(empty array)
127.0.0.1:6379> RPUSH k1 11 22 33 11 22 33 22
(integer) 7
127.0.0.1:6379> LRANGE k1 0 -1
1) "11"
2) "22"
3) "33"
4) "11"
5) "22"
6) "33"
7) "22"
127.0.0.1:6379> LREM k1 22 -2
(integer) 0
127.0.0.1:6379> LREM k1 -2 22
(integer) 2
127.0.0.1:6379> LRANGE k1 0 -1
1) "11"
2) "22"
3) "33"
4) "11"
5) "33"
127.0.0.1:6379> LREM k1 1 33
(integer) 1
127.0.0.1:6379> LRANGE k1 0 -1
1) "11"
2) "22"
3) "11"
4) "33"
127.0.0.1:6379> LREM k1 0 11
(integer) 2
127.0.0.1:6379> LRANGE k1 0 -1
1) "22"
2) "33"
1.3 Set类型
1.3.1 基本命令
- sadd命令:
语法格式:SADD key member [member...]
说明:向指定key的set中存储一个或多个元素,如果重复则忽略加入
时间复杂度:O(N),N为插入member元素的个数
返回值:插入成功的元素个数
127.0.0.1:6379> keys *
(empty array)
127.0.0.1:6379> SADD k1 11 22 33
(integer) 3
127.0.0.1:6379> SADD k1 11 44 55
(integer) 2
127.0.0.1:6379> SMEMBERS k1
1) "11"
2) "22"
3) "33"
4) "44"
5) "55"
- SMEMBERS命令:
语法格式:SMEMBERS key
说明:返回指定key的set中全部元素
时间复杂度:O(N),N为set内元素个数
返回值:set全部元素列表
127.0.0.1:6379> keys *
(empty array)
127.0.0.1:6379> SADD k1 1 2 3 4 5
(integer) 5
127.0.0.1:6379> SMEMBERS k1
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
- SISMEMBER命令:
语法格式:SISMEMBER key member
说明:判断member元素是否在key这个set内部
时间复杂度:O(1)
返回值:
- 1:表示member在set内部
- 0:表示member不在set内部
127.0.0.1:6379> keys *
1) "k1"
127.0.0.1:6379> TYPE k1
set
127.0.0.1:6379> SMEMBERS k1
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
127.0.0.1:6379> SISMEMBER k1 2
(integer) 1
127.0.0.1:6379> SISMENBER k1 100
(integer) 0
- SRANDMEMBER命令:
语法格式:SRANDMEMBER key [count]
说明:返回指定key的set中随机一个或多个元素,count默认为1,正数与负数的含义不一样
时间复杂度:O(1) / O(N),如果不设置count,则为O(1),否则取决于count
返回值:
- 当count为正数时,返回元素列表是不重复的,此时返回列表长度 = Math.min(SCARD, count),即当count >= SCARD时返回数据全集
- 当count为负数时,返回元素列表是可以重复的,此时返回 |count| 个随机元素组成的列表
127.0.0.1:6379> keys *
(empty array)
127.0.0.1:6379> SADD k1 1 2 3 4 5
(integer) 5
127.0.0.1:6379> SRANDMEMBER k1 2
1) "2"
2) "4"
127.0.0.1:6379> SRANDMEMBER k1 7
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
127.0.0.1:6379> SRANDMEMBER k1 -7
1) "4"
2) "3"
3) "3"
4) "4"
5) "1"
6) "3"
7) "5"
- SPOP命令:
语法格式:SPOP key [count]
说明:随机删除指定key的set中一个或多个元素并返回
时间复杂度:O(1) / O(count)
返回值:
- 如果key不存在则返回nil
- 如果不指定count则默认返回一个随机元素
- 如果指定count则返回多个随机元素组成的列表
127.0.0.1:6379> keys *
1) "k1"
127.0.0.1:6379> SMEMBERS k1
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
127.0.0.1:6379> SPOP k1
"3"
127.0.0.1:6379> SMEMBERS k1
1) "1"
2) "2"
3) "4"
4) "5"
127.0.0.1:6379> SPOP k1 3
1) "4"
2) "5"
3) "2"
127.0.0.1:6379> SMEMBERS k1
1) "1"
127.0.0.1:6379> SPOP k1
"1"
127.0.0.1:6379> SPOP k1
(nil)
- SCARD命令:
语法格式:SCARD key
说明:返回set内部存储的元素个数
时间复杂度:O(1)
返回值:set内部存储的元素个数
127.0.0.1:6379> keys *
(empty array)
127.0.0.1:6379> SADD k1 1 2 3 4 5
(integer) 5
127.0.0.1:6379> SCARD k1
(integer) 5
127.0.0.1:6379> SPOP k1 2
1) "1"
2) "4"
127.0.0.1:6379> SCARD k1
(integer) 3
127.0.0.1:6379> SPOP k1 4
1) "2"
2) "3"
3) "5"
127.0.0.1:6379> SCARD k1
(integer) 0
- SREM命令:
语法格式:SREM key member [member...]
说明:从set中删除一个或多个指定元素,如果元素在set中不存在则返回忽略
时间复杂度:O(N),N为删除元素的个数
返回值:删除成功的元素个数
127.0.0.1:6379> keys *
(empty array)
127.0.0.1:6379> SADD k1 1 2 3 4 5
(integer) 5
127.0.0.1:6379> SREM k1 1 2 3 6
(integer) 3
127.0.0.1:6379> SMEMBERS k1
1) "4"
2) "5"
- SMOVE命令:
语法格式:SMOVE source destination member
说明:将member从source移除并插入到destination中
时间复杂度:O(1)
返回值:
- 如果source中不存在则返回0
- 如果source中存在,就执行从source中删除并插入到desitination中,并返回1
127.0.0.1:6379> keys *
(empty array)
127.0.0.1:6379> SADD k1 1 2 3 4 5
(integer) 5
127.0.0.1:6379> SMEMBERS k1
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
127.0.0.1:6379> SADD k2 2 3 4 5 6
(integer) 5
127.0.0.1:6379> SMEMBERS k2
1) "2"
2) "3"
3) "4"
4) "5"
5) "6"
127.0.0.1:6379> SMOVE k1 k2 2
(integer) 1
127.0.0.1:6379> SMEMBERS k1
1) "1"
2) "3"
3) "4"
4) "5"
127.0.0.1:6379> SMEMBERS k2
1) "2"
2) "3"
3) "4"
4) "5"
5) "6"
1.3.2 集合间命令
- SINTER命令:
语法格式:SINTER key [key...]
说明:取出多个集合间的交集
时间复杂度:O(M * N),其中M是最小集合的长度,N是最大集合的长度
返回值:多个集合间交集组成的列表
127.0.0.1:6379> keys *
(empty array)
127.0.0.1:6379> SADD k1 1 2 3 4 5
(integer) 5
127.0.0.1:6379> SADD k2 4 5 6 7 8
相关文章
- 【Redis学习笔记05】Jedis客户端(中)
- redis 学习笔记(5)-Spring与Jedis的集成
- Dubbo入门到精通学习笔记(十五):Redis集群的安装(Redis3+CentOS)、Redis集群的高可用测试(含Jedis客户端的使用)、Redis集群的扩展测试
- scala 学习笔记(05) OOP(中)灵活的trait
- Redis客户端开发包:Jedis学习-入门
- Redis学习十一:Redis的Java客户端Jedis
- MVC学习笔记之:ASP.NET MVC的客户端验证-jQuery.validate验证结合Model验证中的实现
- MVC学习笔记之:ASP.NET MVC的客户端验证-jQuery.validate验证结合Model验证中的实现
- redis学习笔记——客户端
- jedis访问redis学习笔记