Redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave。
一、安装Redis
1、官网地址:http://redis.io/download
2、github下载地址:https://github.com/MSOpenTech/redis/releases
3、下载完毕直接解压到硬盘位置即可
二、启动Redis
1、使用命令方式启动服务器
redis-server.exe redis.windows.conf
如下图:
注意保持上面的窗口不被关闭,否则服务器就会关闭停止无法进行测试。
2、测试Redis
使用命令
redis-cli.exe -h 127.0.0.1 -p 6379
如下:
新开一个窗口同样进行测试
三、JAVA环境下测试 参考:http://flychao88.iteye.com/blog/1527163
1、创建maven项目 redisDemo
2、引入jar
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.6.2</version>
</dependency>
3、
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));
}
}