1. ASynchronous JavaScript And XML 异步的JavaScript 和 XML
1.同步和异步:客户端和服务端相互通信的基础上
客户端必须等待服务器端的响应,在响应期间客户端不能做其他操作
客户端不需要等待服务器端的响应,在服务器处理请求的过程中,客户端可以进行其他的操作
ajax是一种无需重新加载整个网页的情况下,能够更新部分网页的技术。
通过在后台与服务器进行少量数据交换,ajax可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。
JQuery实现ajax:
1.$.ajax()
语法:$.ajax({
url:"ajaxservlet",
type:"POST",
data:{“username”:“jack”,“age”:“23”},
sucess:function (data){
alert(data);
},
dataType:“text”
});
2.$.get:
$.get(url,[data],[callback],[type])
参数
url:请求路径
data:请求参数
callback:回调函数
type:响应结果的数据类型
3. $.post():发送post请求
$.post(url, [data], [callback], [type])
* 参数:
* url:请求路径
* data:请求参数
* callback:回调函数
* type:响应结果的类型
2.json
javascript对象表示法
json现在多用于存储和交换文本信息的语法,进行数据的传输,比xml更小更快,更容易解析
语法:
1.基本规则
数据在名称/值对中:json数据是由键值对构成的
键用引号引起来,也可以不适用引号
值得取值类型:
1.数字(整数或浮点数)
2.字符串(在双引号中)
3.逻辑值(true或false)
4.数组(方括号中)
5.对象(花括号中)
6.null
数据由逗号分隔:多个键值对由逗号分隔
花括号保存对象:使用{}定义json格式
方括号保存数组【】
2.获取数据
1.json对象.键名
2.json对象【“键名”】
3.数组对象【索引】
4.遍历
var person = {"name": "张三", age: 23, 'gender': true};
var ps = [{"name": "张三", "age": 23, "gender": true},
{"name": "李四", "age": 24, "gender": true},
{"name": "王五", "age": 25, "gender": false}];
获取person对象的所有键值对
for in 循环
for(var key in person{
alert(key+“:”+person【key】);
}
获取ps中的所有值
for(var i=0;i<ps.length;i++){
var p=pas[i];
for(var key in p){
alert(key+":"+p[key]);
}
}
3.json对象和java对象相互转换
创建jackson核心对象objectMapper
调用objectMapper的方法进行转换
readValue(json字符串数据,Class)
java对象转json
创建jackson核心对象objectMapper
调用objectMapper的方法进行转换
* writeValue(参数1,obj):
参数1:
File:将obj对象转换为JSON字符串,并保存到指定的文件中
Writer:将obj对象转换为JSON字符串,并将json数据填充到字符输出流中
OutputStream:将obj对象转换为JSON字符串,并将json数据填充到字节输出流中
* writeValueAsString(obj):将对象转为json字符串
注解
@jsonIgnore:排除该属性
@JsonFormat:属性值的格式化
@JsonFormat(pattern = "yyyy-MM-dd")
3.redis
redis是一款高性能的NOSQL系列的非关系型数据库
NoSQL(NoSQL = Not Only SQL),意即“不仅仅是SQL”,是一项全新的数据库理念,泛指非关系型的数据库。
优点:
1)成本:nosql数据库简单易部署,基本都是开源软件,不需要像使用oracle那样花费大量成本购买使用,相比关系型数据库价格便宜。
2)查询速度:nosql数据库将数据存储于缓存之中,关系型数据库将数据存储在硬盘中,自然查询速度远不及nosql数据库。
3)存储数据的格式:nosql的存储格式是key,value形式、文档形式、图片形式等等,所以可以存储基础类型以及对象或者是集合等各种格式,而数据库则只支持基础类型。
4)扩展性:关系型数据库有类似join这样的多表查询机制的限制导致扩展很艰难。
缺点:
1)维护的工具和资料有限,因为nosql是属于新的技术,不能和关系型数据库10几年的技术同日而语。
2)不提供对sql的支持,如果不支持sql这样的工业标准,将产生一定用户的学习和使用成本。
3)不提供关系型数据库对事务的处理。
非关系型数据库的优势:
1)性能NOSQL是基于键值对的,可以想象成表中的主键和值的对应关系,而且不需要经过SQL层的解析,所以性能非常高。
2)可扩展性同样也是因为基于键值对,数据之间没有耦合性,所以非常容易水平扩展。
关系型数据库的优势:
1)复杂查询可以用SQL语句方便的在一个表以及多个表之间做非常复杂的数据查询。
2)事务支持使得对于安全性能很高的数据访问要求得以实现。对于这两类数据库,对方的优势就是自己的弱势,反之亦然。
什么是Redis
Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库,官方提供测试数据,50个并发执行100000个请求,读的速度是110000次/s,写的速度是81000次/s ,且Redis通过提供多种键值数据类型来适应不同场景下的存储需求,目前为止Redis支持的键值数据类型如下:
1) 字符串类型 string
2) 哈希类型 hash:map格式
3) 列表类型 list:linkedlist格式 支持重复元素
4) 集合类型 set 不允许重复元素
5) 有序集合类型 sortedset 不允许重复元素 且元素有顺序
字符串类型 string
存储:set key value
获取:get key
删除:del key
哈希类型 hash
存储:hset key field value
获取:hget key filed
获取所有:hgetall key
删除: hdel key filed
列表类型:添加一个元素在列表的头部(左边)或者尾部(右边)
添加:1.lpush key value 加入列表左边
2.rpush key value 加入列表右边
获取: lrange key start end:范围获取
删除:lpop key:删除最左边 的元素并返回
rpop key:删除最右边的元素并返回
集合类型
存储:sadd key value
获取:smembers key
删除:srem key value
有序集合类型
存储:zadd key score value
获取:zrange key start end
zrange key start end withscores
删除:zrem key value
通用命令:keys * 查询所有的键
type key 获取键对应的value的类型
del key 删除指定的key value
rdis是一个内存数据库,当redis服务器重启,或者电脑重启,数据就会丢失,我们可以让redis内存中的数据持久化保存到硬盘中的文件中
redis持久化机制:
1.RDB默认方式 不需要进行配置,默认配置
在一定的间隔时间中,检测key的变化情况,然后持久化数据
1.编辑redis.windows.conf文件
# after 900 sec (15 min) if at least 1 key changed
save 900 1
# after 300 sec (5 min) if at least 10 keys changed
save 300 10
# after 60 sec if at least 10000 keys changed
save 60 10000
2. 重新启动redis服务器,并指定配置文件名称
D:\JavaWeb2018\day23_redis\资料\redis\windows-64\redis-2.8.9>redis-server.exe redis.windows.conf
2.AOF:日志记录的方式,可以记录每一条命令的操作。可以每一次命令操作后,持久化数据。
1.编辑redis.windows.conf文件
appendonly no(关闭aof) --> appendonly yes (开启aof)
# appendfsync always : 每一次操作都进行持久化
appendfsync everysec : 每隔一秒进行一次持久化
# appendfsync no : 不进行持久化
java客户端 jedis
java操作redis数据库的工具
使用
获取连接
//1. 获取连接
Jedis jedis = new Jedis("localhost",6379);
//2. 操作
jedis.set("username","zhangsan");
//3. 关闭连接
jedis.close();
jedis连接池
-
创建JedisPool连接池对象
-
调用方法 getResource()方法获取Jedis连接 //0.创建一个配置对象 JedisPoolConfig config = new JedisPoolConfig(); config.setMaxTotal(50); config.setMaxIdle(10);
-
2.配置文件创建JedisPool连接池对象
-
* 连接池工具类 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(); } //获取数据,设置到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(); } }
-