JSON
基本概念:JavaScript Object Notation javaScript对象表示法
- json多用于存储和交换文本信息的语法
- 进行数据传输,类似于XML,但是更小更快
语法:
- 基本规则:
- 数据在名称/值对中:json数据是由键值对构成
- 键用引号(单双都可)引起来,也可以不使用引号
- 值对取直类型:
- 数字
- 字符串(双引号中)
- 逻辑值{true或false}
- 数组(在方括号中)
- Json对象(在花括号中)
- null
- 数据由逗号分隔
- 多个键值对之间由逗号分隔
- 花括号保存对象:实验{ }定义json格式
- 方括号保存数组:[ ]
- 获取数据:
- json对象.键名
- json对象[“键名”]
- 数组对象[索引]
JSON数据和java对象的相互转换
- JSON解析器:封装好的JSON工具类,节省代码编写
- Jsonlib
- Gson
- fastjson
- jackson(Spring框架内值解析器)
- JSON转为Java对象
- Java对象转换JSON
- 步骤:
- 导入jackson的jar包
- 创建Jackson核心对象ObjectMapper
- 调用ObjectMapper的相关方法(writeValue)进行转换
- 转换方式:
- writeValue(参数1,obj对象)
- 参数1有很多重载形式:
- File:将obj对象转换为JSON字符串,并保存到指定的文件中
- Writer:将obj对象转换为JSON字符串,并将json数据填充到字符输出流
- OutputStream:将obj对象转换为JSON字符串,并将json数据填充到字节输出流
- writeValueAsString(obj):将obj对象转换为JSON字符串,直接返回给用户writeValueAsString(obj):将对象转为json字符串
- 代码:
Person p = new Person();
p.setName("dyg");
p.setAge(23);
p.setGender("男");
// 2.创建Jackson的核心对象 ObjectMapper
ObjectMapper mapper = new ObjectMapper();
// 3.转换
String json = mapper.writeValueAsString(p);
System.out.println(json);
// 写入文件
mapper.writeValue(new File("./a.txt"),p);
// 关联到writer中
mapper.writeValue(new FileWriter("./b.txt"),p);
- 注解:
- @JsonIgnore:排除属性(加在对象类的属性上)
@JsonIgnore
private Date birthday;
- @JsonFotmat:属性值格式化
@JsonFormat(pattern = "yyyy-MM-dd")
private Date birthday;
- 复杂的java对象如果转json
- List:数组
- Map:跟对象格式一致
- 两个都可以直接转
JSON对象转Java
- 步骤:
- 导入jackson的jar包
- 创建Jackson核心对象ObjectMapper
- 调用ObjectMapper的相关方法(readValue)进行转换
- readValue(json字符串数据,Class)
// 1.
String json = "{\"gender\":true,\"name\":\"zs\",\"age\":23}";
// 2.
ObjectMapper mapper = new ObjectMapper();
// 3.
Person person = mapper.readValue(json, Person.class);
System.out.println(person);
redis
概念:redis是一款高性能的NPSQL系列的非关系型数据库
- Not Only SQL,泛指非关系型数据库
- 对比关系型和非关系型数据库:
- 关系型:mysql、oracle
- 数据之间有关联关系
- 数据存储在硬盘的文件(表)中
- 非关系型:redis(键值型)、hbase(列存储)、MongoDB(文档型)、Neo4J(图形数据库)
- 没有表的概念,所有数据全部是key:value的键值对的形式
- 数据之间没有关联关系
- 数据存储在内存中,相比操作IO快很多
- Redis:C语言开发、高性能键值对数据库,
- 应用场景:
- 缓存(数据查询、短链接、新闻内容、商品内容)
- 聊天室的在线好友列表
- 任务队列(秒杀、抢购)
- 应用排行榜
- 网站访问统计
- 数据过期处理
使用:
- redis.conf:配置文件
- 运行命令:
# 运行服务器端
$ redis-server
# 连接redis
$ redis-cli -p 6379 -h 127.0.0.1
# 存值
$ set name "Parzival"
# 取值
$ get name
redis的数据结构
- redis存储的是:key,value格式的数据,其中key都是字符串,value有5种
- 字符串类型 string
- 哈希类型 hash (map格式)
- 列表类型 list (链表格式)允许重复元素
- 集合类型 set (hashSet)不允许重复元素
- 有序集合类型 sortedset 不允许重复元素,且有序
命令操作:
- 字符串类型 string
- 存储:set key value
- 获取:get key
- 删除:del key
- 哈希类型 hash
- 存储:hset key field value
- 获取指定field:hget key field
- 获取全部field值:hgetall key
- 删除:hdel key field
- 列表类型 list (按照插入顺序排序),可以添加一个元素到列表头部(左侧)或尾部(右侧)
- 添加:
- 左侧添加: lpush key value
- 右侧添加: rpush key value
- 获取:
- 范围获取: lrange key start end
- 如果获取所有的话:start为0,end为-1
- 删除:
- 左侧弹出: lpop key
- 右侧弹出: rpop key
- 集合类型 set :不允许重复
- 存储:sadd key value1 value2 value3
- 获取: smembers key:获取set集合中所有元素
- 删除:srem key value:删除set集合中的某个元素
- 有序集合类型 sortedset :不允许重复元素,且元素有序(按照分数进行排序,分数也要存储)
- 存储:zadd key score value
- 获取:zrange key start end
- 获取同时获取分数:zrange key start end with scores
- 删除:zrem key value
- 通用命令:
- keys * : 获取所有的键值
- type key:获取对应键值的类型
- del key :删除指定键值
持久化
- redis是一个内存数据库,当redis服务器重启数据会丢失,我们可以将redis内存中的数据持久化保存到内存中。
- 持久化机制:
- RDB:默认方式,不需要配置默认使用这种机制
- 在一定的间隔时间中,检测key变化情况,然后去持久化数据
- 较为推荐,对性能影响比较低
- 使用方式:
- 编辑redis.conf配置文件
# In the example below the behaviour will be to save:
# 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
save 10 5
- 重新启动服务器,并指定配置文件
$ redis-server redis.conf
- AOF:日志记录方式,可以记录每一条命令的操作。可以每一次命令操作后,持久化数据
- 使用步骤:
- 打开配置文件,找到appendonly ,默认值为no ,改为yes
# appendfsync always : 每一次操作都进行持久化
appendfsync everysec : 每间一秒操作都进行持久化(默认)
# appendfsync no : 不进行持久化
- 重新启动服务器,并指定配置文件