项目添加依赖

redis.clients

jedis

2.9.0

Java 怎么连接 Redis

//连接 Redis
@Testpublic voidinitConn01(){
System.out.println("==========================");
System.out.println("==========================");
System.out.println("==========================");//创建 jedis 对象,连接 redis 服务
Jedis jedis=new Jedis("192.168.75.163",6379);//设置认证密码//jedis.auth("root");//指定数据库 默认是 0
jedis.select(1);//使用 ping 命令,测试连接是否成功
String result=jedis.ping();
System.out.println(result);//返回 PONG//添加一条数据
jedis.set("username","zhangsan");//获取一条数据
String username=jedis.get("username");
System.out.println(username);//释放资源
if(jedis!=null){
jedis.close();
}
}

看下输出结果

redis 获取文件夹 redis怎么获取数据_System

通过 Redis 连接池获取连接对象并操作服务器

private String host ="192.168.75.163";private Integer port=6379;
@Testpublic voidinitConn02() {//初始化 redis 客户端连接池
JedisPool jedisPool = new JedisPool(new JedisPoolConfig(), host, port, 10000);//从连接池获取连接
Jedis jedis =jedisPool.getResource();//指定数据库 默认是 0
jedis.select(2);//使用 ping 命令,测试连接是否成功
String result =jedis.ping();
System.out.println(result);//返回 PONG//添加一条数据
jedis.set("username", "zhangsan");//获取一条数据
String username = jedis.get("username");
System.out.println(username);//释放资源
if (jedis != null)
jedis.close();
}
封装 JedisUtil 对外提供连接对象获取方法
importredis.clients.jedis.Jedis;importredis.clients.jedis.JedisPool;importredis.clients.jedis.JedisPoolConfig;/*** 实例化 Jedis 对象工具类*/
public final classJedisUtil {//Redis 服务器 IP
private static String ADDR = "192.168.75.163";//Redis 的端口号
private static int PORT = 6379;//访问密码
private static String AUTH = "root";//可用连接实例的最大数目,默认值为 8;//如果赋值为-1,则表示不限制;如果 pool 已经分配了 maxActive 个 jedis 实例,则此时 pool 的状态为 exhausted(耗尽)。
private static int MAX_ACTIVE = 1024;//控制一个 pool 最多有多少个状态为 idle(空闲的)的 jedis 实例,默认值也是 8。
private static int MAX_IDLE = 200;//等待可用连接的最大时间,单位毫秒,默认值为-1,表示永不超时。如果超过等待时间,则直接抛出 JedisConnectionException;
private static int MAX_WAIT = 10000;private static int TIMEOUT = 10000;//在 borrow 一个 jedis 实例时,是否提前进行 validate 操作;如果为 true,则得到的 jedis 实例均是可用的;
private static boolean TEST_ON_BORROW = true;private static JedisPool jedisPool = null;/*** 初始化 Redis 连接池*/
static{try{
JedisPoolConfig config= newJedisPoolConfig();
config.setMaxTotal(MAX_ACTIVE);
config.setMaxIdle(MAX_IDLE);
config.setMaxWaitMillis(MAX_WAIT);
config.setTestOnBorrow(TEST_ON_BORROW);//jedisPool = new JedisPool(config, ADDR, PORT, TIMEOUT, AUTH);
jedisPool = newJedisPool(config, ADDR, PORT, TIMEOUT);
}catch(Exception e) {
e.printStackTrace();
}
}/*** 获取 Jedis 实例
*
*@return
*/
public synchronized staticJedis getJedis() {try{if (jedisPool != null)returnjedisPool.getResource();return null;
}catch(Exception e) {
e.printStackTrace();return null;
}
}/*** 释放 jedis 资源
*
*@paramjedis*/
public static void returnResource(finalJedis jedis) {if (jedis != null) {
jedisPool.close();
}
}
}
Java 操作 Redis 五种数据类型
连接与释放
Jedis jedis = null;/*** 连接 Redis*/@Beforepublic voidinitConn() {
jedis=JedisUtil.getJedis();
}/*** 释放资源*/@Afterpublic voidclose() {
JedisUtil.returnResource(jedis);
}
1、操作 String
@Testpublic voidtestString() {//添加一条数据
jedis.set("username", "zhangsan");
jedis.set("age", "18");//添加多条数据 参数奇数为 key 参数偶数为 value
jedis.mset("address", "bj", "sex", "1");//获取一条数据
String username = jedis.get("username");
System.out.println(username);//获取多条数据
List list = jedis.mget("username", "age", "address", "sex");for(String str : list) {
System.out.println(str);
}//删除//jedis.del("username");
}

看下结果

redis 获取文件夹 redis怎么获取数据_Test_02

2、操作 hash

@Testpublic voidtestHash() {/** 添加一条数据
* 参数一:redis 的 key
* 参数二:hash 的 key
* 参数三:hash 的 value*/jedis.hset("userInfo", "name", "lisi");//添加多条数据
Map map = new HashMap<>();
map.put("age", "20");
map.put("sex", "1");
jedis.hmset("userInfo", map);//获取一条数据
String name = jedis.hget("userInfo", "name");
System.out.println(name);//获取多条数据
List list = jedis.hmget("userInfo", "age", "sex");for(String str : list) {
System.out.println(str);
}//获取 Hash 类型所有的数据
Map userMap = jedis.hgetAll("userInfo");for (Map.EntryuserInfo : userMap.entrySet()) {
System.out.println(userInfo.getKey()+ "--" +userInfo.getValue());
}//删除 用于删除 hash 类型数据//jedis.hdel("userInfo", "name");
}

看下结果

redis 获取文件夹 redis怎么获取数据_数据_03

3、操作 list

@Testpublic voidtestList() {//左添加(上)
jedis.lpush("students", "Wang Wu", "Li Si");//右添加(下)
jedis.rpush("students", "Zhao Liu");//获取 start 起始下标 end 结束下标 包含关系
List students = jedis.lrange("students", 0, 2);for(String stu : students) {
System.out.println(stu);
}//获取总条数
Long total = jedis.llen("students");
System.out.println("总条数:" +total);//删除单条 删除列表中第一次出现的 Li Si//jedis.lrem("students", 1, "Li Si");//删除多条//jedis.del("students");
}

看下结果

redis 获取文件夹 redis怎么获取数据_Test_04

4、操作 set

@Testpublic voidtestSet() {//添加数据
jedis.sadd("letters", "aaa", "bbb", "ccc", "ddd", "eee");//获取数据
Set letters = jedis.smembers("letters");for(String letter: letters) {
System.out.println(letter);
}//删除//jedis.srem("letters", "aaa", "bbb");
}

看下结果

redis 获取文件夹 redis怎么获取数据_Test_05

5、操作 sorted set -有序

@Testpublic voidtestSortedSet() {
Map scoreMembers = new HashMap<>();
scoreMembers.put("zhangsan", 99D);
scoreMembers.put("lisi", 96D);
scoreMembers.put("wangwu", 92D);
scoreMembers.put("zhaoliu", 100D);
scoreMembers.put("tianqi", 95D);//添加数据
jedis.zadd("score", scoreMembers);//获取数据
Set scores = jedis.zrange("score", 0, 4);for(String score: scores) {
System.out.println(score);
}//获取总条数
Long total = jedis.zcard("score");
System.out.println("总条数:" +total);//删除//jedis.zrem("score", "zhangsan", "lisi");
}

看下结果

redis 获取文件夹 redis怎么获取数据_redis java 获取数据类型_06

6、Redis 中以层级关系、目录形式存储数据

@Testpublic voidtest() {//Redis 中以层级关系、目录形式存储数据
jedis.set("user:01", "user_zhangsan");
jedis.set("user:02", "user_lisi");
System.out.println(jedis.get("user:01"));
}

看下结果

redis 获取文件夹 redis怎么获取数据_redis java 获取数据类型_07

7、获取所有 key&事务&删除

//获取所有 key
@Testpublic voidtestAllKeys() {//当前库 key 的数量
System.out.println(jedis.dbSize());//当前库 key 的名称
Set keys = jedis.keys("*");for(String key: keys) {
System.out.println(key);
}
}//操作事务
@Testpublic voidtestMulti() {
Transaction tx=jedis.multi();//开启事务
tx.set("tel", "10010");//提交事务//tx.exec();//回滚事务
tx.discard();
}//删除
@Testpublic voidtestDelete() {//删除 通用 适用于所有数据类型
jedis.del("score");
}

8、操作 byte

实体类user

importjava.io.Serializable;public class User implementsSerializable {private static final long serialVersionUID = 9148937431079191022L;privateInteger id;privateString username;privateString password;publicInteger getId() {returnid;
}public voidsetId(Integer id) {this.id =id;
}publicString getUsername() {returnusername;
}public voidsetUsername(String username) {this.username =username;
}publicString getPassword() {returnpassword;
}public voidsetPassword(String password) {this.password =password;
}
@OverridepublicString toString() {return "User{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
}

序列化工具类

/*** 序列化工具类*/
public classSerializeUtil {/*** 将 java 对象转换为 byte 数组 序列化过程*/
public static byte[] serialize(Object object) {
ObjectOutputStream oos= null;
ByteArrayOutputStream baos= null;try{//序列化
baos = newByteArrayOutputStream();
oos= newObjectOutputStream(baos);
oos.writeObject(object);byte[] bytes =baos.toByteArray();returnbytes;
}catch(Exception e) {
e.printStackTrace();
}return null;
}/*** 将 byte 数组转换为 java 对象 反序列化*/
public static Object unserialize(byte[] bytes) {if(bytes == null)return null;
ByteArrayInputStream bais= null;try{//反序列化
bais = newByteArrayInputStream(bytes);
ObjectInputStream ois= newObjectInputStream(bais);returnois.readObject();
}catch(Exception e) {
e.printStackTrace();
}return null;
}
}

操作 byte

@Testpublic voidtestByte() {
User user= newUser();
user.setId(2);
user.setUsername("zhangsan");
user.setPassword("123");//序列化
byte[] userKey = SerializeUtil.serialize("user:" +user.getId());byte[] userValue =SerializeUtil.serialize(user);
jedis.set(userKey, userValue);//获取数据
byte[] userResult =jedis.get(userKey);//反序列化
User u =(User) SerializeUtil.unserialize(userResult);
System.out.println(u);
}

看下结果

redis 获取文件夹 redis怎么获取数据_redis 获取文件夹_08