Java 操作 Redis

  • 环境准备
    • 引入依赖
    • 创建 jedis 对象
  • 操作 Key 相关 API
  • 操作 String 相关 API
  • 操作 List 相关 API
  • 操作 Set 的相关 API
  • 操作 ZSet 相关 API
  • 操作 Hash 相关 API

环境准备

引入依赖

<!--引入jedis连接依赖-->
<dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>2.9.0</version>
</dependency>

创建 jedis 对象

Centos 7 关闭防火墙:

systemctl stop firewalld.service

开启远程连接:详见 Redis入门之Redis安装、配置及常用指令

/*** 测试 Redis 连接*/
public class TestRedis {public static void main(String[] args) {// 1.创建 jedis 对象// redis服务必须关闭防火墙// redis服务必须开始远程连接Jedis jedis = new Jedis("192.168.3.65", "6379");// 2.执行相关操作jedis.select(0); // 选择操作的数据库, 默认0号// ......// 3.释放资源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;@Beforepublic void before() {// 连接开启了redis服务的虚拟机jedis = new Jedis("192.168.3.65", 6379);}@Afterpublic void after() {jedis.close();}@Testpublic void testKeys() {// 删除一个keyjedis.del("name");// 删除多个keyjedis.del("name", "age");// 设置一个keyjedis.set("age", "hello");// 判断一个key是否存在Boolean name = jedis.exists("name");System.out.println(name);// 设置一个key超时时间Long age = jedis.expire("age", 100);System.out.println(age);// 获取一个key超时时间Long ttl = jedis.ttl("age");System.out.println(ttl);// 随机获取一个keyString s = jedis.randomKey();// 修改key名称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/value
get 根据key获得对应的value
mset 一次设置多个key value
mget 一次获得多个key的value
getset 获得原始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;@Beforepublic void before() {jedis = new Jedis("192.168.3.65", 6379);}@Afterpublic void after() {jedis.close();}@Testpublic void testString() {jedis.set("name", "zhenyu"); // setString name = jedis.get("name"); // getSystem.out.println(name);jedis.mset("content", "好人", "address", "苏州市"); // msetList<String> mget = jedis.mget("name", "content", "address"); // mgetmget.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;@Beforepublic void before() {jedis = new Jedis("192.168.3.65", 6379);}@Afterpublic void after() {jedis.close();}@Testpublic void testList() {jedis.flushDB(); // 清除当前数据库jedis.lpush("names1", "1", "2", "3", "4", "5"); // lpushjedis.rpush("names1", "a", "b", "c", "d", "e"); // rpushList<String> names1 = jedis.lrange("names1", 0, -1);names1.forEach(v -> System.out.println("name = " + v));String name = jedis.lpop("names1"); // lpop rpopSystem.out.println(name); // 5System.out.println(jedis.llen("names1")); // llen// names1 中 2 左边插入一个 worldLong linsert = jedis.linsert("names1", BinaryClient.LIST_POSITION.BEFORE, "2", "world");// linsertSystem.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;@Beforepublic void before() {jedis = new Jedis("192.168.3.65", 6379);}@Afterpublic void after() {jedis.close();}@Testpublic 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;@Beforepublic void before() {jedis = new Jedis("192.168.3.65", 6379);}@Afterpublic void after() {jedis.close();}@Testpublic 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对应的value
hgetall 获得所有的key/value对
hdel 删除某一个key/value对
hexists 判断一个key是否存在
hkeys 获得所有的key
hvals 获得所有的value
hmset 设置多个key/value
hmget 获得多个key的value
hsetnx 设置一个不存在的key的值
hincrby 为value进行加法运算
hincrbyfloat 为value加入浮点值
public class TestHash {private Jedis jedis;@Beforepublic void before() {jedis = new Jedis("192.168.3.65", 6379);}@Afterpublic void after() {jedis.close();}@Testpublic 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));}
}

Redis 笔记之 Java 操作 Redis(Jedis)相关推荐

  1. JAVA操作REDIS执行原子操作

    JAVA操作REDIS执行原子操作 JAVA操作REDIS执行原子操作 为什么要使用原子操作 JAVA操作REDIS执行原子操作 为什么要使用原子操作 众所周知,redis 作为数据库的前置库,给数据 ...

  2. redis入门及java操作

    redis 命令可以去菜鸟教程http://www.runoob.com/redis/redis-tutorial.html 或者以下地址去学习http://www.cnblogs.com/huang ...

  3. java redis remove_最全的Java操作Redis的工具类

    RedisUtil 当前版本:1.1 增加更全的方法,对以前的部分方法进行了规范命名,请放心替换成新版本. 介绍 最全的Java操作Redis的工具类,使用StringRedisTemplate实现, ...

  4. java操作redis简单示例

    java操作redis简单示例     初学redis,在java语言和环境下完成redis的入门学习.              首先,官网下载源码,编译,安装,修改配置文件redis.conf中的 ...

  5. Spring Boot 整合Redis 包含Java操作Redis哨兵 作者:哇塞大嘴好帥(哇塞大嘴好帅)

    Spring Boot 整合Redis 包含Java操作Redis哨兵 作者:哇塞大嘴好帥(哇塞大嘴好帅) 1. 配置环境 在SpringBoot2.0版本以后,原来使用的jedis被替换成为了let ...

  6. Java操作Redis存储HashMap对象类型数据

    背景描述 关于JAVA去操作Redis时,如何存储一个对象的数据,这是大家非常关心的问题,虽然官方提供了存储String,List,Set等等类型,但并不满足我们现在实际应用.存储一个对象是非常常见的 ...

  7. 不要再找了,Java操作Redis、Spring整合Redis及SpringBoot整合Redis这里都有

    文章开始之前先抛出一个问题:Jedis.Lettuce.Redisson以及RedisTemplate几者之间有什么区别,又有什么联系? 如果你心中已经很清晰的有了答案,那么本文你可以很轻松的阅读过去 ...

  8. 【redis】java操作redis时,StringRedisTemplate的expire()方法的作用,什么时候使用

    java操作redis时,StringRedisTemplate的expire()方法的作用,什么时候使用 //重新设置过期时间为30分钟,刷新时间 redisTemplate.expire(MsOp ...

  9. Java操作redis设置第二天凌晨过期

    场景: 在做查询数据的时候,遇到了需要设置数据在redis中第二天过期的问题,但是redis又没有对应的API,就只好自己来解决了 思路: 计算出第二天凌晨与当前时间的时间差,将该时间差设置为redi ...

最新文章

  1. linux mysql 更改MySQL数据库目录位置
  2. msvc/gcc:中用#pragma指令关闭特定警告(warning)
  3. 镜像电流源特点_模电中的电流源电路
  4. 大数据平台安全问题有哪些
  5. 通过密钥 SFTP(一)
  6. java .entryset_Java中map的entrySet()方法返回的是什么内容啊?有点晕
  7. 你要的Chrome插件都在这里了
  8. 自动控制系统中的典型环节
  9. excel公式编辑器_用Excel制作 “抽奖”小软件,很简单!
  10. H3C交换机MPLS配置
  11. 数量遗传学 第五章 双亲杂交后代数量性状均值和方差组成
  12. LC-3 机器语言 指令集
  13. 初探DirectShow
  14. 如何用迅雷下载OneDrive文件
  15. ARMv7 与 ARMv8的区别
  16. 提高抗打击能力_怎么有效提高自身的抗打击能力?
  17. 微信小程序开发工具结合腾讯云开发AI人脸识别和身份证识别——基于腾讯云开发者实验项目
  18. CSS特效-下雨天效果
  19. 微机原理复试面试(一)
  20. 北斗/GPS授时原理

热门文章

  1. 几个商业模式的运用手法
  2. 计算机应用0006作业2,〔计算机应用基本0006〕14秋在线作业2.doc
  3. sql库缓存命中率_SQL Server内存性能指标–第4部分–缓冲区高速缓存命中率和页面寿命期望
  4. 共享您的数据!…从SharePoint加载SQL数据
  5. 在SQL Server中使用SQL Coalesce函数
  6. 数据文件shrink_SQL Server中的Shrink TempDB数据库概述
  7. ssms18还原数据_SSMS 18中的静态数据屏蔽
  8. print('{:15}|{:^9}|{:^9}'.format('', 'lat.', 'long.'))是什么意思?
  9. sklearn学习5-----模型评估(1) 分类度量
  10. HashMap keyset()方法