大型项目中一般都会用到缓存,如果项目使用集群部署的话,每台机器如何共享缓存内容呢?
使用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");
- String value = jedis.get("name");
- System.out.println(value);
- }
-
-
-
-
- @Test
- public void test02(){
-
-
- jedis.rpush("students", "zhoufeng");
-
-
- jedis.lpush("students", "zhangsan");
-
-
- jedis.lpop("students");
-
-
- jedis.rpop("students");
-
-
- jedis.lrem("student", 1, "zhangsan") ;
-
- List <String> students = jedis.lrange("students", 0, -1) ;
-
- System.out.println(students);
- }
-
-
-
-
- @Test
- public void test03(){
-
- jedis.sadd("teachers", "zhangsan");
- jedis.sadd("teachers", "lisi");
- jedis.sadd("teachers", "wangwu");
-
-
- Boolean b1 = jedis.sismember("teachers", "wangwu");
- Boolean b2 = jedis.sismember("teachers", "xxxxx");
- System.out.println(b1 + " " + b2);
-
-
- Set<String> members = jedis.smembers("teachers");
- Iterator<String> it = members.iterator() ;
- while(it.hasNext()){
- System.out.println(it.next());
- }
-
-
-
- }
-
-
-
-
- @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());
- }
- }
-
-
-
-
- @Test
- public void test05(){
- Map<String , String > car = new HashMap<String , String >() ;
- car.put("COLOR", "red") ;
- car.put("SIZE", "2T");
- car.put("NO", "京8888");
-
- 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);
- }
-
- }