Redis 高速缓存控件

大型项目中一般都会用到缓存,如果项目使用集群部署的话,每台机器如何共享缓存内容呢?

使用Redis可以做到让多台机器甚至多个应用之间共享缓存


安装

首先要有一台服务器安装功能Redis服务,下载地址:http://redis.io/

下载到服务器后解压redis-2.6.14.tar.gz

tar -zxvf  redis-2.6.14.tar.gz

然后进入redis-2.6.14目录 ,先通过make命令编译 ,再cd 进入src目录

sudo ./redis-server 开启服务

如果看到输出: 15 Aug 13:38:05.698 * The server is now ready to accept connections on port 6379  就表示服务开启成功了,默认端口是6379


如果要打开客户端可以在src目录下面 sudo ./redis-cli 就打开了客户端。


 数据结构

存入普通键值对
put keyname value



操作List
RPUSH listname value 将新的值加入到List的结尾
LPUSH listname value 将新的值加入到List的开头
LRANGE listname startIndex endIndex 截取List,包含endIndex
LLEN listname 获取制定list的长度
LPOP listname 移除List的第一个元素
RPOP listname 移除List的最后一个元素


操作Set
SADD setname value 添加元素
SREM setname value 移除元素
SISMEMBER setname value 判断元素是否在set内
SMEMBERS setname 获取set内所有元素
SUNION 用来合并俩功能个Set,并将两个Set内的重复元素合并,得到一个新的Set 用法为: SUNION setname1 setname2

操作带有排序功能的Set,会根据score来排序
ZADD setname score value
使用ZRANGE 0 - 1 能够获取set里面的所有元素


存入对象(使用Hashes数据结构
使用方法为:
添加元素  HMSET student:01 username zhoufeng age 20 sex 男
获取元素  HGETALL student:01 就能获取这个对象了


使用java客户端调用

Redis是支持绝大部分开发语言的客户端的 。

使用java客户端的示例如下:

首先下载jedis.x.x.x.jar 和 commons-pool-x.x.x.jar ,下载地址https://github.com/xetorthio/jedis

或者使用maven。加入下面的配置就可以了

   
    <dependency>
	    <groupId>redis.clients</groupId>
	    <artifactId>jedis</artifactId>
	    <version>2.0.0</version>
	    <type>jar</type>
	    <scope>compile</scope>
	</dependency>
    



然后就可以开发客户端测试了。

package com.zf.redis;

import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

import org.junit.Before;
import org.junit.Test;

import redis.clients.jedis.Jedis;

public class TestRedis {

	private static final String SERVER_ADDRESS = "127.0.0.1";	//服务器地址
	private static final Integer SERVER_PORT = 6379 ;	//端口
	
	private Jedis jedis ;
	
	@Before
	public void init(){
		jedis = new Jedis(SERVER_ADDRESS, SERVER_PORT); 
	}
	
	
	
	/**
	 * 操作普通键值对
	 */
	@Test
	public void test01(){
		jedis.set("name", "zhoufeng");//存入1个key=name value=zhoufeng的键值对
		String value = jedis.get("name");  	//获取key=name的值
		System.out.println(value);
	}
	
	/**
	 * 操作List
	 */
	@Test
	public void test02(){
		
		//将zhoufeng 加入students数组的结尾,如果该元素是第一个元素,那么会自动创建students数组
		jedis.rpush("students", "zhoufeng");	
		
		//将zhangsan加入到students的末尾
		jedis.lpush("students", "zhangsan");
		
		//移除students的第一个元素
		jedis.lpop("students");
		
		//移除students的最后一个元素
		jedis.rpop("students");
		
		//移除制定的元素,第二个参数表示要移除的个数,因为list中是允许出现重复元素的
		jedis.lrem("student", 1, "zhangsan") ;
		//获取students数组的所有元素
		List <String> students = jedis.lrange("students", 0, -1) ;
		
		System.out.println(students);
	}
	
	/**
	 * 操作Set
	 */
	@Test
	public void test03(){
		//添加元素
		jedis.sadd("teachers", "zhangsan");
		jedis.sadd("teachers", "lisi");
		jedis.sadd("teachers", "wangwu");
		
		//判断Set是否包含制定元素
		Boolean b1 = jedis.sismember("teachers", "wangwu");
		Boolean b2 = jedis.sismember("teachers", "xxxxx");
		System.out.println(b1 + "   " + b2);  
		
		//获取Set内所有的元素
		Set<String> members =  jedis.smembers("teachers");
		Iterator<String> it = members.iterator() ;
		while(it.hasNext()){
			System.out.println(it.next());
		}
		
	//	jedis.sunion(keys...) 可以将多个Set合并成1个并返回合并后的Set
		
	}
	
	/**
	 * 操作带排序功能的Set
	 */
	@Test
	public void test04(){
		//添加元素,会根据第二个参数排序
		jedis.zadd("emps", 5 , "aaa") ;
		jedis.zadd("emps", 1 , "bbbb") ;
		jedis.zadd("emps", 3 , "ccc") ;
		jedis.zadd("emps", 2 , "ddd") ;
		
		//获取所有元素
		Set<String> emps = jedis.zrange("emps", 0, -1) ;
		Iterator<String> it = emps.iterator() ;
		while(it.hasNext()){
			System.out.println(it.next());
		}
	}
	
	/**
	 * 存入对象,使用Map作为对象
	 */
	@Test
	public void test05(){
		Map<String , String > car = new HashMap<String , String >() ;
		car.put("COLOR", "red") ;
		car.put("SIZE", "2T");
		car.put("NO", "京8888");
		//存入对象,使用car:01当作key,是为了方便和其他car区分。比如car:02
		jedis.hmset("car:01", car);
		
		//获取整个对象
		Map<String, String> result = jedis.hgetAll("car:01");	
		Iterator<Entry<String, String>>  it = result.entrySet().iterator();
		while(it.hasNext()){
			Entry<String, String> entry = it.next() ;  
			System.out.println("key:" + entry.getKey() + " value:" + entry.getValue());
		}
		
		//也可以获取制定的属性
		String no = jedis.hget("car:01", "NO") ;
		System.out.println("NO:" + no);
	}
	
}


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值