Redis入门(二)——基本操作
Redis作为独立的服务端,在Java中去操作redis需要通过Redis提供的jar
z在这里特别申明,除了基本数据以及String外,其余对象,要想写入redis,必须序列化(即使是对象也要实现序列化接口),且读取redis中的数据也需要反序列化
不懂序列化的请自行百度
下面是Demo代码
Util类
package com.redis.test.util; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import com.redis.test.module.User; import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig; public class RedisTool {
// Redis服务器地址
private static String address = "127.0.0.1";
// Redis服务器端口号
private static int port = 6379; private static Jedis jedis; public static void main(String[] args) {
RedisTool redisTool = new RedisTool();
jedis = new Jedis(RedisTool.address, RedisTool.port);
System.out.println("连接成功");
redisTool.saveMap();
} /**
* 存储数组
*/
public void saveList() {
List<User> list = new ArrayList<User>();
User user1 = new User();
user1.setName("张三");
user1.setPassword("123456");
user1.setAddress("无锡市学前东路12号");
user1.setAge(23);
list.add(user1); User user2 = new User();
user2.setName("李四");
user2.setPassword("123456");
user2.setAddress("无锡市仁爱路89号");
user2.setAge(18);
list.add(user2); jedis.set(("userList").getBytes(), SerializeUtil.serialize(list));
byte[] userObjs = jedis.get(("userList").getBytes());
List<Object> userList = (List<Object>) SerializeUtil.unserialize(userObjs);
System.out.println(userList.size());
} /**
* 存储对象
*/
public void saveObject() { User user = new User();
user.setName("张三");
user.setPassword("123456");
user.setAddress("无锡市学前东路12号");
user.setAge(23);
jedis.set("user".getBytes(), SerializeUtil.serialize(user));
System.out.println("Jedis中存储的字符串为:" + jedis.get("test"));
byte[] userObj = jedis.get(("user").getBytes());
user = (User) SerializeUtil.unserialize(userObj);
System.out.println(user.toString());
} /**
* 存储Map
*/
public void saveMap() {
Map<String , String> map = new HashMap<String, String>();
map.put("name", "你好");
jedis.set("map".getBytes(), SerializeUtil.serialize(map));
byte[] mapObj = jedis.get(("map").getBytes());
Map newMap = (Map) SerializeUtil.unserialize(mapObj);
System.out.println(newMap.get("name").toString());
}
}
序列化工具类:
package com.redis.test.util; import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.Closeable;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.List; public class SerializeUtil {
public static byte[] serialize(Object object) {
ObjectOutputStream oos = null;
ByteArrayOutputStream baos = null;
byte[] bytes = null;
if(null!=object){
try {
baos = new ByteArrayOutputStream();
oos = new ObjectOutputStream(baos);
oos.writeObject(object);
bytes = baos.toByteArray();
} catch (Exception e) {
e.printStackTrace();
}
}
return bytes;
} public static Object unserialize(byte[] bytes) {
ByteArrayInputStream bais = null;
try {
// 反序列化
bais = new ByteArrayInputStream(bytes);
ObjectInputStream ois = new ObjectInputStream(bais);
return ois.readObject();
} catch (Exception e) {
e.printStackTrace();
} finally {
close(bais);
}
return null;
} /**
* 列表序列化(用于Redis整存整取)
* @param value
* @return
*/
public static <T> byte[] serializeList(List<T> value) {
if (value == null) {
throw new NullPointerException("Can't serialize null");
}
byte[] rv=null;
ByteArrayOutputStream bos = null;
ObjectOutputStream os = null;
try {
bos = new ByteArrayOutputStream();
os = new ObjectOutputStream(bos);
for(T obj : value){
os.writeObject(obj);
}
os.writeObject(null);
os.close();
bos.close();
rv = bos.toByteArray();
} catch (IOException e) {
e.printStackTrace();
} finally {
close(os);
close(bos);
}
return rv;
} /**
* 反序列化列表(用于Redis整存整取)
* @param in
* @return
*/
public static <T> List<T> unserializeForList(byte[] in) {
List<T> list = new ArrayList<T>();
ByteArrayInputStream bis = null;
ObjectInputStream is = null;
try {
if(in != null) {
bis=new ByteArrayInputStream(in);
is=new ObjectInputStream(bis);
while (true) {
T obj = (T) is.readObject();
if(obj == null){
break;
}else{
list.add(obj);
}
}
is.close();
bis.close();
}
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} finally {
close(is);
close(bis);
}
return list;
} /**
* 关闭的数据源或目标。调用 close()方法可释放对象保存的资源(如打开文件)
* 关闭此流并释放与此流关联的所有系统资源。如果已经关闭该流,则调用此方法无效。
* @param closeable
*/
public static void close(Closeable closeable) {
if (closeable != null) {
try {
closeable.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
Module类
package com.redis.test.module; import java.io.Serializable; public class User implements Serializable{ private String name; private String password; private String address; private Integer age; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password;
} public String getAddress() {
return address;
} public void setAddress(String address) {
this.address = address;
} public Integer getAge() {
return age;
} public void setAge(Integer age) {
this.age = age;
} public String toString(){
return "姓名:"+this.getName()+";"+"年龄:"+this.getAge()+";"+"地址:"+this.getAddress()+";";
}
}
Redis入门(二)——基本操作的更多相关文章
- redis入门(二)
目录 redis入门(二) 前言 持久化 RDB AOF 持久化文件加载 高可用 哨兵 流程 安装部署 配置技巧 集群 原理 集群搭建 参考文档 redis入门(二) 前言 在redis入门(一)简单 ...
- <Redis> 入门二 五种数据类型的操作、通用key的操作、发布订阅
文档参考:http://www.redis.net.cn/ string - > key value 简单的keyvalue,常规计数:例如微博数,粉丝数 set -> key v ...
- redis入门(一)
目录 redis入门(一) 前言 特性 速度快 简单稳定 丰富的功能 历史 历史版本 安装与启动 安装 数据类型与内部编码 数据结构 内部编码 常用API与使用场景 常用命令 字符串 列表 哈希 集合 ...
- redis入门(三)
目录 redis入门(三) 目录 前言 事务 原理 Lua脚本 安装 脚本命令 集群搭建工具 redis-trib.rb redis官方集群搭建 集群横向扩展 故障转移 redis管理 参考文档 re ...
- Redis(二):Redis入门介绍
Redis入门介绍目录导航: 入门概述 VMWare + VMTools千里之行始于足下 Redis的安装 Redis启动后杂项基础知识讲解 入门概述 是什么 Redis:REmote DIction ...
- Redis入门很简单之二【常见操作命令】
Redis入门很简单之二[常见操作命令] 博客分类: NoSQL/Redis/MongoDB redisnosql缓存 Redis提供了丰富的命令,允许我们连接客户端对其进行直接操作.这里简单介绍一 ...
- SpringBoot开发二十-Redis入门以及Spring整合Redis
安装 Redis,熟悉 Redis 的命令以及整合Redis,在Spring 中使用Redis. 代码实现 Redis 内置了 16 个库,索引是 0-15 ,默认选择第 0 个 Redis 的常用命 ...
- redis入门到精通系列(二):redis操作的两个实践案例
在前面一篇博客中我们已经学完了redis的五种数据类型操作,回顾一下,五种操作类型分别为:字符串类型(string).列表类型(list).散列类型(hash).集合类型(set).有序集合类型(so ...
- Redis入门教程(二)
推荐阅读: Redis入门教程(一)https://www.cnblogs.com/jichi/p/10285346.html 5. Redis 的数据结构 5.1 Redis 数据结构介绍 redi ...
- Redis入门指南之二(安装及配置)
本节主要内容 1. 前言2. redis安装3. 启动和停止Redis 1. 前言 安装Redis需要知道自己需要哪个版本,有针对性的安装,比如如果需要redis GEO这个地理集合的特性,那么red ...
随机推荐
- IJG JPEG使用说明
IJG JPEG库使用说明 版权所有:1994-1998,Thomas G. Lane 本文档是IJG软件的一部分. 分发和使用的条件请参看README文档. 本文档讲述如何在应用程序中使用IJG(I ...
- OpenCV.学习OpenCV.pdf
1.Pdf.P160(书.P129) “表5-1:平滑操作的各总类型” 的列名 看起来很模糊,现在先把尽可能看得清的字记录下来: 平滑类型 名称 支持 No 输入数据类型 输出数据类型 简要说明 2. ...
- iostream
cout 星号*为默认 控制符 描 述 控制符 描 述 *dec 以十进制形式输出整数 hex 以十六进制形式输出整数 oct 以八进制形式输出整数 fixed 以普通小数形式输出浮点数 scient ...
- vue中 :style 与 :class 三元运算符使用
参考链接:https://www.jianshu.com/p/31664974303d
- spring中的BeanFactoryPostProcessor
spring中的BeanFactoryPostProcessor和BeanPostProcessor有些像,BeanPostProcessor是在bean的初始化前后进行一些操作, BeanFacto ...
- H3C路由器登录策略专题讲解
password-control login-attempt login-times [ exceed { lock | lock-time time | unlock } ] undo passwo ...
- 【AtCoder】AGC011
AGC011 A - Airport Bus 大意:有N个人,每个人只能在\([T_i,T_i +K]\)这段区间乘车,每辆车安排C人,问最少安排几辆车 直接扫,遇到一个没有车的在\(T_i +K\) ...
- POJ1631_高深DP
按照那个图形研究比较了一会, 居然发现是最长上升子序列问题, 这个是真的牛逼!! 只不过是题目没有说的那么直白!
- Laravel 最佳实践
单一职责原则 一个类和一个方法应该只有一个责任. 例如: public function getFullNameAttribute() { if (auth()->user() &&am ...
- linux fork进程请谨慎多个进程/线程共享一个 socket连接,会出现多个进程响应串联的情况。
昨天组内同学在使用php父子进程模式的时候遇到了一个比较诡异的问题 简单说来就是:因为fork,父子进程共享了一个redis连接.然后父子进程在发送了各自的redis请求分别获取到了对方的响应体. 复 ...