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入门(二)——基本操作的更多相关文章

  1. redis入门(二)

    目录 redis入门(二) 前言 持久化 RDB AOF 持久化文件加载 高可用 哨兵 流程 安装部署 配置技巧 集群 原理 集群搭建 参考文档 redis入门(二) 前言 在redis入门(一)简单 ...

  2. <Redis> 入门二 五种数据类型的操作、通用key的操作、发布订阅

    文档参考:http://www.redis.net.cn/ string - > key value 简单的keyvalue,常规计数:例如微博数,粉丝数 set     -> key v ...

  3. redis入门(一)

    目录 redis入门(一) 前言 特性 速度快 简单稳定 丰富的功能 历史 历史版本 安装与启动 安装 数据类型与内部编码 数据结构 内部编码 常用API与使用场景 常用命令 字符串 列表 哈希 集合 ...

  4. redis入门(三)

    目录 redis入门(三) 目录 前言 事务 原理 Lua脚本 安装 脚本命令 集群搭建工具 redis-trib.rb redis官方集群搭建 集群横向扩展 故障转移 redis管理 参考文档 re ...

  5. Redis(二):Redis入门介绍

    Redis入门介绍目录导航: 入门概述 VMWare + VMTools千里之行始于足下 Redis的安装 Redis启动后杂项基础知识讲解 入门概述 是什么 Redis:REmote DIction ...

  6. Redis入门很简单之二【常见操作命令】

    Redis入门很简单之二[常见操作命令] 博客分类: NoSQL/Redis/MongoDB redisnosql缓存  Redis提供了丰富的命令,允许我们连接客户端对其进行直接操作.这里简单介绍一 ...

  7. SpringBoot开发二十-Redis入门以及Spring整合Redis

    安装 Redis,熟悉 Redis 的命令以及整合Redis,在Spring 中使用Redis. 代码实现 Redis 内置了 16 个库,索引是 0-15 ,默认选择第 0 个 Redis 的常用命 ...

  8. redis入门到精通系列(二):redis操作的两个实践案例

    在前面一篇博客中我们已经学完了redis的五种数据类型操作,回顾一下,五种操作类型分别为:字符串类型(string).列表类型(list).散列类型(hash).集合类型(set).有序集合类型(so ...

  9. Redis入门教程(二)

    推荐阅读: Redis入门教程(一)https://www.cnblogs.com/jichi/p/10285346.html 5. Redis 的数据结构 5.1 Redis 数据结构介绍 redi ...

  10. Redis入门指南之二(安装及配置)

    本节主要内容 1. 前言2. redis安装3. 启动和停止Redis 1. 前言 安装Redis需要知道自己需要哪个版本,有针对性的安装,比如如果需要redis GEO这个地理集合的特性,那么red ...

随机推荐

  1. 【Qt开发】QT4 升级到 QT5 改动

    QT4 升级到 QT5 改动: PC部分: [改 QTDIR 变量] 在工程根目录下找到 .user 文件 ,  如 InnoTabPlugin.vcxproj.user 修改指向你的 QT5 根目录 ...

  2. cvpr2015papers

    @http://www-cs-faculty.stanford.edu/people/karpathy/cvpr2015papers/ CVPR 2015 papers (in nicer forma ...

  3. codevs 1039:数的划分

    http://codevs.cn/problem/1039/ 题目描述 Description将整数n分成k份,且每份不能为空,任意两种划分方案不能相同(不考虑顺序).例如:n=7,k=3,下面三种划 ...

  4. pytorch API中sgd.py的学习记录

    参考:PyTorch与caffe中SGD算法实现的一点小区别 其中公式(3)(4)的符号有问题 变量对应表 程序 参考文章 buf v momentum μ d_p Δf(θ) lr ξ p θ

  5. studio git创建与删除标签(Tag)

    代码托管平台 码云 git工具 Git git上的标签一般是用于标记版本, 当发布新版本后,便将该版本的代码打上Tag,用以区别及管理 使用标签前需要将代码提交到马云上 以上是提交git. 创建并提交 ...

  6. 更改oracle RAC public ip,vip,scan ip和private ip

    更改oracle RAC public ip,vip,scan ip和private ip oifcfg - Oracle 接口配置工具 用法:  oifcfg iflist [-p [-n]]    ...

  7. Scala学习十四——模式匹配和样例类

    一.本章要点 match表达式是更好的switch,不会有意外调入下一个分支 如果没有模式能够匹配,会抛出MatchError,可以用case _模式避免 模式可以包含一个随意定义的条件,称做守卫 你 ...

  8. OkHttp3 + retrofit2 封装

    0.下载文件 1.gradle 添加 compile 'com.squareup.retrofit2:retrofit:2.1.0'compile 'com.squareup.retrofit2:co ...

  9. 偏移动画(TranslateTransform)

    用户界面组件.图像元素和多媒体功能可以让我们的界面生动活泼,除此之外,Silverlight还具备动画功能,它可以让应用程序“动起来”.实际上,英文中Animation这个单词的意思是给某物带来生命. ...

  10. git diff 的简单使用(比较版本区别)

    假如我们修改viewMail.vue 文件(部分代码) 从 //根据ID获取详情 getById () { let that = this; this.viewMailModal = true; th ...