Redis是一个key-value存储系统。和Memcached相似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操做,并且这些操做都是原子性的。在此基础上,redis支持各类不一样方式的排序。与memcached同样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操做写入追加的记录文件,而且在此基础上实现了master-slave。java
1、安装Redis
git
一、官网地址:http://redis.io/download github
二、github下载地址:https://github.com/MSOpenTech/redis/releasesredis
三、下载完毕直接解压到硬盘位置便可windows
2、启动Redis缓存
一、使用命令方式启动服务器
服务器
redis-server.exe redis.windows.conf
以下图:app
注意保持上面的窗口不被关闭,不然服务器就会关闭中止没法进行测试。maven
二、测试Redis
memcached
使用命令
redis-cli.exe -h 127.0.0.1 -p 6379
以下:
新开一个窗口一样进行测试
3、JAVA环境下测试 参考:http://flychao88.iteye.com/blog/1527163
一、建立maven项目 redisDemo
二、引入jar
<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.6.2</version> </dependency>
三、
package com.xh.test; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import org.junit.Before; import org.junit.Test; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPoolConfig; public class RedisTest { private JedisPool pool; private Jedis jedis; @Before public void setUp(){ pool = new JedisPool(new JedisPoolConfig(),"127.0.0.1"); jedis = pool.getResource(); } @Test public void get(){ System.out.println("获取缓存:"+jedis.get("userName")); System.out.println("获取缓存:"+jedis.get("address")); } /** * 存储基础的字符串数据 */ @Test public void saveString(){ // 1.1 添加数据 jedis.set("name", "枫景科技"); System.out.println("获取1:"+jedis.get("name")); // 1.2.1 修改数据 jedis.append("name", "有限公司"); System.out.println("获取2:"+jedis.get("name")); // 1.2.1 覆盖 jedis.set("name", "枫景科技集团"); System.out.println("获取3:"+jedis.get("name")); // 1.3 删除对应记录 jedis.del("name"); System.out.println("获取4:"+jedis.get("name")); // 1.4 mset jedis.mset("qq","123456","email","123@163.com"); System.out.println("获取5:"+jedis.mget("qq","email")); } /** * 操做map数据 */ @Test public void saveMap(){ Map<String,String> user=new HashMap<String,String>(); user.put("name","hanfeng"); user.put("pwd","123456"); jedis.hmset("user", user); List<String> rsmap = jedis.hmget("user", "name"); System.out.println(rsmap); // jedis.hdel("user","pwd"); System.out.println(jedis.hmget("user", "name")); System.out.println(jedis.hmget("user", "pwd")); System.out.println(jedis.hlen("user")); System.out.println(jedis.exists("user")); System.out.println(jedis.hkeys("user")); System.out.println(jedis.hvals("user")); Iterator<String> iterator = jedis.hkeys("user").iterator(); while (iterator.hasNext()) { String key = iterator.next(); System.out.println(key+":"+jedis.hmget("user",key)); } } /** * jedis操做Set */ @Test public void testSet(){ //添加 jedis.sadd("sname","张三"); jedis.sadd("sname","李四"); jedis.sadd("sname","王五"); jedis.sadd("sname","赵六"); //移除noname // jedis.srem("sname","noname"); System.out.println(jedis.smembers("sname"));//获取全部加入的value System.out.println(jedis.sismember("sname", "张三"));//判断 minxr 是不是sname集合的元素 System.out.println(jedis.srandmember("sname")); System.out.println(jedis.scard("sname"));//返回集合的元素个数 } @Test public void test() throws InterruptedException { //keys中传入的能够用通配符 System.out.println(jedis.keys("*")); //返回当前库中全部的key [sose, sanme, name, jarorwar, foo, sname, java framework, user, braand] System.out.println(jedis.keys("*name"));//返回的sname [sname, name] System.out.println(jedis.del("sanmdde"));//删除key为sanmdde的对象 删除成功返回1 删除失败(或者不存在)返回 0 System.out.println(jedis.ttl("sname"));//返回给定key的有效时间,若是是-1则表示永远有效 jedis.setex("timekey", 10, "min");//经过此方法,能够指定key的存活(有效时间) 时间为秒 Thread.sleep(5000);//睡眠5秒后,剩余时间将为<=5 System.out.println(jedis.ttl("timekey")); //输出结果为5 jedis.setex("timekey", 1, "min"); //设为1后,下面再看剩余时间就是1了 System.out.println(jedis.ttl("timekey")); //输出结果为1 System.out.println(jedis.exists("key"));//检查key是否存在 System.out.println(jedis.rename("timekey","time")); System.out.println(jedis.get("timekey"));//由于移除,返回为null System.out.println(jedis.get("time")); //由于将timekey 重命名为time 因此能够取得值 min //jedis 排序 //注意,此处的rpush和lpush是List的操做。是一个双向链表(但从表现来看的) jedis.del("a");//先清除数据,再加入数据进行测试 jedis.rpush("a", "1"); jedis.lpush("a","6"); jedis.lpush("a","3"); jedis.lpush("a","9"); System.out.println(jedis.lrange("a",0,-1));// [9, 3, 6, 1] System.out.println(jedis.sort("a")); //[1, 3, 6, 9] //输入排序后结果 System.out.println(jedis.lrange("a",0,-1)); } }