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. Docker初学1:初识Docker
  2. joda time, jackson 与 scala 反射
  3. Mac电脑「空格键」的使用技巧
  4. 关于音频PCM数据2字节(16位)byte与64位double之间的转换
  5. MFC对COM接口编写的支持分析
  6. 数据库系统概论(第5版)
  7. 计算机切换到桌面,电脑桌面切换软件 电脑桌面快速切换
  8. TFT LCD液晶屏显示原理
  9. SprintBoot使用@Vaildated注解进行参数校验、全局异常处理以及注解校验不生效问题
  10. 【图文讲解】映射——单射-双射-满射概念
  11. 严昊:25岁接手世界500强企业,公司一年净赚80亿
  12. 樊登读书会终身成长读后感_樊登读书会听书《终身成长》学习感悟
  13. angular 双向绑定和事件绑定实现 输入框内容输出
  14. 我(作为一名开发者)所犯过的错误
  15. KeyError: 'data'
  16. SQUIRREL语言
  17. json的存在意义(json和String的区别)
  18. 计算机数据采集 的优点,数据采集器的作用_数据采集器硬件特点
  19. 10款PHP开源的外贸网店电子商务管理系统
  20. Matlab使用笔记(九):matlab实现交通流仿真/车感知/城市交通交叉路口

热门文章

  1. 什么样的领导最有魅力?
  2. 美团靠外卖和到店业务赚来的钱
  3. 有人说赚钱靠项目,也有人说赚钱靠技术
  4. In addition, Clem also revealed that they have
  5. 听力技巧-真题代练及填空题
  6. 计算机网络class5(分层结构、协议、接口、服务)
  7. dmf nmf_SQL Server 2019 –新的DMF sys.dm_db_page_info
  8. storyboard之 Segue
  9. (zt)ACE中的Proactor介绍和应用实例
  10. SecureCRT 连数据库,启动tomcat操作命令