Java连接redis及基本操作示例
作者:crisy0513 发布时间:2023-12-07 03:27:03
标签:Java,连接redis
本文实例讲述了Java连接redis及基本操作。分享给大家供大家参考,具体如下:
点击此处:本站下载安装。
解压安装
启动redis:使用cd命令切换目录到 D:\redis运行redis-server.exe redis.windows.conf
默认端口为6379
访问:切换到redis目录下运行 redis-cli.exe -h 127.0.0.1 -p 6379
。
pom.xml:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>testRedis</groupId>
<artifactId>testRedis</artifactId>
<version>0.0.1-SNAPSHOT</version>
<build/>
<dependencies>
<!-- Redis NoSQL 操作依赖 -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.1.0</version>
</dependency>
</dependencies>
</project>
测试代码:
package com.crisy.redis;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.JedisShardInfo;
import redis.clients.jedis.ShardedJedis;
import redis.clients.jedis.ShardedJedisPool;
public class RedisClient {
/**
* 一般项目基本都使用非切片池;
* 切片池主要用于分布式项目,可以设置主从Redis库
*/
private Jedis jedis;//非切片客户端连接
private JedisPool jedisPool;//非切片连接池
private ShardedJedis shardedJedis;//切片客户端连接
private ShardedJedisPool shardedJedisPool;//切片连接池
public RedisClient(){
initialPool(); //初始化非切片连接池
initialShardedPool(); //初始化切片连接池
shardedJedis = shardedJedisPool.getResource();
jedis = jedisPool.getResource();
}
private void initialPool() {
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxActive(20);
config.setMaxIdle(5);
config.setMaxWait(100001);
config.setTestOnBorrow(false);
jedisPool = new JedisPool(config,"127.0.0.1",6379);
}
private void initialShardedPool() {
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxActive(20);
config.setMaxIdle(5);
config.setMaxWait(100001);
config.setTestOnBorrow(false);
//slave连接
List<JedisShardInfo> shardInfos = new ArrayList<JedisShardInfo>();
shardInfos.add(new JedisShardInfo("127.0.0.1",6379,"master"));
//构造池
shardedJedisPool = new ShardedJedisPool(config, shardInfos);
}
public void show(){
System.out.println("----对Value操作的命令----");
valueOperate();
System.out.println("----对String操作的命令----");
stringOperator();
System.out.println("----对List操作的命令----");
listOperator();
System.out.println("----对Set操作的命令----");
setOperator();
System.out.println("----对hash操作的命令----");
hashOperate();
}
/**
* 对Value操作的命令
* @throws InterruptedException
*/
private void valueOperate(){
System.out.println("清空当前选择库中所有key:"+jedis.flushDB());
System.out.println("清空所有库中所有key:"+jedis.flushAll());
System.out.println("判断myKey键是否存在:"+shardedJedis.exists("myKey"));
System.out.println("新增myKey:"+shardedJedis.set("myKey","myValue"));
System.out.println("判断myKey键是否存在:"+shardedJedis.exists("myKey"));
System.out.println("查看myKey所储存的值的类型:"+jedis.type("myKey"));
System.out.println("重命名myKey-myKey_1:"+jedis.rename("myKey", "myKey_1"));
System.out.println("判断myKey键是否存在:"+shardedJedis.exists("myKey"));
System.out.println("判断myKey_1键是否存在:"+shardedJedis.exists("myKey_1"));
System.out.println("新增myKey_2:"+shardedJedis.set("myKey_2","myValue_2"));
System.out.println("查看索引为0的Key:"+jedis.select(0));
System.out.println("当前数据库中key的数目:"+jedis.dbSize());
System.out.println("系统中所有键如下:");
//返回满足给定pattern的所有key
Set<String> keys = jedis.keys("*");
Iterator<String> it=keys.iterator() ;
while(it.hasNext()){
String key = it.next();
System.out.println(key);
}
//删除时,如果不存在忽略此命令
System.out.println("系统中删除myKey_3: "+jedis.del("myKey_3"));
System.out.println("系统中删除myKey_2: "+jedis.del("myKey_2"));
System.out.println("判断myKey_2是否存在:"+shardedJedis.exists("myKey_2"));
System.out.println("设置 myKey_1的过期时间为5秒:"+jedis.expire("myKey_1", 5));
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//没有设置过期时间或者不存在的都返回-1
System.out.println("获得myKey_1的剩余活动时间:"+jedis.ttl("myKey_1"));
System.out.println("取消设置myKey_1的活动时间:"+jedis.persist("myKey_1"));
System.out.println("查看myKey_1的剩余活动时间:"+jedis.ttl("myKey_1"));
}
/**
* 对String操作的命令
*/
private void stringOperator(){
System.out.println("清空当前选择库中所有key:"+jedis.flushDB());
System.out.println("给数据库中名称为key01的string赋予值value:"+jedis.set("key01", "value01"));
System.out.println("给数据库中名称为key02的string赋予值value:"+jedis.set("key02", "value02"));
System.out.println("给数据库中名称为key03的string赋予值value:"+jedis.set("key03", "value03"));
System.out.println("返回数据库中名称为key01的string的value:"+jedis.get("key01"));
System.out.println("返回库中多个string的value:"+jedis.mget("key01","key02","key03"));
System.out.println("添加string,名称为key,值为value:"+jedis.setnx("key04","value04"));
System.out.println("向库中添加string,设定过期时间time:"+jedis.setex("key05",5,"value05"));
System.out.println("批量设置多个string的值:"+jedis.mset("key06_1","value06_1","key06_2","value06_2"));
System.out.println("给数据库中名称为key07的string赋予值value:"+jedis.set("key07", "1"));
System.out.println("名称为key07的string增1操作:"+jedis.incr("key07"));
//ERR value is not an integer or out of range
//System.out.println("名称为key01的string增1操作:"+jedis.incr("key01"));
System.out.println("名称为key07的string增加integer:"+jedis.incrBy("key07", 5));
System.out.println("名称为key07的string减1操作:"+jedis.decr("key07"));
System.out.println("名称为key07的string减少integer:"+jedis.decrBy("key07", 3));
System.out.println("名称为key的string的值附加value:"+jedis.append("key01","Hello World"));
System.out.println("返回名称为key的string的value的子串:"+jedis.substr("key01",0,5));
}
/**
* 对List操作的命令
*/
private void listOperator(){
System.out.println("清空当前选择库中所有key:"+jedis.flushDB());
//准备两个list
shardedJedis.lpush("mylist", "Java");
shardedJedis.lpush("mylist", "C");
shardedJedis.lpush("mylist", "C++");
shardedJedis.lpush("mylist", "Java");
System.out.println("在名称为mylist的list尾添加一个值为value的元素:"+jedis.rpush("mylist","phython"));
System.out.println("在名称为mylist的list头添加一个值为value的 元素:"+jedis.rpush("mylist","PHP"));
System.out.println("返回名称为mylist的list的长度:"+jedis.llen("mylist"));
System.out.println("返回名称为mylist中start至end之间的元素:"+jedis.lrange("mylist",0,3));
System.out.println("截取名称为mylist的list:"+jedis.ltrim("mylist",0,3));
System.out.println("返回名称为mylist的list中index位置的元素:"+jedis.lindex("mylist",0));
System.out.println("给名称为mylist的list中index位置的元素赋值:"+jedis.lset("mylist",0,"hahahahah我改啦"));
System.out.println("删除count个mylist的key中值为value的元素:"+jedis.lrem("mylist",1,"Java"));
System.out.println("返回并删除名称为mylist的list中的首元素:"+jedis.lpop("mylist"));
System.out.println("返回并删除名称为mylist的list中的尾元素:"+jedis.rpop("mylist"));
}
/**
* 对Set操作的命令
*/
private void setOperator(){
System.out.println("清空当前选择库中所有key:"+jedis.flushDB());
//准备两个set
jedis.sadd("myset","hahaha");
jedis.sadd("myset","hahaha");
jedis.sadd("myset","lalala");
jedis.sadd("myset","kakaka");
jedis.sadd("myset2","hahaha");
jedis.sadd("myset2","lalala");
jedis.sadd("myset2","kakaka");
System.out.println("向名称为myset的set中添加元素member:"+jedis.sadd("myset","wawawa"));
System.out.println("返回名称为myset的set的所有元素:"+jedis.smembers("myset"));
System.out.println("删除名称为myset的set中的元素member:"+jedis.srem("myset","wawawa"));
System.out.println("返回名称为myset的set的所有元素:"+jedis.smembers("myset"));
System.out.println("随机返回并删除名称为myset的set中一个元素:"+jedis.spop("myset"));
System.out.println("移到集合元素:"+jedis.smove("myset","myset2","hahaha"));
System.out.println("返回名称为myset的set的所有元素:"+jedis.smembers("myset"));
System.out.println("返回名称为myset2的set的所有元素:"+jedis.smembers("myset2"));
System.out.println("返回名称为mykey的set的基数:"+jedis.scard("myset"));
System.out.println("member是否是名称为mykey的set的元素:"+jedis.sismember("myset","hahaha"));
System.out.println("求交集:"+jedis.sinter("myset","myset2"));
System.out.println("求交集并将交集保存到dstkey的集合:"+jedis.sinterstore("dstkey","myset2","myset"));
System.out.println("返回名称为dstkey的set的所有元素:"+jedis.smembers("dstkey"));
System.out.println("求并集:"+jedis.sunion("myset","myset2"));
System.out.println("求并集并将并集保存到dstkey的集合:"+jedis.sinterstore("dstkey","myset2","myset"));
System.out.println("返回名称为dstkey的set的所有元素:"+jedis.smembers("dstkey"));
System.out.println("求差集:"+jedis.sdiff("myset2","myset"));
System.out.println("求差集并将差集保存到dstkey的集合:"+jedis.sdiffstore("dstkey","myset2","myset"));
System.out.println("返回名称为dstkey的set的所有元素:"+jedis.smembers("dstkey"));
System.out.println("随机返回名称为dstkey的set的一个元素:"+jedis.srandmember("dstkey"));
}
/**
* hash
*/
private void hashOperate(){
System.out.println(jedis.flushDB());
System.out.println("向名称为key的hash中添加元素field1:"+shardedJedis.hset("key", "field1", "value1"));
System.out.println("向名称为key的hash中添加元素field2:"+shardedJedis.hset("key", "field2", "value2"));
System.out.println("向名称为key的hash中添加元素field3:"+shardedJedis.hset("key", "field3", "value3"));
System.out.println("返回名称为key的hash中field1对应的value:"+shardedJedis.hget("key", "field1"));
System.out.println("返回名称为key的hash中field1对应的value:"+shardedJedis.hmget("key", "field1","field2","field3"));
System.out.println("删除名称为key的hash中键为field1的域:"+shardedJedis.hdel("key", "field1"));
System.out.println("返回名称为key的hash中所有键对应的value:"+shardedJedis.hvals("key"));
System.out.println("返回名称为key的hash中元素个数:"+shardedJedis.hlen("key"));
System.out.println("返回名称为key的hash中所有键:"+shardedJedis.hkeys("key"));
System.out.println("返回名称为key的hash中所有的键(field)及其对应的value:"+shardedJedis.hgetAll("key"));
System.out.println("名称为key的hash中是否存在键为field1的域:"+shardedJedis.hexists("key","field1"));
}
}
希望本文所述对大家java程序设计有所帮助。
来源:https://blog.csdn.net/crisy0513/article/details/81298179
0
投稿
猜你喜欢
- Java 8 , Lambda + foreach 语法糖, 写起来非常的 cleanpublic static void main(Str
- 1、什么是const? 常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的。(当然,我们可以偷梁
- 本文告诉大家如何使用相同权限调用cmd并且传入命令。如果想要用相同的权限运行一个程序,可以使用 ProcessStartInfo 的方法&n
- 1. JAVA源文件的命名JAVA源文件名必须和源文件中所定义的类的类名相同。2. Package的命名Package名的第一部分应是小写A
- maven scope provided和runtime例子maven常用的scope有compile,provided,runtime,t
- 1、多个线程对同一个队列进行读写操作,要注意进行读写控制,某个线程在读取的时候,不允许其它线程读、写;某个线程在写的时候,不允许其它线程进行
- 不是很难的知识,但是今天犯错了,记录一下什么是 stream 流我们在使用集合或数组对元素进行操作时往往会遇到这种情况:通过对不同类型的存储
- 1、引言你能搜到这个教程,说明你对 Maven 感兴趣,但是又不是太理解。那么接下来这个系列的教程将会详细讲解 Maven 的用法,相信你看
- 概述最近在对之前写的一个 Spring Boot 的视频网站项目做功能完善,需要利用 FFmpeg 实现读取视频信息和自动截图的功能,查阅资
- 打jar包实现分离依赖lib和配置为了业务需要配置文件和jar分离,便于使用者修改配置信息,在网上找了很久,最终找到一个简单有效的方法。操作
- 1. 概述:将一个具体类的实例化交给一个静态工厂方法来执行,它不属于GOF的23种设计模式,但现实中却经常会用到2. 模式中的角色2.1 工
- 前言本文简单介绍抽象类,接口以及它们的异同点,另附简单的代码举例。一、抽象类是什么?在 Java 语言中使用 abstract class
- 启动类的存放位置今天,写了一个项目,但是启动类为什么一直报错我是放在这个位置的,但是就一直报放在默认包错误 想记录下微服务启动类的
- 一、线程间等待与唤醒机制wait()和notify()是Object类的方法,用于线程的等待与唤醒,必须搭配synchronized 锁来使
- Windows系统启动Java程序会弹出黑窗口。黑窗口有几点不好。首先它不美观;其次容易误点导致程序关闭;但最让我匪夷所思的是:将鼠标光标选
- 为了解决在多个窗口之间的传值问题,我们可以通过设置静态类和静态变量的办法来实现窗口间值的传递窗体一代码//窗体1的代码using Syste
- 这篇文章主要介绍了springboot多租户设计过程图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的
- 本文实例为大家分享了Unity3D选择本地图片并加载的具体代码,供大家参考,具体内容如下①找到System.Windows.Forms.dl
- 本文实例为大家分享了Java模拟实现斗地主发牌的具体代码,供大家参考,具体内容如下题目:模拟斗地主的发牌实现,54张牌,每张牌不同的花色(红
- Spring Security提供如下几种认证机制Username & PasswordOAuth2.0 LoginSAML 2.0