首先是安装环境
windows版redis:https://github.com/MSOpenTech/redis/releases
linux版redis:http://redis.io/download
我的电脑是windows版本接下来windows为例,现在我们的环境安装好了,接下来是要启动redis服务,启动要在两个dos界面输入命令,为了方便我将这两条命令做成批处理,
start redis-server.exeredis.windows.conf
start redis-cli.exe -h 127.0.0.1 -p 6379
将这两句话写入txt文件保存后,将文件后缀改为bat就可以直接启动(这个文件要放在下载回来的redis文件下)
前期准备工作已经完成,接下来可以了解redis是个什么东西了。简单的来说redis是一个分布式的(string,object)的一个map,可以用于信息之间的传递。下面是java和redis的使用。
public class RedisJava {
public static void main(String[] args) {
//连接本地redis服务(本地服务要先开呀)
Jedis jedis=new Jedis("localhost");
System.out.println("连接成功");
//查看服务网是否运行
System.out.println("服务正在运行:"+jedis.ping());
// RedisJava.operationList(jedis);
// System.out.println(jedis.get("n1"));
}
public static void operationString(Jedis jedis){
jedis.set("key", "value");//添加数据
jedis.append("key", "s");//追加数据
System.out.println(jedis.get("key"));
jedis.del("key");//删除数据
System.out.println(jedis.get("key"));
//设置多个键值对
jedis.mset("name","liangjianyaun","age","23","qq","476777XXX");
System.out.println(jedis.get("name"));
}
public static void operationMap(Jedis jedis){
//-----添加数据----------
Map<String, String> map = new HashMap<String, String>();
map.put("name", "liangjianyuan");
map.put("age", "23");
map.put("qq", "123456");
jedis.hmset("user",map);
List<String> rsmap = jedis.hmget("user", "name", "age", "qq");
System.out.println(rsmap);
//删除某一个键值
jedis.hdel("user", "qq");
System.out.println(jedis.hmget("user", "qq"));
System.out.println(jedis.hlen("user"));//key的个数
System.out.println(jedis.hkeys("user"));//返回所有的key值
System.out.println(jedis.hexists("user", "qq"));//判断是否有这个key
System.out.println(jedis.hvals("user"));
Iterator<String> iter=jedis.hkeys("user").iterator();
while (iter.hasNext()){
String key = iter.next();
System.out.println(key+":"+jedis.hmget("user",key));
}
}
public static void operationList(Jedis jedis){
//开始前,先移除所有的内容
jedis.del("java framework");
System.out.println(jedis.lrange("java framework",0,-1));
//先向key java framework中存放三条数据 方向左
jedis.lpush("java framework","spring");
jedis.lpush("java framework","struts");
jedis.lpush("java framework","hibernate");
//再取出所有数据jedis.lrange是按范围取出,
//第一个是key,第二个是起始位置,第三个是结束位置,jedis.llen获取长度 -1表示取得所有
System.out.println(jedis.lrange("java framework",0,-1));
jedis.del("java framework");
//方向右
jedis.rpush("java framework","hibernate");
jedis.rpush("java framework","struts");
jedis.rpush("java framework","spring");
System.out.println(jedis.lrange("java framework",0,-1));
}
}
为了方便对象的使用和减小new对象的开销,redis也有池的使用
public class JedisUtil {
//
private static String ADDR="127.0.0.1"; //连接主机ip
private static int PORT=6379;//端口
private static int MAX_ACTIVE=1024;//最大连接数
private static int MAX_IDLE=200;//最大空闲数
private static int MAX_WAIT=10000;//连接等待时间
private static boolean TEST_ON_BORROW=true;//在获取连接的时候检查有效性
private static JedisPool jedisPool=null;
private static void initialPool(){
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(MAX_ACTIVE);//最大连接数
config.setMaxIdle(MAX_IDLE);//最大空闲
config.setMaxWaitMillis(MAX_WAIT);//等待可用连接的最大时间,单位毫秒,默认值为-1,表示永不超时。如果超过等待时间,则直接抛出JedisConnectionException;
config.setTestOnBorrow(TEST_ON_BORROW);//在获取连接的时候检查有效性, 默认false
jedisPool=new JedisPool(config, ADDR, PORT);
}
public synchronized static Jedis getJedis(){
if(null==jedisPool){
initialPool();
}
Jedis jedis=jedisPool.getResource();//获取实例
return jedis;
}
public static void closeJedis(Jedis jedis)
{
if ((null != jedis) && (null != jedisPool ))
jedisPool.returnResource(jedis);
}
}
有关于redis订阅与发布的方面的内容,redis采用的pub/sub的方式来实现
广播类
public class TestPublist {
public static void main(String[] args) {
try {
Jedis jedis=new Jedis("localhost");
jedis.publish("redisChatTest", "恐怖广播");
jedis.publish("redisChatTest", "我没有名字,因为名字在这里没有意义");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
订阅类
public class TestSubscribe {
public static void main(String[] args) {
Jedis jedis=new Jedis("localhost");
//重写onMessage方法就可以接收到发布的信息
System.out.println("开始监听");
JedisPubSub jedisPubSub=new JedisPubSub() {
public void onMessage(String channel, String message) {
//channel监听器名字 消息
System.out.println("channel:" + channel + " receives message :" + message);
// this.unsubscribe();//监听一回结束监听
}
};
jedis.subscribe(jedisPubSub, "redisChatTest");
System.out.println("监听结束。。。。");
}
}
最后来一起看看redis有关于同步方面的demo
、“`
public class RedisTransactions {
public static void main(String[] args) {
//有关于redis事务使用
RedisTransactions.test1Normal();
RedisTransactions.test2Trans();
}
//普通方法同步
public static void test1Normal(){
Jedis jedis=new Jedis("localhost");
long start = System.currentTimeMillis();
for(int i=0;i<100000;i++){
String result=jedis.set("n"+i,"n"+i);//成功返回OK
}
long end = System.currentTimeMillis();
System.out.println("Simple SET: " + ((end - start)/1000.0) + " seconds");
jedis.disconnect();
}
//事务
public static void test2Trans(){
Jedis jedis=new Jedis("localhost");
long start=System.currentTimeMillis();
Transaction tx=jedis.multi();
for(int i=0;i<100000;i++){
tx.set("t"+i,"t"+i);
}
List<Object>results=tx.exec();
long end = System.currentTimeMillis();
System.out.println("Transaction SET: " + ((end - start)/1000.0) + " seconds");
jedis.disconnect();
}
//管道
public void test3Pipelined() {
Jedis jedis = new Jedis("localhost");
Pipeline pipeline = jedis.pipelined();
long start = System.currentTimeMillis();
for (int i = 0; i < 100000; i++) {
pipeline.set("p" + i, "p" + i);
}
List<Object> results = pipeline.syncAndReturnAll();
long end = System.currentTimeMillis();
System.out.println("Pipelined SET: " + ((end - start)/1000.0) + " seconds");
jedis.disconnect();
}
}
“`