JSON解析
常见的JSON解析器
Jsonlib 官方
Gson 谷歌
fastjson 阿里
jackson(SpringMVC框架内置)
使用jackson
导入jar包
创建Jackson核心对象
入口:ObjectMapper对象
调用ObjectMapper的相关方法进行转换
Java对象转json
writeValue(参数1, obj): 返回void
参数1:
File:将obj转换为json保存到文件中
Writer:将obj转换为json并填充到流
OutputStream:将obj转换为json并填充到流
mapper.writeValue(response.getWriter(),obj);
writeValueAsString(obj) //转成json字符串
注解:(注解加在JavaBean的成员变量上)(了解)
@JsonIgnore:忽略属性
@JsonFormat:属性格式转化
@JsonFormat(pattern="yyyy-MM-dd")
复杂java对象转换
List 转成json会变成json数组 [{},{},{}]
Map 转成json就是普通的json对象 {},注意map的key对应的json的key,map的value是json的value
json反序列化成对象(一般不用,框架自动封装)
mapper = new ObjectMapper();
mapper.readValue(json字符串,类的Class对象);
两种方式将json传递给前端:
#######################################################
redis
概念:是一款高性能的NOSQL系列的非关系型数据库
NoSql:Not Only SQL
特点:
1、数据之间没有关联关系(使用键值对存储)
2、数据存储在内存中(这一点很重要)
3、没有统一标准
操作关系型数据库非常耗时
web1.0 关系型数据库
web2.0 (快手、抖音) nosql数据库脱颖而出
nosql数据库简单部署,免费开源,查询快,扩展方便
缺点:缺乏统一的标准,切换学习成本高
关系型与nosql不是对立的,而是互补的
一般将数据存储在关系型数据库中,然后再nosql的数据库中备份存储关系型数据库的数据
相当于用nosql做缓存
redis应用:
缓存
聊天室
秒杀抢购
应用排行榜
网站访问统计
数据过期处理
分布式集群架构中的session分离
redis端口:6379
使用:先启动server,再启动cli
命令操作
redis的数据结构
redis存储的是key,value格式的数据
key是字符串,value有五种数据类型
value的五种数据结构
string:字符串(最基本的类型)
hash:map格式
list:列表,相当于LinkedList
set:相当于HashSet
sortedset:相当于TreeSet
string 用法:
set name zhangsan
get name
del name
hash 用法:相当于map
hset myhash username lisi
hset myhash password 123
hget myhash username
hget myhash password
hgetall myhash
hdel myhash username
list 用法:可以添加一个元素到列表的头部或者尾部(左或者右)
lpush mylist a
lpush mylist b
rpush mylist c
rpush mylist d
顺序为bacd
lrange mylist 0 -1 (取出范围,0到-1代表从0开始取,取到倒数第一个,负数代表倒着数)
lpop mylist (每次删除一个)
rpop mylist
set 用法:无序不可重复
sadd myset a
sadd myset b
smembers myset (取出所有)
srem myset a(删除a)
sortedset 用法:有序的set
zadd mysort 10 zhangsan (需要有一个整数值确定排序规则)
zadd mysort 20 lisi
zadd mysort 30 wangwu
zrange mysort 0 -1 (取出范围)
zrange mysort 0 -1 withscores
zadd mysort 40 lisi
zrem myset lisi
通用命令:
keys *:查询所有的键 *可以换成正则表达式
type mylist:根据键获取数据结构类型
del myset:删除指定的键值对
redis持久化(了解)
服务或计算机重启之前会进行持久化
持久化机制:
RDB:默认方式,无需配置
在一定的时间间隔中,检测key数量的变化情况,然后持久化
AOF:日志记录方式,可以记录每一条命令的操作,可以每一次命令操作后持久化数据,对计算机性能要求高
appendonly no -> appendonly yes
appendfsync 每次操作持久化一次
appendfsync 每隔一秒进行一次持久化
appendfsync 不持久化
Jedis入门
使用java程序操作redis
导入相关jar包
使用步骤:
获取连接
操作
关闭连接
获取连接:
Jedis jedis = new Jedis("localhost",6379); //空参构造默认localhost,6379,连接本机可以不写参数
操作:
jedis.set("username","zhangsan");
关闭连接
jedis.close();
操作详解:
注意带//注释的api
字符串类型(基本类型):
jedis.set("","");
jedis.get("");
jedis.del("");
使用
setex("activecode",20,"5RP2E") //指定过期时间,将activecode-5RP2E存入redis,20s后自动删除
应用场景:设定激活码时间
哈希结构:
jedis.hset("user","name","lisi");
jedis.hget("user","name");
jedis.hgetall("user");
jedis.hdel("user","name");
列表结构:
List<String> mylist = jedis.lrange("mylist",0,-1); //列表使用List接收查询结果,其他的同理
集合结构:
jedis.sadd("myset","java","php","c++"); //这个api可以一次性存储多个值
有序集合结构:
jedis.zadd("mysort",3,"yase"); //分数是double类型
Jedis连接池:JedisPool
使用方法:
创建JedisPool连接池对象
调用方法 getResource() 方法获取连接池
代码:
JedisPool jedisPool = new JedisPool();
Jedis jedis = jedisPool.getResource();
直接使用jedis即可,然后close()
配置连接池
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal();
config.setMaxIdle();
JedisPool jedisPool = new JedisPool(config,"localhost",6379);
自定义Jedis连接池的工具类
//加载配置文件,提供获取链接的方法
public class JedisPoolUtils {
private static JedisPool;
static {
JedisPoolUtils.class.getClassLoader().
Properties prop = new Properties();
prop.load(is);
JedisPoolConfig config = new
config.setMaxTotal(prop.getProperty())
config.setMaxIdle(prop.getProperty())
JedisPool = new JedisPool(config,prop.getProperty(),prop.getProperty);
}
//获取方法的方法
public static Jedis getJedis(){
return jedisPool.getResource();
}
}
案例分析:
缓存在service层
先查缓存
如果缓存没内容
调用dao查询数据库
如果有,直接返回缓存的内容
注意:使用redis缓存一些不经常发生变化的数据
数据库的数据一旦发生改变,则需要更新缓存
数据库表的执行,增删改的相关操作,需要将缓存数据情况,再次存入
在service对应的增删改方法中,将redis数据删除
开发web项目时,代码的编写从哪一层开始,
设置响应格式(text/json)的方式有很多,开发中用哪种方法好?
|
|