Redis 使用

准备环境:打开虚拟机,ip addr 查看IP地址,关闭防火墙

finashell远程连接,打开redis的src目录下,./redis-server …/redis-conf打开服务

再打开另外的窗口,./redis-cli远程连接,

#查看Linux进程
ps -ef | grep redis
#结束进程
kill -9 对应的进程编号

利用反射Redis存值

标记那些对象可以存储在redis中,新建一个接口,让想要存进redis的对象实现这个接口,这样就可以区分那些对象是想要存进redis的了

public static void hashSetAdd(RedisObject object) throws InvocationTargetException, IllegalAccessException {
        Jedis jedis = new Jedis("192.168.128.129");
        //验证密码
        jedis.auth("123456");
        //获取反射类的类型
        Class<? extends RedisObject> objectClass = object.getClass();
        //获取本类中的所有的get方法
        Method[] methods = objectClass.getDeclaredMethods();
        for (Method method : methods) {
            String methodName = method.getName();
            //只需要get开头的
            if (methodName.startsWith("get")){
                //从第三个开始取值
                String field = methodName.substring(3);
                //get方法的值
                Object value = method.invoke(object);
                //把值存进Redis中
                jedis.hset(objectClass.getName(),field,value.toString());
            }
        }
        //验证连接
//        jedis.ping();
        jedis.close();
 }

    public static void main( String[] args ) throws InvocationTargetException, IllegalAccessException {
        //设置想要存储的对象的值
        User user = new User(1,"xiongjing",18);
        hashSetAdd(user);

    }

finaShell运行结果:

127.0.0.1:6379> keys *
1) "name"
2) "menuList"
3) "userList"
4) "com.layjava.bean.User"
5) "userSet"
127.0.0.1:6379> HGETAll com.layjava.bean.User
1) "Name"
2) "xiongjing"
3) "Age"
4) "18"
5) "UserId"
6) "1"

首字母变为小写的方法

/**
     * 首字母小写
     * @param string
     * @return
     */
    public static String firstLowerCase(String string){
        Character c = string.charAt(0);
        return string.replaceFirst(c.toString(), c.toString().toLowerCase());
    }

序列化与反序列化

序列化:将对象转换成二进制(字节数组)的过程,(把对象转化成二进制后,可以存储在任何地方)

反序列化:将二进制转换(字节数组)转化成对象的过程(存储起来肯定要去用,这就是反序列化)

package org.example;

import com.layjava.bean.User;
import redis.clients.jedis.Jedis;

import java.io.*;

/**
 * @description: 序列化和反序列化
 * @program: 2020.4.21RedisDemo
 * @author: Ldr
 * @date: 2020-06-03 07:08
 **/
public class RedisDemo {

    private byte[] serialize;

    /**
     * 序列化
     * @param object 将一个对象转化成一个二进制(字节数组)
     * @return 数组
     */
    public static byte[] serialize(Object object){
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        try {
            ObjectOutputStream objectOutputStream = new ObjectOutputStream(outputStream);
            //将对象写入到对象输出流中
            objectOutputStream.writeObject(object);
            //将对象转换成字节数组
            return outputStream.toByteArray();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 反序列化
     * @param bytes 将字节数组转换成对象
     * @return 对象
     */
    public static Object unSerialize(byte[] bytes){
        ByteArrayInputStream inputStream = new ByteArrayInputStream(bytes);
        try {
            ObjectInputStream objectInputStream = new ObjectInputStream(inputStream);
            //将字节数组读取入输入流中
            return objectInputStream.readObject();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        return null;
    }


    public static void main(String[] args) {
        Jedis jedis = new Jedis("192.168.128.129");
        jedis.auth("123456");

        //序列化:将对象转换成二进制(字节数组)的过程
//        User user = new User(1,"liangxiong",45);
//        byte[] serialize = serialize(user);
//        //可以在这里存储文件,存储到内存
//        jedis.set((user.getUserId()+"").getBytes(),serialize);
        //反序列化:将二进制(字节数组)转化成对象的过程
//        User unSerialize = (User) unSerialize(serialize);

        byte[] bytes = jedis.get("1".getBytes());
        //反序列化
        User value = (User) unSerialize(bytes);
        System.out.println(value.getName());
    }
}