Redis服务器在官网公开了使用的协议,叫做RESP。任何一个第三方都可以通过上述的协议,来实现出一个和redis服务器通信的客户端程序。
Java生态中,封装好了RESP协议,实现的redis客户端是有很多的,此处使用的是jedis(而且jedis提供的api和redis命令是高度一致的)。
目录
引入依赖
ssh端口转发
jedis通用命令
String类型
mset mget
getrange setrange
append
incr decr
Hash类型
hset hget
hexists
hdel
hkeys kvals
hmget hmset
List类型
lpush rpush lrange
lpop rpop
blpop
llen
Set类型
sadd smembers
sismember
scard
spop
sinter
sinterstore
Zset类型
zadd zrange
zcard
zrem
zscore
zrank
引入依赖
第一步就是在IDEA的xml文件中引入maven中的jedis依赖:
但是需要注意的是:在linux中,我们的linux云服务器把6379端口保护起来了,redis服务器使用的端口就是6379,也就是说我们访问不了在linux上的云服务器。
如果直接把6379端口开放,很容易就被入侵,于是就有了以下的几个办法:
- 直接让Java程序在linux上运行
- 配置ssh端口转发,把云服务器的redis端口映射到本地主机
我们重点讲第二种方式,ssh端口转发。
ssh端口转发
配置ssh端口转发,把云服务器的redis端口映射到本地主机,此时客户端的程序访问的127.0.0.1:8888,就相当于是访问linux服务器的6379端口
我们在此只进行简单的配置,后续就把云服务器的端口当成一个本地的端口使用即可。
连接完成以后,在自己电脑中可以使用netstat命令查看本地这里的8888端口有没有工作:
jedis通用命令
接下来会介绍一部分命令在代码中的操作,都是比较重要的命令~
在main中,使用Jedis客户端来创建一个连接池(JedisPool
),用于连接到Redis服务器。
JedisPool jedisPool = new JedisPool("tcp://127.0.0.1:8888");
String类型
mset mget
jedis的用法规则,和redis高度统一。此处我们使用List来接收jedis.mget返回的数组。
getrange setrange
append
incr decr
Hash类型
hset hget
要注意,此处的处理方式是先构造一个Map,把这个Map通过hset的方式存进去。
hexists
此处的hset是直接通过设置key、field、value的方式来添加元素的。
hdel
此处hdel是可以一次性删除多个元素。
HDEL
命令用于删除哈希表中的一个或多个字段(field),而不是直接删除值(value)。当一个字段被删除后,与该字段关联的值(value)也会随之被删除。
hkeys kvals
一个是获取所有的key,一个是获取所有的value。要注意这个操作十分危险,有可能造成卡顿。
hmget hmset
由于现在hset可以做到一次设置多个field和value,所以hmset几乎废弃了。
List类型
lpush rpush lrange
头插、尾插的结果正好相反。
lpop rpop
分别是从头删除和从尾删除,一次删除一个。
blpop
阻塞删除,当一有元素就立马执行删除。
llen
Set类型
sadd smembers
sismember
scard
获取集合中的元素个数。
spop
不写count参数的时候,随机删除一个元素
sinter
输出交集。
sinterstore
sinterstore是把输出放到额外的一个key中。
Zset类型
Zset是有序集合。
zadd zrange
zadd的用法比较复杂,添加元素的时候,既要添加元素又要添加分数。
zcard
获取有序集合的元素个数。
zrem
删除指定元素。
"Tuple"(元组)通常指的是一个不可变序列,它可以包含不同类型的元素,并且元素的顺序是固定的。
zscore
查询指定元素的分数。
zrank
查询元素的下标。
不难发现,jedis和redis使用几乎是一样的。这些使用方法都不需要去背,只需要在redis的网站进行查询就可以了。