protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
/* //1.调用service查询
ProvinceService service = new ProvinceServiceImpl();
List<Province> list = service.findAll();
//2.序列化list为json
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(list);*/
//1.调用service查询
ProvinceService service = new ProvinceServiceImpl();
String json = service.findAllJson();
System.out.println(json);
//3.响应结果
response.setContentType("application/json;charset=utf-8");
response.getWriter().write(json);
}
public class JDBCUtils {
private static DataSource ds ;
static {
try {
//1.加载配置文件
Properties pro = new Properties();
//使用ClassLoader加载配置文件,获取字节输入流
InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties");
pro.load(is);
//2.初始化连接池对象
ds = DruidDataSourceFactory.createDataSource(pro);
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 获取连接池对象
*/
public static DataSource getDataSource(){
return ds;
}
/**
* 获取连接Connection对象
*/
public static Connection getConnection() throws SQLException {
return ds.getConnection();
}
}
public String findAllJson() {
//1.先从redis中查询数据
//1.1获取redis客户端连接
Jedis jedis = JedisPoolUtils.getJedis();
String province_json = jedis.get("province");
//2判断 province_json 数据是否为null
if(province_json == null || province_json.length() == 0){
//redis中没有数据
System.out.println("redis中没数据,查询数据库...");
//2.1从数据中查询
List<Province> ps = dao.findAll();
//2.2将list序列化为json
ObjectMapper mapper = new ObjectMapper();
try {
province_json = mapper.writeValueAsString(ps);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
//2.3 将json数据存入redis
jedis.set("province",province_json);
//归还连接
jedis.close();
}else{
System.out.println("redis中有数据,查询缓存...");
}
return province_json;
}
private static JedisPool jedisPool;
static{
//读取配置文件
InputStream is = JedisPoolUtils.class.getClassLoader().getResourceAsStream("jedis.properties");
//创建Properties对象
Properties pro = new Properties();
//关联文件
try {
pro.load(is);
} catch (IOException e) {
e.printStackTrace();
}
//获取数据,设置到JedisPoolConfig中
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(Integer.parseInt(pro.getProperty("maxTotal")));
config.setMaxIdle(Integer.parseInt(pro.getProperty("maxIdle")));
//初始化JedisPool
jedisPool = new JedisPool(config,pro.getProperty("host"),Integer.parseInt(pro.getProperty("port")));
}
/**
* 获取连接方法
*/
public static Jedis getJedis(){
return jedisPool.getResource();
}
public class JedisTest {
/**
* 快速入门
*/
@Test
public void test1(){
//1. 获取连接
Jedis jedis = new Jedis("localhost",6379);
//2. 操作
jedis.set("username","zhangsan");
//3. 关闭连接
jedis.close();
}
/**
* string 数据结构操作
*/
@Test
public void test2(){
//1. 获取连接
Jedis jedis = new Jedis();//如果使用空参构造,默认值 "localhost",6379端口
//2. 操作
//存储
jedis.set("username","zhangsan");
//获取
String username = jedis.get("username");
System.out.println(username);
//可以使用setex()方法存储可以指定过期时间的 key value
jedis.setex("activecode",20,"hehe");//将activecode:hehe键值对存入redis,并且20秒后自动删除该键值对
//3. 关闭连接
jedis.close();
}
/**
* hash 数据结构操作
*/
@Test
public void test3(){
//1. 获取连接
Jedis jedis = new Jedis();//如果使用空参构造,默认值 "localhost",6379端口
//2. 操作
// 存储hash
jedis.hset("user","name","lisi");
jedis.hset("user","age","23");
jedis.hset("user","gender","female");
// 获取hash
String name = jedis.hget("user", "name");
System.out.println(name);
// 获取hash的所有map中的数据
Map<String, String> user = jedis.hgetAll("user");
// keyset
Set<String> keySet = user.keySet();
for (String key : keySet) {
//获取value
String value = user.get(key);
System.out.println(key + ":" + value);
}
//3. 关闭连接
jedis.close();
}
/**
* list 数据结构操作
*/
@Test
public void test4(){
//1. 获取连接
Jedis jedis = new Jedis();//如果使用空参构造,默认值 "localhost",6379端口
//2. 操作
// list 存储
jedis.lpush("mylist","a","b","c");//从左边存
jedis.rpush("mylist","a","b","c");//从右边存
// list 范围获取
List<String> mylist = jedis.lrange("mylist", 0, -1);
System.out.println(mylist);
// list 弹出
String element1 = jedis.lpop("mylist");//c
System.out.println(element1);
String element2 = jedis.rpop("mylist");//c
System.out.println(element2);
// list 范围获取
List<String> mylist2 = jedis.lrange("mylist", 0, -1);
System.out.println(mylist2);
//3. 关闭连接
jedis.close();
}
/**
* set 数据结构操作
*/
@Test
public void test5(){
//1. 获取连接
Jedis jedis = new Jedis();//如果使用空参构造,默认值 "localhost",6379端口
//2. 操作
// set 存储
jedis.sadd("myset","java","php","c++");
// set 获取
Set<String> myset = jedis.smembers("myset");
System.out.println(myset);
//3. 关闭连接
jedis.close();
}
/**
* sortedset 数据结构操作
*/
@Test
public void test6(){
//1. 获取连接
Jedis jedis = new Jedis();//如果使用空参构造,默认值 "localhost",6379端口
//2. 操作
// sortedset 存储
jedis.zadd("mysortedset",3,"亚瑟");
jedis.zadd("mysortedset",30,"后裔");
jedis.zadd("mysortedset",55,"孙悟空");
// sortedset 获取
Set<String> mysortedset = jedis.zrange("mysortedset", 0, -1);
System.out.println(mysortedset);
//3. 关闭连接
jedis.close();
}
/**
* jedis连接池使用
*/
@Test
public void test7(){
//0.创建一个配置对象
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(50);
config.setMaxIdle(10);
//1.创建Jedis连接池对象
JedisPool jedisPool = new JedisPool(config,"localhost",6379);
//2.获取连接
Jedis jedis = jedisPool.getResource();
//3. 使用
jedis.set("hehe","heihei");
//4. 关闭 归还到连接池中
jedis.close();;
}
/**
* jedis连接池工具类使用
*/
@Test
public void test8(){
//通过连接池工具类获取
Jedis jedis = JedisPoolUtils.getJedis();
//3. 使用
jedis.set("hello","world");
//4. 关闭 归还到连接池中
jedis.close();;
}
<script>
$(function () {
//发送ajax请求,加载所有省份数据
$.get("provinceServlet",{},function (data) {
//[{"id":1,"name":"北京"},{"id":2,"name":"上海"},{"id":3,"name":"广州"},{"id":4,"name":"陕西"}]
//1.获取select
var province = $("#province");
//2.遍历json数组
$(data).each(function () {
//3.创建<option>
var option = "<option name='"+this.id+"'>"+this.name+"</option>";
//4.调用select的append追加option
province.append(option);
});
});
});
</script>
public class JedisTest {
/*
*
* value的数据结构:
1) 字符串类型 string
2) 哈希类型 hash : map格式
3) 列表类型 list : linkedlist格式。支持重复元素
4) 集合类型 set : 不允许重复元素
5) 有序集合类型 sortedset:不允许重复元素,且元素有顺序
* */
//1) 字符串类型 string
@Test
public void test01() {
/*
* redis--->String
* set key value
* get key value
* del key
* setex key time value--->time就是超过这个时间就自动删除这个key value ,用户验证码
* */
Jedis jedis = new Jedis();
jedis.set("username", "wangcx");
jedis.set("age", "wangcx");
jedis.set("address", "广东省湛江雷州");
String username = jedis.get("username");
String address = jedis.get("address");
System.out.println(username);
System.out.println(address);
jedis.del(username);
String username1 = jedis.get("username");
System.out.println(username1);
}
// 2) 哈希类型 hash : map格式
@Test
public void test02() {
/*
* redis--->Hash
* hset key field value--->存储:
* hget key field--->获取指定的field对应的值
* hgetall key--->获取所有的field和value----返回值: Map<String, String> map
* hdel key field
* */
Jedis jedis = new Jedis();
jedis.hset("hase", "username", "wangcx");
jedis.hset("hase", "age", "23");
jedis.hset("hase", "address", "leizhou");
//获取 1
Map<String, String> map = jedis.hgetAll("hase");
Set<String> keyset = map.keySet();
for (String key : keyset) {
System.out.println(key + ":" + map.get(key));
}
//获取 2
//String age = jedis.hget("hase", "age");
//删除: jedis.hdel("hase","age");
}
// 3) 列表类型 list : linkedlist格式。支持重复元素
@Test
public void test03() {
/*
* redis--->List
* lpush key value--->左边存储:将元素加入列表左表
* rpush key value--->右边存储:将元素加入列表右边
* lrange key start end --->有范围获取数据------0是start -1是end
* lpop key--->从list集合最左边移除或者弹出或者删除该key以及对应的值,并返回删除key所对应的值
* rpop key--->从list集合最右边移除或者弹出或者删除该key以及对应的值,并返回删除key所对应的值
* */
Jedis jedis = new Jedis();
jedis.lpush("uname", "listUsername");
jedis.lpush("uname", "listUsername1");
jedis.lpush("uname", "listUsername2");
jedis.lpush("uname", "listUsername3");
jedis.lpush("uage", "listAge");
jedis.lpush("uaddress", "listAddress");
List<String> username = jedis.lrange("uname", 0, -1);
System.out.println(username);//[listUsername3, listUsername2, listUsername1, listUsername]
for (int i = 0; i < username.size(); i++) {
System.out.println("for==" + username.get(i));
//for==listUsername3
//for==listUsername2
//for==listUsername1
//for==listUsername
}
}
// 4) 集合类型 set : 不允许重复元素
@Test
public void test04() {
/*
* redis--->set集合
* sadd key value--->存储
* smembers key --->smembers key:获取set集合中所有元素
* srem key --->删除:srem key value:删除set集合中的某个元素
* */
Jedis jedis = new Jedis();
jedis.sadd("umath", "123", "1234", "456");
Set<String> umath = jedis.smembers("umath");
System.out.println("umath=====" + umath);//umath=====[123, 456, 1234]
Iterator<String> iterator = umath.iterator();
while (iterator.hasNext()) {
String next = iterator.next();
System.out.println("Iterator<String>===" + next);
}
//删除:
Long umath1 = jedis.srem("umath", "123");//返回值是:1,说明删除了一项
System.out.println(umath1);
Set<String> umath2 = jedis.smembers("umath");
System.out.println("umath=====" + umath2);//umath=====[456, 1234]
}
// 5) 有序集合类型 sortedset:不允许重复元素,且元素有顺序
@Test
public void test05() {
/*
* redis--->sortedset-----不允许重复key元素,且元素有顺序
* zadd key score value--->左边存储:将元素加入列表左表
* zrange key start end --->右边存储:将元素加入列表右边
* zrange key start end withscores --->右边存储:将元素加入列表右边
* zrem key value --->有范围获取数据------0是start -1是end
* */
Jedis jedis = new Jedis();
jedis.zadd("sortedset", 50, "wangcx1");
jedis.zadd("sortedset", 51, "wangcx2");
jedis.zadd("sortedset", 52, "wangcx3");
Set<String> set = jedis.zrange("sortedset", 0, -1);
System.out.println("sortedset:" + set);
Iterator<String> iterator = set.iterator();
while (iterator.hasNext()) {
String next = iterator.next();
System.out.println("set集合" + next);
}
//删除:Long zrem = jedis.zrem("sortedset", "王成喜");
//System.out.println("橡树" + zrem);
}
// 6) jedis连接池: JedisPool的使用
@Test
public void test06() {
/*
#最大活动对象数
redis.pool.maxTotal=1000
#最大能够保持idel状态的对象数
redis.pool.maxIdle=100
#最小能够保持idel状态的对象数
redis.pool.minIdle=50
#当池内没有返回对象时,最大等待时间
redis.pool.maxWaitMillis=10000
#当调用borrow Object方法时,是否进行有效性检查
redis.pool.testOnBorrow=true
#当调用return Object方法时,是否进行有效性检查
redis.pool.testOnReturn=true
#“空闲链接”检测线程,检测的周期,毫秒数。如果为负值,表示不运行“检测线程”。默认为-1.
redis.pool.timeBetweenEvictionRunsMillis=30000
#向调用者输出“链接”对象时,是否检测它的空闲超时;
redis.pool.testWhileIdle=true
# 对于“空闲链接”检测线程而言,每次检测的链接资源的个数。默认为3.
redis.pool.numTestsPerEvictionRun=50
#redis服务器的IP
redis.ip=xxxxxx
#redis服务器的Port
redis1.port=6379
* */
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(50);
config.setMaxIdle(15);
//JedisPool jedisPool = new JedisPool();可以空,可以设置参数
JedisPool jedisPool = new JedisPool(config, "localhost", 6379);
Jedis jedis = jedisPool.getResource();
jedis.set("jedispool1", "hello1");
String jedispool = jedis.get("jedispool1");
System.out.println(jedispool);
}
// 6) 使用jedisUtil类来连接jedis连接池:
// JedisPool工具类的使用
@Test
public void test07() {
Jedis jedis = JedisUtil.getJedis();
jedis.set("tool","Tooljava");
String tool = jedis.get("tool");
System.out.println("tool=="+tool);
}
}
public class JedisUtil {
private static JedisPool jedisPool;
private static Jedis jedis;
static {
//将工具类加载到内存中
InputStream in = JedisUtil.class.getClassLoader().getResourceAsStream("jedis.properties");
System.out.println(in);
Properties pro = new Properties();
try {
pro.load(in);
String maxTotal = pro.getProperty("maxTotal");
String maxIdle = pro.getProperty("maxIdle");
String host = pro.getProperty("host");
String port = pro.getProperty("port");
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxIdle(Integer.parseInt(maxIdle));
config.setMaxTotal(Integer.parseInt(maxTotal));
jedisPool = new JedisPool(config, host, Integer.parseInt(port));
} catch (IOException e) {
e.printStackTrace();
}
}
@Test
public static Jedis getJedis() {
return jedisPool.getResource();
}
}
版权声明:未标注转载均为本站原创,转载时请以链接形式注明文章出处。如有侵权、不妥之处,请联系站长删除。敬请谅解!
常见资源合集和破解 fmvvvteih...