当前位置: 首页 > news >正文

华为公司网站建设目标/网站优化的方式有哪些

华为公司网站建设目标,网站优化的方式有哪些,网络营销是什么内容,如何安装网站模版目录 1 Jedis基本操作 1.1 Jedis操作字符串类型数据 1.2 Jedis操作哈希类型数据 1.3 Jedis操作列表类型数据 1.4 Jedis操作Set类型数据 1.5 Jedis操作SortSet类型数据 2 Jedis连接池 2.1 Jedis连接池的基本使用 2.2 Jedis连接池的工具类 3 Redis案例实战 1 Jedis基本…

目录

1 Jedis基本操作

1.1 Jedis操作字符串类型数据

1.2 Jedis操作哈希类型数据

1.3 Jedis操作列表类型数据

1.4 Jedis操作Set类型数据

1.5 Jedis操作SortSet类型数据

2 Jedis连接池

2.1 Jedis连接池的基本使用

2.2 Jedis连接池的工具类

3 Redis案例实战


1 Jedis基本操作

上一博文中,我们都是用命令直接操作Redis数据库,那么Java代码的形式该如何操作数据库?本博文介绍下Jedis,是一款java操作Redis数据库的工具。其使用步骤:

1)下载jedis的jar包:commons-pool2-2.3.jar、jedis-2.7.0.jar;

2)使用入门:相较于jdbc要简单的多

  • 获取连接;
  • 操作;
  • 关闭连接
    @Testpublic void test1(){//1、获取连接Jedis jedis = new Jedis("localhost", 6379); //ip 及端口号,空参构造默认就是如左所示//2、操作jedis.set("username","zhangsan");//3、关闭连接jedis.close();}

1.1 Jedis操作字符串类型数据

  • 1)存储:set(key, value)方法;
  • 2)获取:get(key)方法;
  • 3)setex(key,seconds,value)方法:存储可以指定过期时间的key value,时间过后自动删除该键值对,该方法可以用于存储注册时用的验证码,比较实用

【练习案例】:

@Testpublic void test2(){//1、获取连接Jedis jedis = new Jedis("localhost", 6379); //ip 及端口号//2、操作//存储jedis.set("username","zhangsan");//获取String username = jedis.get("username");System.out.println(username);//zhangsanjedis.setex("activecode",20,"haha");//3、关闭连接jedis.close();}

1.2 Jedis操作哈希类型数据

  • 1)存储:hset(key, field,value)方法;
  • 2)获取:hget(key,field)方法;
  • 3)获取所有map数据:hgetAll(key);
@Testpublic void test3(){//1、获取连接Jedis jedis = new Jedis("localhost", 6379); //ip 及端口号//2、操作//存储jedis.hset("myhash","username","lisi");jedis.hset("myhash","age","18");//获取String username = jedis.hget("myhash","username");System.out.println(username);//zhangsanMap<String, String> myhash = jedis.hgetAll("myhash");for (String key : myhash.keySet()) {String value = myhash.get(key);System.out.println(value);}//3、关闭连接jedis.close();}

1.3 Jedis操作列表类型数据

  • 1)存储:lpush(key,value1,value2...)、rpush(key,value1,value2...)
  • 2)获取:lrange(key,start,end),范围获取
@Testpublic void test4(){//1、获取连接Jedis jedis = new Jedis("localhost", 6379); //ip 及端口号//2、操作//存储jedis.lpush("mylist","a","b","c");//左边存jedis.rpush("mylist","a","b","c");//右边存//获取List<String> mylist = jedis.lrange("mylist", 0, -1);System.out.println(mylist);//[c, b, a, a, b, c]//删除String ele = jedis.lpop("mylist");System.out.println(ele);  //cString ele1 = jedis.rpop("mylist");System.out.println(ele1);  //cList<String> mylist1 = jedis.lrange("mylist", 0, -1);System.out.println(mylist1);//[b, a, a, b]//3、关闭连接jedis.close();}

1.4 Jedis操作Set类型数据

  • 1)存储:sadd(key,members)
  • 2)获取:smembers(key),返回的是Set集合
    @Testpublic void test5(){//1、获取连接Jedis jedis = new Jedis("localhost", 6379); //ip 及端口号//2、操作//存储jedis.sadd("myset","a","b","c");//获取Set<String> myset = jedis.smembers("myset");System.out.println(myset);//[a, b, c]//3、关闭连接jedis.close();}

1.5 Jedis操作SortSet类型数据

  • 1)存储:zadd(key,score,member)
  • 2)获取:zrange(key,start,end),返回的是Set集合
    @Testpublic void test6(){//1、获取连接Jedis jedis = new Jedis("localhost", 6379); //ip 及端口号//2、操作//存储jedis.zadd("mysortedset",10,"a");jedis.zadd("mysortedset",20,"b");jedis.zadd("mysortedset",5,"c");//获取Set<String> mysortedset = jedis.zrange("mysortedset", 0, -1);System.out.println(mysortedset);//[c, a, b]//3、关闭连接jedis.close();}

2 Jedis连接池

2.1 Jedis连接池的基本使用

类似于jdbc连接池,所不同的是jdbc需要使用第三方的,jedis自带连接池JedisPool连接池对象。那么如何使用?

  • 1)创建JedisPool连接池对象;
  • 2)调用方法getResource方法获取Jedis的连接;
  • 3)关闭连接;
    @Testpublic void test7(){//0.创建一个配置对象JedisPoolConfig config = new JedisPoolConfig();config.setMaxTotal(50); //最大连接数config.setMaxIdle(10);  //最大空闲连接//1、创建Jedis连接池对象JedisPool jedisPool = new JedisPool("localhost",6379);//2、获取连接Jedis jedis = jedisPool.getResource();jedis.set("hello","world");//3、关闭连接jedis.close();}

【注意】:关于连接池的参数配置,需要根据自己计算机的性能及业务合理配置,配置参数说明如下:

  • 最大活动对象数:redis.pool.maxTotal=1000    
  • 最大能够保持idle状态的对象数:redis.pool.maxIdle=100  
  • 最小能够保持idle状态的对象数: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  

2.2 Jedis连接池的工具类

以上Jedis连接池的操作可见比较简单,但是涉及到一些配置参数一个个写还是比较麻烦,所以,可以抽取一个Jedis连接池的工具类,包含以下两个需求:

  • 1)加载配置文件,配置连接池的参数;
  • 2)提供获取连接的方法;

【代码实现】:

1)jedis.properties配置文件

host=127.0.0.1
port=6379
maxTotal=50
maxIdle=10

2)JedisPoolUtils工具类

public class JedisPoolUtils {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();}//获取数据,设置到JedisPoolConfigJedisPoolConfig config = new JedisPoolConfig();config.setMaxTotal(Integer.parseInt(pro.getProperty("maxTotal")));config.setMaxIdle(Integer.parseInt(pro.getProperty("maxIdle")));//初始化JedisPooljedisPool =  new JedisPool(config,pro.getProperty("host"),Integer.parseInt(pro.getProperty("port")));}//获取连接public static Jedis getJedis(){return jedisPool.getResource();}}

3)测试使用该工具类:我们可以发现,代码变得精简多了。

@Testpublic void test8(){//获取连接Jedis jedis = JedisPoolUtils.getJedis();//使用jedis.set("hello","world");//关闭jedis.close();}

3 Redis案例实战

上篇博文讲解了Redis的基本指令操作及数据结构,本篇博文前部分讲解了如何利用Jedis Java代码形式操作Redis数据库,此处我们来一个Redis实战案例,此处也会用到我们之前学到的MySQL数据库的内容,可以回顾下,做到学以致用:)如下步骤基本是按照开发思路写的,按照步骤一步步就可以搞定。这也是一个最简单的前端通过Ajax从后端获取数据的小模板了。

【需求】:

  • 1)提供一个index.html页面,页面中有一个省份下拉列表;
  • 2)当页面加载完成后,发送ajax请求,加载所有省份。

【分析】:

【实现步骤】:

1)先准备MySQL数据库,新建一个db3数据库,新建province表,表中插入省份数据;

CREATE DATABASE db3;
USE db3;
CREATE TABLE province(id INT PRIMARY KEY AUTO_INCREMENT,NAME VARCHAR(20) NOT NULL
);
INSERT INTO province VALUES(NULL,'大庆');
INSERT INTO province VALUES(NULL,'上海');
INSERT INTO province VALUES(NULL,'北京');
INSERT INTO province VALUES(NULL,'南京');

2)JavaWeb工程的准备工作

  • 导入jar包;
  • 新建需要的包;

3)在domain包中写一个Province类,对应数据库的province表;

public class Province {private int id;private String name;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}
}

4)在dao包下写一个ProvinceDao接口,定义一个findAll方法,返回Province的List列表;在dao.impl包下写一个ProvinceDao接口的实现类ProvinceDaoImpl,用于服务层调用,操作MySQL数据库,查询province表返回List列表;

public interface ProvinceDao {public List<Province> findAll();
}
public class ProvinceDaoImpl implements ProvinceDao {//1、声明成员变量 jdbctemplementprivate JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());@Overridepublic List<Province> findAll() {//1、定义sqlString sql = "select * from province";//2、执行sqlList<Province> list = template.query(sql, new BeanPropertyRowMapper<Province>(Province.class));return list;}
}

5)在service包下写一个ProvinceService接口,定义一个findAll方法,返回Province的List列表;在service.impl包下写一个ProvinceService接口的实现类ProvinceServiceImpl,用于应用层调用,只需要new ProvinceDaoImpl()一个实例化对象,调用其findAll()方法,返回查询MySQL的List列表;

public interface ProvinceService {public List<Province> findAll();
}
public class ProvinceServiceImpl implements ProvinceService {//声明daoprivate ProvinceDao dao = new ProvinceDaoImpl();@Overridepublic List<Province> findAll() {return dao.findAll();}
}

6)在web.servlet包下写一个ProvinceServlet,要做的就是调用service查询数据库,再将查询的list转换为json,最后响应结果,至此,后台代码已OK;

@WebServlet("/provinceServlet")
public class ProvinceServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//1、调用Service查询ProvinceService service = new ProvinceServiceImpl();List<Province> list = service.findAll();//2、list序列化为jsonObjectMapper mapper = new ObjectMapper();String json = mapper.writeValueAsString(list);//3、响应结果response.setContentType("application/json;charset=utf-8");response.getWriter().write(json);}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request, response);}
}

7)写前端部分代码,新建index.html页面,此处需要做的是:发送Ajax请求,加载省份数据-》获取select-》遍历获取的json数组-》创建option-》调用select的append追加option。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><script src="js/jquery-3.3.1.min.js"></script><script>$(function () {//发送Ajax请求,加载省份数据$.get("provinceServlet",{},function (data) {//[{"id":1,"name":"大庆"},{"id":2,"name":"上海"},{"id":3,"name":"北京"},{"id":4,"name":"南京"}]//获取selectvar province = $("#province");//遍历json数组$(data).each(function () {//创建optionvar option = "<option name='"+ this.id+"'>"+this.name+"</option>";//调用select的append追加optionprovince.append(option);});});});</script>
</head>
<body><select id="province"><option>--请选择城市--</option></select>
</body>
</html>

好了,写到此处,我们启动服务器,看下运行效果吧:

这里看着效果还可以吧,但是~有没有发现哪里不对劲??我们做的是Redis案例实战,怎么半天玩的都是MySQL啦!!不要慌,我们分析下:

实际上上面数据库province表中的数据不是经常变化的;每一次都加载MySQL数据库性能会受影响,所以,我们可以使用Redis数据库做缓存,实现思路为:先从Redis中查询数据,若没有,再从数据库中查询,查询后将数据存入Redis,再返回数据;若Redis中有数据,直接返回数据。

【注意】:使用Redis缓存的是一些不经常发生变化的数据,若MySQL数据库的数据发生改变,如有增删改的相关操作,需要将Redis缓存数据清空(在service对应的增删改方法中),再次存入。

好了,这样关于Redis案例的知识点基本都串起来了,优化后的代码如下:

8)优化后的ProvinceServiceImpl及ProvinceService:

public interface ProvinceService {public List<Province> findAll();public String findAllJson();
}
public class ProvinceServiceImpl implements ProvinceService {//声明daoprivate ProvinceDao dao = new ProvinceDaoImpl();@Overridepublic List<Province> findAll() {return dao.findAll();}//使用Redis缓存@Overridepublic String findAllJson() {//1、从Redis查询数据//获取redis客户端连接Jedis jedis = JedisPoolUtils.getJedis();String province_json = jedis.get("province");//2、判断province_json是否nullif(province_json==null || province_json.length()==0){//redis中无数据,从数据库中查询System.out.println("redis中无数据,从数据库中查询");List<Province> list = dao.findAll();//将list序列化为jsonObjectMapper mapper = new ObjectMapper();try {province_json = mapper.writeValueAsString(list);} catch (JsonProcessingException e) {e.printStackTrace();}//将json数据存入redisjedis.set("province",province_json);jedis.close();}else{System.out.println("redis中有数据,查询Redis缓存");}return province_json;}
}

9)优化后的ProvinceServlet:

@WebServlet("/provinceServlet")
public class ProvinceServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//1、调用Service查询ProvinceService service = new ProvinceServiceImpl();String json = service.findAllJson();//3、响应结果response.setContentType("application/json;charset=utf-8");response.getWriter().write(json);}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request, response);}
}

刷新index页面,从打印信息中我们看下效果:

作于202008192110,已归档

———————————————————————————————————

本文为博主原创文章,转载请注明出处!

若本文对您有帮助,轻抬您发财的小手,关注/评论/点赞/收藏,就是对我最大的支持!

祝君升职加薪,鹏程万里!

http://www.lbrq.cn/news/1287379.html

相关文章:

  • 网站素材模板旅游/搜索软件
  • 网站设计团队/微信小程序怎么开通
  • 外贸网站建站m/优化设计答案六年级
  • 眼镜东莞网站建设/旅游产品推广有哪些渠道
  • 官方网站、门户网站是什么意思?/好的竞价账户托管外包
  • 电子商务网站建设 价格/快速优化seo
  • 做快递单的网站会不会是骗人的/网络营销的主要内容包括
  • 襄阳做网站价格/全网网络营销推广
  • php动态网站开发案例答案第二章/管理方面的培训课程
  • 普洱住房和城乡建设委员会网站/武汉seo网站优化运营
  • 临沂网站建设培训学校/html网页制作
  • 吉林商城网站建设/广州网站优化软件
  • 免费做网站教程/怎么推广销售
  • 河南建网站/抖音怎么运营和引流
  • 通过企业画册宣传_网络网站建设_新闻媒体合作等方式_/福州网站建设策划
  • 响应式网站的排版/网站搜索优化官网
  • 网站代运营收费/官网建设
  • wordpress 网页排版错误/抖音seo关键词优化怎么做
  • 网站技术培训/青岛网站建设公司
  • 网站建设遵循的原则/百度竞价最低点击一次多少钱
  • 网站session/网络公司seo教程
  • 优化一个网站需要多少钱/徐州seo外包
  • 著名网站织梦/搜索广告排名
  • 做网站跟网站设计的区别/爱站seo综合查询
  • 做企业网站要怎么设计方案/百度上怎么发布作品
  • 深圳做网站公司排名/seo搜索优化招聘
  • 网站开发设计技术/最近几天的重大新闻事件
  • 北京网站建设维护/高级搜索引擎
  • 佛山免费发布信息的网站/网络营销的种类有哪些
  • 天猫官方网站首页/软文网站有哪些
  • Linux 如何统计系统上各个用户登录(或者登出)记录出现的次数?
  • Android 蓝牙学习
  • rt-thread 5.2.1 基于at-start-f437开发过程记录
  • 力扣刷题(第九十九天)
  • 车载诊断刷写 --- Flash关于擦除和写入大小
  • C++ 常用的数据结构(适配器容量:栈、队列、优先队列)