redis java版_Java版的Redis

package com.cdai.studio.redis;

import java.util.HashSet;

import java.util.LinkedList;

import java.util.TreeSet;

@SuppressWarnings("unchecked")

public class RedisDB {

private Persistence persistence = new Persistence();

private Serializer serializer = new Serializer();

private static final Object[] NULL = new Object[0];

// =================================================

//String value

// =================================================

public void Set(String key, Object value) {

persistence.put(key, serializer.marshal(value));

}

public Object Get(String key) {

return serializer.unmarshal(persistence.get(key));

}

public Object[] MGet(String... keys) {

Object[] values = new Object[keys.length];

for (int i = 0; i < keys.length; i++)

values[i] = Get(keys[i]);

return values;

}

public int Incr(String key) {

Object value = Get(key);

Integer valueRef = (value == null) ? 1 : (Integer) value;

Set(key, valueRef + 1);

return valueRef;

}

// =================================================

//List value

// =================================================

public void LPush(String key, Object... values) {

Object list = persistence.get(key);

if (list == null)

list = new LinkedList();

else

list = serializer.unmarshal(list);

LinkedList listRef = (LinkedList) list;

for (Object value : values)

listRef.addFirst(value);

persistence.put(key, serializer.marshal(list));

}

public void RPush(String key, Object... values) {

Object list = persistence.get(key);

if (list == null)

list = new LinkedList();

else

list = serializer.unmarshal(list);

LinkedList listRef = (LinkedList) list;

for (Object value : values)

listRef.addLast(value);

persistence.put(key, serializer.marshal(list));

}

public Object[] LRange(String key, int start, int end) {

Object list = persistence.get(key);

if (list == null)

return NULL;

LinkedList listRef = (LinkedList) serializer.unmarshal(list);

if (end > listRef.size())

end = listRef.size();

return listRef.subList(start, end).toArray();

}

// =================================================

//Unsorted Set value

// =================================================

public void SAdd(String key, Object... values) {

Object set = persistence.get(key);

if (set == null)

set = new HashSet();

else

set = serializer.unmarshal(set);

HashSet setRef = (HashSet) set;

for (Object value : values)

setRef.add(value);

persistence.put(key, serializer.marshal(set));

}

public Object[] SMembers(String key) {

Object set = persistence.get(key);

if (set == null)

return NULL;

set = serializer.unmarshal(set);

return ((HashSet) set).toArray();

}

public Object[] SInter(String key1, String key2) {

Object set1 = persistence.get(key1);

Object set2 = persistence.get(key2);

if (set1 == null || set2 == null)

return NULL;

HashSet set1Ref = (HashSet) serializer.unmarshal(set1);

HashSet set2Ref = (HashSet) serializer.unmarshal(set2);

set1Ref.retainAll(set2Ref);

return set1Ref.toArray();

}

public Object[] SDiff(String key1, String key2) {

Object set1 = persistence.get(key1);

Object set2 = persistence.get(key2);

if (set1 == null || set2 == null)

return NULL;

HashSet set1Ref = (HashSet) serializer.unmarshal(set1);

HashSet set2Ref = (HashSet) serializer.unmarshal(set2);

set1Ref.removeAll(set2Ref);

return set1Ref.toArray();

}

// =================================================

//Sorted Set value

// =================================================

public void ZAdd(String key, Object... values) {

Object set = persistence.get(key);

if (set == null)

set = new TreeSet();

else

set = serializer.unmarshal(set);

TreeSet setRef = (TreeSet) set;

for (Object value : values)

setRef.add(value);

persistence.put(key, serializer.marshal(set));

}

public Object[] SRange(String key, Object from) {

Object set = persistence.get(key);

if (set == null)

return NULL;

set = serializer.unmarshal(set);

return ((TreeSet) set).tailSet(from).toArray();

}

}package com.cdai.studio.redis;

import java.io.ByteArrayInputStream;

import java.io.ByteArrayOutputStream;

import java.io.IOException;

import java.io.ObjectInputStream;

import java.io.ObjectOutputStream;

import java.io.Serializable;

import java.util.Arrays;

class Serializer {

Object marshal(Object object) {

if (object == null)

return null;

return new BytesWrapper((Serializable) object);

}

Object unmarshal(Object object) {

if (object == null)

return null;

return ((BytesWrapper) object).readObject();

}

}

class BytesWrapper {

private byte[] bytes;

BytesWrapper(T object) {

writeBytes(object);

}

void writeBytes(T object) {

try {

ByteArrayOutputStream buffer = new ByteArrayOutputStream();

ObjectOutputStream output = new ObjectOutputStream(buffer);

output.writeObject(object);

output.flush();

bytes = buffer.toByteArray();

output.close();

}

catch (IOException e) {

e.printStackTrace();

throw new IllegalStateException(e);

}

}

Object readObject() {

try {

ObjectInputStream input = new ObjectInputStream(new ByteArrayInputStream(bytes));

Object object = input.readObject();

input.close();

return object;

}

catch (Exception e) {

e.printStackTrace();

throw new IllegalStateException(e);

}

}

@Override

public int hashCode() {

final int prime = 31;

int result = 1;

result = prime * result + Arrays.hashCode(bytes);

return result;

}

@Override

public boolean equals(Object obj) {

if (this == obj)

return true;

if (obj == null)

return false;

if (getClass() != obj.getClass())

return false;

BytesWrapper other = (BytesWrapper) obj;

if (!Arrays.equals(bytes, other.bytes))

return false;

return true;

}

}package com.cdai.studio.redis;

import java.util.HashMap;

class Persistence {

private HashMap storage =

new HashMap();

void put(String key, Object value) {

storage.put(key, value);

}

Object get(String key) {

return storage.get(key);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值