Redis 笔记之 Java 操作 Redis(Jedis)
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)相关推荐
- JAVA操作REDIS执行原子操作
JAVA操作REDIS执行原子操作 JAVA操作REDIS执行原子操作 为什么要使用原子操作 JAVA操作REDIS执行原子操作 为什么要使用原子操作 众所周知,redis 作为数据库的前置库,给数据 ...
- redis入门及java操作
redis 命令可以去菜鸟教程http://www.runoob.com/redis/redis-tutorial.html 或者以下地址去学习http://www.cnblogs.com/huang ...
- java redis remove_最全的Java操作Redis的工具类
RedisUtil 当前版本:1.1 增加更全的方法,对以前的部分方法进行了规范命名,请放心替换成新版本. 介绍 最全的Java操作Redis的工具类,使用StringRedisTemplate实现, ...
- java操作redis简单示例
java操作redis简单示例 初学redis,在java语言和环境下完成redis的入门学习. 首先,官网下载源码,编译,安装,修改配置文件redis.conf中的 ...
- Spring Boot 整合Redis 包含Java操作Redis哨兵 作者:哇塞大嘴好帥(哇塞大嘴好帅)
Spring Boot 整合Redis 包含Java操作Redis哨兵 作者:哇塞大嘴好帥(哇塞大嘴好帅) 1. 配置环境 在SpringBoot2.0版本以后,原来使用的jedis被替换成为了let ...
- Java操作Redis存储HashMap对象类型数据
背景描述 关于JAVA去操作Redis时,如何存储一个对象的数据,这是大家非常关心的问题,虽然官方提供了存储String,List,Set等等类型,但并不满足我们现在实际应用.存储一个对象是非常常见的 ...
- 不要再找了,Java操作Redis、Spring整合Redis及SpringBoot整合Redis这里都有
文章开始之前先抛出一个问题:Jedis.Lettuce.Redisson以及RedisTemplate几者之间有什么区别,又有什么联系? 如果你心中已经很清晰的有了答案,那么本文你可以很轻松的阅读过去 ...
- 【redis】java操作redis时,StringRedisTemplate的expire()方法的作用,什么时候使用
java操作redis时,StringRedisTemplate的expire()方法的作用,什么时候使用 //重新设置过期时间为30分钟,刷新时间 redisTemplate.expire(MsOp ...
- Java操作redis设置第二天凌晨过期
场景: 在做查询数据的时候,遇到了需要设置数据在redis中第二天过期的问题,但是redis又没有对应的API,就只好自己来解决了 思路: 计算出第二天凌晨与当前时间的时间差,将该时间差设置为redi ...
最新文章
- linux mysql 更改MySQL数据库目录位置
- msvc/gcc:中用#pragma指令关闭特定警告(warning)
- 镜像电流源特点_模电中的电流源电路
- 大数据平台安全问题有哪些
- 通过密钥 SFTP(一)
- java .entryset_Java中map的entrySet()方法返回的是什么内容啊?有点晕
- 你要的Chrome插件都在这里了
- 自动控制系统中的典型环节
- excel公式编辑器_用Excel制作 “抽奖”小软件,很简单!
- H3C交换机MPLS配置
- 数量遗传学 第五章 双亲杂交后代数量性状均值和方差组成
- LC-3 机器语言 指令集
- 初探DirectShow
- 如何用迅雷下载OneDrive文件
- ARMv7 与 ARMv8的区别
- 提高抗打击能力_怎么有效提高自身的抗打击能力?
- 微信小程序开发工具结合腾讯云开发AI人脸识别和身份证识别——基于腾讯云开发者实验项目
- CSS特效-下雨天效果
- 微机原理复试面试(一)
- 北斗/GPS授时原理
热门文章
- 几个商业模式的运用手法
- 计算机应用0006作业2,〔计算机应用基本0006〕14秋在线作业2.doc
- sql库缓存命中率_SQL Server内存性能指标–第4部分–缓冲区高速缓存命中率和页面寿命期望
- 共享您的数据!…从SharePoint加载SQL数据
- 在SQL Server中使用SQL Coalesce函数
- 数据文件shrink_SQL Server中的Shrink TempDB数据库概述
- ssms18还原数据_SSMS 18中的静态数据屏蔽
- print('{:15}|{:^9}|{:^9}'.format('', 'lat.', 'long.'))是什么意思?
- sklearn学习5-----模型评估(1) 分类度量
- HashMap keyset()方法