用户的访问,以及商品被访问的情况这些数据,大部分都是非结构化的,传统的关系型数据库,对于在部分的存储,是比较棘手的,而NOSQL中redis由于其较多的数据类型和数据操作,可以满足大部分非结构化数据存储和获取操作的要求,下面贴出的代码,是基于本人真实项目中使用到测试用例,供大家参考。
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.junit.Test;
import redis.clients.jedis.Jedis;
public class RedisTest {
//使用hash来存储各地区用户的访问商品的情况
/**
* hash自增测试,hash中的key表示商品的编号(如sp1),field表示地区(如region1),用户每访问一次,自增1
*/
@Test
public void testHashIncr(){
Jedis jedis = new Jedis("10.79.32.22", 6379);
//hash的key组成=最少2个字母+数字;下面是对于36个地区分布的访问数据添加;结果是region1--1(region1地区访问量为1),region2--2……region36--36
for (int i = 1; i <= 36; i++) {
for (int j = 0; j < i; j++) {
jedis.hincrBy("product1", "region"+i,1);
}
}
jedis.close();
}
/**
* 获取sp1商品各地区访问情况
*/
@Test
public void testHashGet(){
Jedis jedis = new Jedis("10.79.32.22", 6379);
Map<String, String> regionAll = jedis.hgetAll("product1");
for(Map.Entry<String, String> entry:regionAll.entrySet()){
System.out.println(entry.getKey()+"--->"+entry.getValue());
}
jedis.close();
}
//list作为用户访问记录使用
/**
* 往list中push值,作为用户的
*/
@Test
public void testListPush(){
Jedis jedis = new Jedis("10.79.32.22", 6379);
for (int i = 0; i < 10; i++) {
jedis.lpush("user2", "value"+i);
}
jedis.close();
}
/**
* 获取list值,获取后的顺序是首次push的值靠前(下标值小)
*/
@Test
public void testListGet(){
Jedis jedis = new Jedis("10.79.32.22", 6379);
List<String> lrange = jedis.lrange("user2", 0, -1);
int i=0;
for (String str : lrange) {
System.out.print(i++);
System.out.println(":"+str);
}
jedis.close();
}
//set用作商品的访问量存储。按照访问量次序排序
/**
* 往set中添加10个元素(sp1,sp2……代表10个商品),对应的score分别是(1,2,3…用来表示访问量)
*/
@Test
public void testSetIncr(){
Jedis jedis = new Jedis("10.79.32.22", 6379);
for (int i = 1; i <= 10; i++) {
for (int j = 0; j < i; j++) {
jedis.zincrby("productVisit", 1, "product"+i);
}
}
jedis.close();
}
/**
*获取访问量前10的商品名称
*/
@Test
public void testSetGet(){
Jedis jedis = new Jedis("10.79.32.22", 6379);
//这里用zrevrange来倒序排序,效果是按照score值从大到小排序
Set<String> zrevrange = jedis.zrevrange("productVisit", 0, 9);
for (String str : zrevrange) {
System.out.println(str);
}
jedis.close();
}
}