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 ...
随机推荐
- Beta冲刺博客
这个作业属于哪个课程 当然是属于程序分析与设计呀 这个作业要求在哪里 在这儿 团队名称 六扇门编程小组(团队博客) 这个作业的目标 完成为期两周的β版本冲刺 1.团队信息 姓名 学号 曹欢(组长) 2 ...
- nodejs nvm npm常用命令
---恢复内容开始--- 一行命令搞定node.js 版本升级 node有一个模块叫n(这名字可够短的...),是专门用来管理node.js的版本的. 首先安装n模块: npm install -g ...
- java学习(东软睿道)2019-09-07(预课html基础)《随堂笔记》
1. 文件名称.html 2. 后缀表示文件类型.txt .doc .ppt 3. 标签<html> <head> <body> 显示内容 <font siz ...
- Spring Boot 创建动态定时任务
1,日期格式转换 //定时任务格式转换public static String convertCronTime(Date jobDate){ //https://blog.csdn.net/qq_39 ...
- 关于MD5加盐使用
md5 是一种数据加密,例子是对123456 进行了两次加盐 第一次是 inputPassToFormPass salt是固定的 1a2b3c4d 第二次是 formPassToDBPass s ...
- Spring4学习回顾之路09-基于注解的方式配置bean
一:基于注解配置Bean 首先介绍下组件扫描(component scanning): Spring能够从classpath下自动扫描,侦测和实例化具有特定注解的组件. 包括: -@Component ...
- Redis 常用命令整理
哈希表:设置秒中某个字段 HMSET KEY_NAME FIELD1 VALUE1 ...FIELDN VALUEN EX: 127.0.0.1:6380> hmset set_map LOGD ...
- Python可修改和不可修改类型变量(mutuable and immutuable)
通俗的讲,可修改可以理解为可以在数据所在内存地址直接修改,而不可修改则意味着一旦修改便是创建新的数据对象,而不是在原来的对象内存地址修改 1,Mutuable object [sourcecode l ...
- linux下mysql启动 Starting MySQL. ERROR! The server quit without updating PID file(xxx/x.pid)
service mysql start 报错: Starting MySQL. ERROR! The server quit without updating PID file(xxx/x.pid) ...
- Memcache与Redis有什么区别?
Redis 和 Memcache 都是基于内存的数据存储系统.Memcached是高性能分布式内存缓存服务,其本质上就是一个内存key-value数据库.Redis是一个开源的key-value存储系 ...