package redis.chap01;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.Set;
import org.apache.commons.lang3.math.NumberUtils;
import redis.clients.jedis.Jedis;
public class SetLession {
public static void main(String[] args) {
SetLession sl = new SetLession();
sl.clear();
//添加一批商品
for(int i = 0; i< 42; i++) {
Goods goods = new Goods(0, "goods" + String.format("%05d", (i + 1)), i);
sl.addGoods(goods);
}
//读取商品总数
System.out.println("商品总数: " + sl.getTotalCount());
//删除第29件商品
sl.delGoods(29);
System.out.println("删除后商品总数: " + sl.getTotalCount());
//分页显示
List<Goods> list = sl.getGoodsList(2, 20);
System.out.println("第二页商品:");
for(Goods goods : list) {
System.out.println(goods);
}
//按分类查找
List<Goods> listByTag = sl.findGoodsByTag("big", "green");
System.out.println("所有尺寸为big,颜色为green的商品:");
for(Goods goods : listByTag) {
System.out.println(goods);
}
}
private final String[] SIZE = { "small", "middle", "big" };
private final String[] COLOR = { "red", "yellow", "green" };
private Jedis jedis = null;
public SetLession() {
this.jedis = JedisProvider.getJedis();
}
/**
* 获得一个自增主键值
* @return
*/
private long getIncrementId() {
String key = "goods:count";
return jedis.incr(key);
}
/**
* 添加一个商品
* @param goods
* @return
*/
public boolean addGoods(Goods goods) {
long id = getIncrementId();
Map<String, String> map = new HashMap<>();
map.put("id", String.valueOf(id));
map.put("title", goods.getTitle());
map.put("price", String.valueOf(goods.getPrice()));
//随机获得三个分类
String size = SIZE[new Random().nextInt(SIZE.length)];
String color = COLOR[new Random().nextInt(COLOR.length)];
String key = "goods:" + id;
boolean added = jedis.hmset(key, map).equals("OK");
if(added) {
jedis.rpush("goods:list", String.valueOf(id));
//记录商品所属分类
jedis.sadd("goods:" + id + ":tags", size, color);
//记录每个分类下包含的商品ID
jedis.sadd("tag:" + size + ":goods", String.valueOf(id));
jedis.sadd("tag:" + color + ":goods", String.valueOf(id));
}
return added;
}
/**
* 修改商品标题
* @param goods
* @return
*/
public boolean updateTitle(long id, String title) {
String key = "goods:" + id;
return jedis.hset(key, "title", title) == 0;
}
/**
* 修改商品价格
* @param id
* @param price
* @return
*/
public boolean updatePrice(long id, float price) {
String key = "goods:" + id;
return jedis.hset(key, "price", String.valueOf(price)) == 0;
}
/**
* 删除商品
* @param id
* @return
*/
public boolean delGoods(long id) {
long deleted = jedis.del("goods:" + id);
if(deleted == 1) {
jedis.lrem("goods:list", 1, String.valueOf(id));
}
return deleted == 1;
}
/**
* 读取商品总数
* @return
*/
public long getTotalCount() {
String key = "goods:list";
return jedis.llen(key);
}
/**
* 读取用于分页的商品列表
* @param pageIndex 页数
* @param pageSize 每页显示行数
* @return
*/
public List<Goods> getGoodsList(int pageIndex, int pageSize) {
int totals = (int)getTotalCount();
int from = (pageIndex - 1) * pageSize;
if(from < 0) {
from = 0;
}
else if(from > totals) {
from = (totals / pageSize) * pageSize;
}
int to = from + pageSize - 1;
if(to > totals) {
to = totals;
}
List<Goods> goodsList = new ArrayList<>();
List<String> idList = jedis.lrange("goods:list", from, to);
for(String id : idList) {
String key = "goods:" + id;
Map<String, String> maps = jedis.hgetAll(key);
Goods goods = new Goods();
goods.setId(NumberUtils.toLong(maps.get("id")));
goods.setTitle(maps.get("title"));
goods.setPrice(NumberUtils.toFloat(maps.get("price")));
//读取分类
goods.setTags(jedis.smembers("goods:" + id + ":tags"));
goodsList.add(goods);
}
return goodsList;
}
/**
* 查找指定尺寸的商品
* @param size
* @return
*/
public List<Goods> findGoodsBySize(String size) {
Set<String> ids = jedis.smembers("tag:" + size + ":goods");
List<Goods> goodsList = new ArrayList<>();
for(String id : ids) {
String key = "goods:" + id;
Map<String, String> maps = jedis.hgetAll(key);
Goods goods = new Goods();
goods.setId(NumberUtils.toLong(maps.get("id")));
goods.setTitle(maps.get("title"));
goods.setPrice(NumberUtils.toFloat(maps.get("price")));
//读取分类
goods.setTags(jedis.smembers("goods:" + id + ":tags"));
goodsList.add(goods);
}
return goodsList;
}
/**
* 查找指定尺寸和颜色的商品
* @param size
* @param color
* @return
*/
public List<Goods> findGoodsByTag(String size, String color) {
Set<String> ids = jedis.sinter("tag:" + size + ":goods", "tag:" + color + ":goods");
List<Goods> goodsList = new ArrayList<>();
for(String id : ids) {
String key = "goods:" + id;
Map<String, String> maps = jedis.hgetAll(key);
Goods goods = new Goods();
goods.setId(NumberUtils.toLong(maps.get("id")));
goods.setTitle(maps.get("title"));
goods.setPrice(NumberUtils.toFloat(maps.get("price")));
//读取分类
goods.setTags(jedis.smembers("goods:" + id + ":tags"));
goodsList.add(goods);
}
return goodsList;
}
public void clear() {
jedis.flushDB();
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
Redis集合类型(Set)常用命令演示和实践练习代码
共25个文件
class:10个
java:10个
prefs:2个
5星 · 超过95%的资源 需积分: 32 27 下载量 94 浏览量
2016-06-22
15:55:12
上传
评论
收藏 35KB RAR 举报
温馨提示
在JAVA中使用Redis集合类型的常用命令的演示及一个简单的实战项目: 具备增删改查和分类查找的商品管理功能 代码介绍: http://blog.csdn.net/autfish/article/details/51734686
资源推荐
资源详情
资源评论
收起资源包目录
redis-set-demo.rar (25个子文件)
redis
pom.xml 800B
target
test-classes
classes
redis
chap01
Goods.class 2KB
ListLession.class 5KB
StringExample.class 5KB
SetExample.class 3KB
JedisProvider.class 994B
StringLession.class 4KB
HashExample.class 5KB
SetLession.class 7KB
ListExample.class 5KB
HashLession.class 5KB
.settings
org.eclipse.m2e.core.prefs 90B
org.eclipse.jdt.core.prefs 243B
src
test
resources
java
main
resources
java
redis
chap01
StringLession.java 2KB
StringExample.java 4KB
HashExample.java 3KB
HashLession.java 3KB
ListLession.java 3KB
JedisProvider.java 579B
Goods.java 984B
ListExample.java 4KB
SetLession.java 6KB
SetExample.java 2KB
.project 557B
.classpath 1KB
共 25 条
- 1
资源评论
- terryhello2017-02-14还行,可以参考
- niegang20102016-07-06非常全的入门demo
大雨将至
- 粉丝: 905
- 资源: 14
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功