介绍:
redis是一个key-value存储系统。可以做消息队列和缓存等,当然存储的类型不只是String-String那么简单,还有List、Set、Obj等。
一、redis安装
redis的安装类似于tomcat的安装,解压即可。Redis-x64-3.2.100.zip
解压之后可以看到redis-cli.exe、redis-server.exe 前者是客户端,后面的是服务端,服务端启动之后使用客户端就能链接进行存储内容了。
(1)服务端启动
在win的dos窗口下切换到解压目录,执行下面命令。注意:前面的目录不是命令,以下不再赘述
D:\Java\extends-service\Redis-3.2.100>redis-server.exe redis.windows.conf
在解压目录中可以看到这两个配置文件:redis.windows.conf、redis.windows-service.conf。配置内容详解参考
两个配置文件都可以启动服务端,但效果不同。
1)redis.windows.conf的效果
2)redis.windows-service.conf的效果
比较可得,redis.windows.conf能够启动redis服务并实现日志的监控,后者仅启动服务。
二、redis客户端测试
服务端启动之后,再开启一个dos窗口,执行以下命令
1)本地连接
D:\Java\extends-service\Redis-3.2.100>redis-cli.exe
测试redis存储key-value
设置key
127.0.0.1:6379> set myblog 'http://blog.csdn.net/Qiufeng_0ng'
获取value
127.0.0.1:6379> get myblog
2)远程连接
在公网服务器上运行redis服务,在本地客户端连接服务器。
D:\Java\extends-service\Redis-3.2.100>redis-cli.exe -h IP -p Port
三、程序中使用redis
首先添加redis.jar,这个自己在网上找。
1)连接本地redis获取所有key
package com.zut.test;
import java.util.Iterator;
import java.util.Set;
import redis.clients.jedis.Jedis;
public class RedisKeyJava {
public static void main(String[] args) {
//连接本地的 Redis 服务
Jedis jedis = new Jedis("localhost");
System.out.println("连接成功");
// 获取数据并输出
Set<String> keys = jedis.keys("*");
Iterator<String> it=keys.iterator() ;
while(it.hasNext()){
String key = it.next();
System.out.println(key);
}
}
}
2)存储String类型
package com.zut.test;
import redis.clients.jedis.Jedis;
public class RedisStringJava {
public static void main(String[] args) {
//连接本地的 Redis 服务
Jedis jedis = new Jedis("localhost");
System.out.println("连接成功");
//设置 redis 字符串数据
jedis.set("runoobkey", "www.runoob.com");
// 获取存储的数据并输出
System.out.println("redis 存储的字符串为: "+ jedis.get("runoobkey"));
}
}
3)存储List类型
package com.zut.test;
import java.util.List;
import redis.clients.jedis.Jedis;
public class RedisListJava {
public static void main(String[] args) {
//连接本地的 Redis 服务
Jedis jedis = new Jedis("localhost");
System.out.println("连接成功");
//存储数据到列表中
jedis.lpush("site-list", "Runoob");
jedis.lpush("site-list", "Google");
jedis.lpush("site-list", "Taobao");
// 获取存储的数据并输出
List<String> list = jedis.lrange("site-list", 0 ,2);
for(int i=0; i<list.size(); i++) {
System.out.println("列表项为: "+list.get(i));
}
}
}
4)存储Map类型
package com.zut.test;
import java.util.HashMap;
import java.util.Map;
import redis.clients.jedis.Jedis;
public class RedistMap {
public static void main(String[] args) {
Jedis jedis = new Jedis("localhost", 6379);
Map<String, String> map = new HashMap<>();
map.put("zhangsan", "201300824111");
map.put("lisi", "201300824112");
map.put("wangwu", "201300824113");
jedis.hmset("user-1", map);
System.out.println(jedis.hvals("user-1"));
}
}
5)存储对象
package com.zut.test;
import com.zut.domain.User;
import com.zut.utils.SerializationUtil;
import redis.clients.jedis.Jedis;
public class RedisObj {
public static void main(String[] args) {
Jedis jedis = new Jedis("10.10.31.53", 6379);
User user = new User("1", "范**", "男", "网络131", "网络工程", "1261525@qq.com", "181378007");
User user1 = new User("2", "段**", "男", "网络131", "网络工程", "1261526@qq.com", "181378008");
User user2 = new User("3", "韩**", "男", "网络131", "网络工程", "1261827@qq.com", "181378009");
User user3 = new User("4", "李**", "男", "网络131", "网络工程", "1261528@qq.com", "181378010");
// jedis.set("user".getBytes(), SerializationUtil.serialize(user));
jedis.lpush("uu".getBytes(), SerializationUtil.serialize(user));
jedis.lpush("uu".getBytes(), SerializationUtil.serialize(user1));
jedis.lpush("uu".getBytes(), SerializationUtil.serialize(user2));
jedis.lpush("uu".getBytes(), SerializationUtil.serialize(user3));
byte[] bt = null;
while((bt = jedis.lpop("uu".getBytes())) != null) {
User person = (User)SerializationUtil.deserialize(bt);
System.out.println(person.toString());
}
// byte[] bs= jedis.get("user".getBytes());
// User person = (User)SerializationUtil.deserialize(bs);
//
// System.out.println(person.toString());
}
}
存储对象需要序列化与反序列化
package com.zut.utils;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
public class SerializationUtil {
/**
* 序列化
*
* @param object
* @return
*/
public static byte[] serialize(Object object) {
ObjectOutputStream oos = null;
ByteArrayOutputStream baos = null;
try {
baos = new ByteArrayOutputStream();
oos = new ObjectOutputStream(baos);
oos.writeObject(object);
byte[] bytes = baos.toByteArray();
return bytes;
} catch (Exception e) {
}
return null;
}
/**
* 反序列化
*
* @param bytes
* @return
*/
public static Object deserialize(byte[] bytes) {
ByteArrayInputStream bais = null;
try {
bais = new ByteArrayInputStream(bytes);
ObjectInputStream ois = new ObjectInputStream(bais);
return ois.readObject();
} catch (Exception e) {
}
return null;
}
}