Java 操作 Redis
环境准备引入依赖创建 jedis 对象
操作 Key 相关 API操作 String 相关 API操作 List 相关 API操作 Set 的相关 API操作 ZSet 相关 API操作 Hash 相关 API
环境准备
引入依赖
<dependency>
<groupId>redis.clients
</groupId>
<artifactId>jedis
</artifactId>
<version>2.9.0
</version>
</dependency>
创建 jedis 对象
Centos 7 关闭防火墙:
systemctl stop firewalld.service
开启远程连接:详见 Redis入门之Redis安装、配置及常用指令
public class TestRedis {
public static void main(String
[] args
) {
Jedis jedis
= new Jedis("192.168.3.65", "6379");
jedis
.select(0);
jedis
.close();
}
}
操作 Key 相关 API
DEL 指令
语法 : DEL key [key ...]作用 : 删除给定的一个或多个 key,不存在的 key 会被忽略。可用版本: >= 1.0.0返回值: 被删除 key 的数量。
EXISTS 指令
语法: EXISTS key作用: 检查给定 key 是否存在。可用版本: >= 1.0.0返回值: 若 key 存在,返回1 ,否则返回0。
EXPIRE 指令
语法: EXPIRE key seconds作用: 为给定 key 设置生存时间(秒),当 key 过期时(生存时间为 0),它会被自动删除。可用版本: >= 1.0.0时间复杂度: O(1)返回值:设置成功返回 1 。
KEYS 指令
语法 : KEYS pattern作用 : 查找所有符合给定模式 pattern 的 key 。语法: KEYS *:匹配数据库中所有 key 。 KEYS h?llo:匹配 hello ,hallo 和 hxllo 等。 KEYS h*llo:匹配 hllo 和 heeeeello 等。 KEYS h[ae]llo: 匹配 hello 和 hallo ,但不匹配 hillo 。特殊符号用 \ 隔开可用版本: >= 1.0.0返回值: 符合给定模式的 key 列表。
MOVE 指令
语法 : MOVE key db作用 : 将当前数据库的 key 移动到给定的数据库 db 当中。可用版本: >= 1.0.0返回值: 移动成功返回 1 ,失败则返回 0 。
PEXPIRE 指令
语法 : PEXPIRE key milliseconds作用 : 这个命令和 EXPIRE 命令的作用类似,但是它以 毫秒 为单位设置 key 的生存时间 (EXPIRE 以秒为单位)可用版本: >= 2.6.0时间复杂度: O(1)返回值:设置成功,返回1。key 不存在或设置失败,返回0
PEXPIREAT 指令
语法 : PEXPIREAT key milliseconds-timestamp作用 : 这个命令和 EXPIREAT 命令类似,但它以 毫秒 为单位设置 key 的过期 unix 时间戳(EXPIREAT 以秒为单位)可用版本: >= 2.6.0返回值:如果生存时间设置成功,返回 1 。当 key 不存在或没办法设置生存时间时,返回 0 。 (查看EXPIRE 命令获取更多信息)
TTL 指令
语法 : TTL key作用 : 以秒为单位,返回给定 key 的剩余生存时间(TTL, time to live)。可用版本: >= 1.0.0返回值: 当 key 不存在时,返回 -2 。 当 key 存在但没有设置剩余生存时间时,返回 -1 。 否则,以秒为单位,返回 key 的剩余生存时间。Note : Redis 2.8 以前,当 key 不存在,或者 key 没有设置剩余生存时间时,命令都返回 -1 。
PTTL 指令
语法 : PTTL key作用 : 这个命令类似于 TTL 命令,但它以毫秒为单位返回 key 的剩余生存时间 (TTL 以秒为单位)可用版本: >= 2.6.0返回值: 当 key 不存在时,返回 -2 。当 key 存在但没有设置剩余生存时间时,返回 -1 。否则,以毫秒为单位,返回 key 的剩余生存时间。注意 : Redis 2.8 以前,当 key 不存在,或者 key 没有设置剩余生存时间时,命令都返回 -1 。
RANDOMKEY 指令
语法 : RANDOMKEY作用 : 从当前数据库中随机返回(不删除) 一个 key 。可用版本: >= 1.0.0返回值:当数据库不为空时,返回一个 key 。当数据库为空时,返回 nil 。
RENAME 指令
语法 : RENAME key newkey作用 : 将 key 改名为 newkey 。 当 key 和 newkey 相同,或者 key 不存在时,返回一个错误。 当 newkey 已经存在时,RENAME 命令将覆盖旧值。可用版本: >= 1.0.0返回值: 改名成功时提示OK ,失败时候返回一个错误。
TYPE 指令
语法 : TYPE key作用 : 返回 key 所储存的值的类型。可用版本: >= 1.0.0返回值: none:key 不存在 string:字符串 list:列表 set:集合 zset:有序集 hash:哈希表
public class TestKeys {
private Jedis jedis
;
@Before
public void before() {
jedis
= new Jedis("192.168.3.65", 6379);
}
@After
public void after() {
jedis
.close();
}
@Test
public void testKeys() {
jedis
.del("name");
jedis
.del("name", "age");
jedis
.set("age", "hello");
Boolean name
= jedis
.exists("name");
System
.out
.println(name
);
Long age
= jedis
.expire("age", 100);
System
.out
.println(age
);
Long ttl
= jedis
.ttl("age");
System
.out
.println(ttl
);
String s
= jedis
.randomKey();
jedis
.rename("age", "newage");
String type1
= jedis
.type("name");
System
.out
.println(type1
);
String type2
= jedis
.type("maps");
System
.out
.println(type2
);
}
}
操作 String 相关 API
命令说明
set设置一个key/valueget根据key获得对应的valuemset一次设置多个key valuemget一次获得多个key的valuegetset获得原始key的值,同时设置新值strlen获得对应key存储value的长度append为对应key的value追加内容getrange 索引0开始截取value的内容setex设置一个key存活的有效期(秒)psetex设置一个key存活的有效期(毫秒)setnx存在不做任何操作,不存在添加msetnx原子操作(只要有一个存在不做任何操作)可以同时设置多个key,只要有一个存在都不保存decr进行数值类型的-1操作decrby根据提供的数据进行减法操作incr进行数值类型的+1操作incrby根据提供的数据进行加法操作incrbyfloat根据提供的数据加入浮点数
public class TestString {
private Jedis jedis
;
@Before
public void before() {
jedis
= new Jedis("192.168.3.65", 6379);
}
@After
public void after() {
jedis
.close();
}
@Test
public void testString() {
jedis
.set("name", "zhenyu");
String name
= jedis
.get("name");
System
.out
.println(name
);
jedis
.mset("content", "好人", "address", "苏州市");
List
<String> mget
= jedis
.mget("name", "content", "address");
mget
.forEach(v
-> System
.out
.println("v = " + v
));
String set
= jedis
.getSet("name", "yusael");
System
.out
.println(set
);
}
}
操作 List 相关 API
命令说明
lpush将某个值加入到一个key列表头部lpushx同lpush,但是必须要保证这个key存在rpush将某个值加入到一个key列表末尾rpushx同rpush,但是必须要保证这个key存在lpop返回和移除列表左边的第一个元素rpop返回和移除列表右边的第一个元素lrange获取某一个下标区间内的元素llen获取列表元素个数lset设置某一个指定索引的值(索引必须存在)lindex获取某一个指定索引位置的元素lrem删除重复元素ltrim保留列表中特定区间内的元素linsert在某一个元素之前,之后插入新元素
public class TestList {
private Jedis jedis
;
@Before
public void before() {
jedis
= new Jedis("192.168.3.65", 6379);
}
@After
public void after() {
jedis
.close();
}
@Test
public void testList() {
jedis
.flushDB();
jedis
.lpush("names1", "1", "2", "3", "4", "5");
jedis
.rpush("names1", "a", "b", "c", "d", "e");
List
<String> names1
= jedis
.lrange("names1", 0, -1);
names1
.forEach(v
-> System
.out
.println("name = " + v
));
String name
= jedis
.lpop("names1");
System
.out
.println(name
);
System
.out
.println(jedis
.llen("names1"));
Long linsert
= jedis
.linsert("names1", BinaryClient
.LIST_POSITION
.BEFORE
, "2", "world");
System
.out
.println("linsert: " + linsert
);
names1
= jedis
.lrange("names1", 0, -1);
names1
.forEach(v
-> System
.out
.println("name = " + v
));
}
}
操作 Set 的相关 API
命令说明
sadd为集合添加元素smembers显示集合中所有元素 无序scard返回集合中元素的个数spop随机返回一个元素 并将元素在集合中删除smove从一个集合中向另一个集合移动元素 必须是同一种类型srem从集合中删除一个元素sismember判断一个集合中是否含有这个元素srandmember随机返回元素sdiff去掉第一个集合中其它集合含有的相同元素sinter求交集sunion求和集
public class TestSet {
private Jedis jedis
;
@Before
public void before() {
jedis
= new Jedis("192.168.3.65", 6379);
}
@After
public void after() {
jedis
.close();
}
@Test
public void testSet() {
jedis
.sadd("names","zhangsan", "lisi");
Set
<String> names
= jedis
.smembers("names");
names
.forEach(v
-> System
.out
.println("v = " + v
));
Boolean sismember
= jedis
.sismember("names", "zhenyu");
System
.out
.println(sismember
);
}
}
操作 ZSet 相关 API
命令说明
zadd添加一个有序集合元素zcard返回集合的元素个数zrange 升序 zrevrange 降序返回一个范围内的元素zrangebyscore按照分数查找一个范围内的元素zrank返回排名zrevrank倒序排名zscore显示某一个元素的分数zrem移除某一个元素zincrby给某个特定元素加分
public class TestZSet {
private Jedis jedis
;
@Before
public void before() {
jedis
= new Jedis("192.168.3.65", 6379);
}
@After
public void after() {
jedis
.close();
}
@Test
public void testZSet() {
jedis
.zadd("zset", 8, "张三");
jedis
.zadd("zset", 5, "李四");
jedis
.zadd("zset", 7, "王五");
jedis
.zadd("zset", 2, "赵六");
jedis
.zadd("zset", 33, "Win7");
jedis
.zadd("zset", 6, "Win8");
jedis
.zadd("zset", 77, "Win9");
Set
<String> names
= jedis
.zrange("zset", 0, -1);
names
.forEach(v
-> System
.out
.println("v = " + v
+", zscore = " + jedis
.zscore("zset", v
)));
Long zcard
= jedis
.zcard("zset");
System
.out
.println(zcard
);
names
= jedis
.zrangeByScore("zset", "0", "100", 0, 5);
names
.forEach(v
-> System
.out
.println("v = " + v
+", zscore = " + jedis
.zscore("zset", v
)));
}
}
操作 Hash 相关 API
命令说明
hset设置一个key/value对hget获得一个key对应的valuehgetall获得所有的key/value对hdel删除某一个key/value对hexists判断一个key是否存在hkeys获得所有的keyhvals获得所有的valuehmset设置多个key/valuehmget获得多个key的valuehsetnx设置一个不存在的key的值hincrby为value进行加法运算hincrbyfloat为value加入浮点值
public class TestHash {
private Jedis jedis
;
@Before
public void before() {
jedis
= new Jedis("192.168.3.65", 6379);
}
@After
public void after() {
jedis
.close();
}
@Test
public void testHash() {
jedis
.hset("maps","name","zhangsan");
Map
<String, String> map
= new HashMap<>();
map
.put("age", "12");
map
.put("content", "好人");
jedis
.hmset("maps", map
);
String maps
= jedis
.hget("maps", "name");
System
.out
.println(maps
);
Map
<String, String> all
= jedis
.hgetAll("maps");
all
.forEach((k
, v
) -> System
.out
.println("k = " + k
+ ", v = " + v
));
}
}