java对redis的常规存储操作示例

1.首先建立redis的连接池操作工具类,代码如下:

package com.zgj.redis.util;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

/**
 * 该类是用于连接redis的工具类
 */
public class RedisUtil {

    private static  String ADDR = "localhost";

    private static int PORT = 6379;

    //连接实例的最大连接数
    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;

    /**
     * 初始化连接池
     */
    static{
        try {
            JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
            jedisPoolConfig.setMaxTotal(MAX_ACTIVE);
            jedisPoolConfig.setMaxIdle(MAX_IDLE);
            jedisPoolConfig.setMaxWaitMillis(MAX_WAIT);
            jedisPoolConfig.setTestOnBorrow(TEST_ON_BORROW);
            jedisPool = new JedisPool(jedisPoolConfig,ADDR,PORT,TIMEOUT);
            System.out.println("连接池初始化成功.....");
        }catch (Exception e){
            System.out.println("连接池初始化错误.....");
            e.printStackTrace();
        }
    }

    /**
     * 从连接池获取连接
     * @return
     */
    public synchronized static Jedis getJedis(){
        try{
            if(jedisPool != null){
                Jedis jedis = jedisPool.getResource();
                return jedis;
            }else{
                return null;
            }
        }catch (Exception e){
            System.out.println("获取redis连接实例失败.....");
            e.printStackTrace();
            return null;
        }
    }

    /**
     * 释放连接
     */
    public static void releaseResource(final Jedis jedis){
        if(jedis != null){
            jedisPool.returnResource(jedis);
            System.out.println("连接已释放....");
        }
    }
}

2.创建序列化对象操作类,代码如下:

package com.zgj.redis.util;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

/**
 * 序列化和反序列化对象操作类
 */
public class SerializeUtil {
    /**
     * 将对象序列化成字节数组
     * @param object 待序列化对象
     * @return byte[]
     */
    public static byte[] serializeObject(Object object){
        ObjectOutputStream oos = null;
        ByteArrayOutputStream baos = null;
        try{
            baos = new ByteArrayOutputStream();
            oos = new ObjectOutputStream(baos);
            oos.writeObject(object);
            byte[] res = baos.toByteArray();
            return res;
        }catch (Exception e){
            System.out.println("序列化对象异常.....");
            e.printStackTrace();
            return null;
        }
    }

    /**
     * 反序列化对象
     * @param array 序列化后的字节数组
     * @return Object
     */
    public static Object unserializeObject(byte[] array){
        ByteArrayInputStream bais = null;
        try{
            bais = new ByteArrayInputStream(array);
            ObjectInputStream ois = new ObjectInputStream(bais);
            Object object = ois.readObject();
            return object;
        }catch (Exception e){
            System.out.println("反序列化对象异常......");
            e.printStackTrace();
            return null;
        }
    }
}

3.创建user实体类,代码如下:

package com.zgj.redis.bean;

import lombok.AllArgsConstructor;
import lombok.Data;

import java.io.Serializable;

@Data
@AllArgsConstructor
public class User implements Serializable {
    private String name;
    private String password;
    private int age;
}

3.创建redis操作数据类,代码如下:

package com.zgj.redis.dao;

import com.zgj.redis.bean.User;
import com.zgj.redis.util.RedisUtil;
import com.zgj.redis.util.SerializeUtil;
import redis.clients.jedis.Jedis;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;

public class RedisMapper {

    private Jedis jedis;

    private Scanner scanner = new Scanner(System.in);

    /**
     * 连接redis服务器
     */
    public void connectRedis(){
        jedis = RedisUtil.getJedis();
        System.out.println("连接建立成功....");
    }

    /**
     * 操作字符串
     * @param action
     */
    public void doString(String action){
        String key;
        String value;
        switch (action){
            case "add":
                System.out.println("请输入键:");
                key = scanner.nextLine();
                System.out.println("请输入值:");
                value = scanner.nextLine();
                jedis.set(key,value);
                System.out.println("添加成功.....");
                break;

            case "append":
                System.out.println("请输入键:");
                key = scanner.nextLine();
                System.out.println("请输入值:");
                value = scanner.nextLine();
                jedis.append(key,value);
                System.out.println("拼接成功.....");
                break;
            case "delete":
                System.out.println("请输入键:");
                key = scanner.nextLine();
                jedis.del(key);
                System.out.println("删除成功.....");
                break;
            case "update":
                System.out.println("请输入键:");
                key = scanner.nextLine();
                System.out.println("请输入新的值:");
                value = scanner.nextLine();
                jedis.set(key,value);
                System.out.println("修改成功.....");
                break;
            case "select":
                System.out.println("请输入键:");
                key = scanner.nextLine();
                System.out.println("查询成功,值是:"+jedis.get(key));
                break;
            default:
                System.out.println("选择无效.....");
                break;
        }
    }

    /**
     * 操作map
     * @param action
     */
    public void doMap(String action){
        String key;
        String value;
        Map<String,String> map = new HashMap<>();
        map.put("name","zgj");
        map.put("password","zgjzzm");
        switch (action){
            case "add":
                jedis.hmset("user",map);
                System.out.println("添加成功.....");
                break;
            case "delete":
                jedis.hdel("user","name","password");
                System.out.println("删除成功.....");
                break;
            case "update":
                System.out.println("请输入键:");
                key = scanner.nextLine();
                System.out.println("请输入新的值:");
                value = scanner.nextLine();
                map.put(key,value);
                jedis.hmset("user",map);
                System.out.println("修改成功.....");
                break;
            case "select":
                List<String> rsmap = jedis.hmget("user", "name","password");
                System.out.println("查询成功,值是:");
                System.out.println(rsmap);
                break;
            default:
                System.out.println("选择无效.....");
                break;
        }
    }

    public void doList(String action){
        String key = "list";
        String value;
        switch (action){
            case "add":
                System.out.println("请输入值:");
                value = scanner.nextLine();
                jedis.lpush(key,value);
                System.out.println("添加成功.....");
                break;
            case "delete":
                System.out.println("请输入需要删除的值:");
                value = scanner.next();
                jedis.lrem(key,0,value);
                System.out.println("删除成功.....");
                break;
            case "update":
                System.out.println("请输入索引值:");
                int index = scanner.nextInt();
                System.out.println("请输入新的值:");
                value = scanner.next();
                jedis.lset(key,index,value);
                System.out.println("修改成功.....");
                break;
            case "select":
                System.out.println("查询成功,值是:");
                System.out.println(jedis.lrange(key,0,-1));
                break;
            default:
                System.out.println("选择无效.....");
                break;
        }
    }

    /**
     * redis操作对象
     */
    public void doObject(String action){
        String key;
        User value = new User("zgj","123456",23);
        switch (action){
            case "add":
                System.out.println("请输入键:");
                key = scanner.nextLine();
                jedis.set(key.getBytes(), SerializeUtil.serializeObject(value));
                System.out.println("添加成功.....");
                break;
            case "delete":
                System.out.println("请输入需要删除的键:");
                key = scanner.next();
                jedis.del(key.getBytes());
                System.out.println("删除成功.....");
                break;
            case "select":
                System.out.println("请输入需要查询的键:");
                key = scanner.nextLine();
                byte[] res = jedis.get(key.getBytes());
                User user = (User)SerializeUtil.unserializeObject(res);
                System.out.println("查询成功,数据如下:\n"+user.toString());
                break;
            default:
                System.out.println("选择无效.....");
                break;
        }
    }
    /**
     * 释放连接
     */
    public void realseResource(){
        if(jedis != null){
            RedisUtil.releaseResource(jedis);
        }
    }
}

4.创建测试类,代码如下:

package com.zgj.redis.controller;

import com.zgj.redis.dao.RedisMapper;

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        RedisMapper redis = new RedisMapper();
        redis.connectRedis();
        String action ;
        while(true){
            action = scan.nextLine();
            redis.doObject(action);
        }
    }
}

5.部分运行结果插图:
在这里插入图片描述
6.maven相关依赖如下:

<?xml version="1.0" encoding="UTF-8"?>
<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>com.zgj.redis.learn</groupId>
    <artifactId>redis_java</artifactId>
    <version>1.0-SNAPSHOT</version>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>2.5.0</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.8</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.0.2</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值