写在前面:分享技术,共同进步,有不足请见谅,相关意见可评论告知 ~
编程路漫漫,学习无止尽!
文章目录
JSON
概念: JavaScript Object Notation JavaScript对象表示法
Java体现
Person p = new Person();
p.setName("高海千歌");
p.setAge(18);
p.setGender("女");
JavaScript -> JSON 体现
(1)普通格式
var p = {"name":"高海千歌","age":18,"gender":"女"};
(2) 嵌套格式 [ ] -> { }
var ps = [
{"name": "张三", "age": 23, "gender": true},
{"name": "李四", "age": 24, "gender": true},
{"name": "王五", "age": 25, "gender": false}
];
(3) 嵌套格式 { } -> [ ]
var pss = {
"persons" : [
{"name": "张三", "age": 23, "gender": true},
{"name": "李四", "age": 24, "gender": true},
{"name": "王五", "age": 25, "gender": false}
]
}
优点
json现在多用于存储和交换文本信息的语法
行数据的传输
JSON 比 XML 更小、更快,更易解析。
语法:
基本规则
数据在名称/值对中:json数据是由键值对构成的
键用引号(单双都行)引起来,也可以不使用引号
值得取值类型:
1. 数字(整数或浮点数)
2. 字符串(在双引号中)
3. 逻辑值(true 或 false)
4. 数组(在方括号中) {"persons":[{},{}]}
5. 对象(在花括号中) {"address":{"province":"陕西"....}}
6. null
格式:
数据由逗号分隔:多个键值对由逗号分隔,花括号保存对象:使用{}定义json 格式
方括号保存数组:[]
获取数据:
- json对象.键名
- json对象[“键名”]
- 数组对象[索引]
- 遍历
分别遍历:
嵌套格式 [ ] -> { }
嵌套格式 { } -> [ ]
// 遍历对象
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){
//这样的方式获取不行。因为相当于 person."name"
//alert(key + ":" + person.key);
//正解
alert(key+":"+person[key]);
}
//获取ps中的所有值
for (var i = 0; i < ps.length; i++) {
var p = ps[i];
for(var key in p){
alert(key+":"+p[key]);
}
}
JSON数据和Java对象的互转
JSON解析器:常见的解析器:Jsonlib,Gson,fastjson,jackson
JSON转为Java对象
- 导入jackson的相关jar包
- 创建Jackson核心对象 ObjectMapper
- 调用ObjectMapper的相关方法进行转换
readValue(json字符串数据,Class)
初始化JSON字符串
String json = "{\"gender\":\"男\",\"name\":\"张三\",\"age\":23}";
创建ObjectMapper对象
ObjectMapper mapper = new ObjectMapper();
转换为Java对象 Person对象
Person person = mapper.readValue(json, Person.class);
System.out.println(person);
Java对象转换JSON
使用步骤:
- 导入jackson的相关jar包
- 创建Jackson核心对象 ObjectMapper
ObjectMapper mapper = new ObjectMapper();
- 调用ObjectMapper的相关方法进行转换
转换方法:
writeValue(参数1,obj):
参数1:
File:将obj对象转换为JSON字符串,并保存到指定的文件中
Writer:将obj对象转换为JSON字符串,并将json数据填充到字符输出流中
OutputStream:将obj对象转换为JSON字符串,并将json数据填充到字节输出流中
writeValueAsString(obj):
将对象转为json字符串
String json = mapper.writeValueAsString(p);
System.out.println(json);//{"name":"张三","age":23,"gender":"男"}
writeValue,将数据写到d://a.txt文件中
mapper.writeValue(new File("d://a.txt"),p);
writeValue.将数据关联到Writer中
mapper.writeValue(new FileWriter("d://b.txt"),p);
注解:
-
@JsonIgnore:排除属性。
在原始类定义时标注,eg: Person.java -
@JsonFormat:属性值得格式化
在原始类定义时标注 eg:@JsonFormat(pattern = "yyyy-MM-dd")
-
复杂java对象转换
-
List:数组
-
Map:对象格式一致
Redis
概念: redis是一款高性能的NOSQL系列的非关系型数据库
Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库
菜鸟教程
https://www.runoob.com/redis/redis-tutorial.html
redis的应用场景
1.缓存(数据查询、短连接、新闻内容、商品内容等等)
2.聊天室的在线好友列表
3.任务队列。(秒杀、抢购、12306等等)
4.应用排行榜
5.网站访问统计
6.数据过期处理(可以精确到毫秒
7.分布式集群架构中的session分离
NOSQL拓展
• 键值(Key-Value)存储数据库
相关产品: Tokyo Cabinet/Tyrant、Redis、Voldemort、Berkeley DB
典型应用: 内容缓存,主要用于处理大量数据的高访问负载。
数据模型: 一系列键值对
优势: 快速查询
劣势: 存储的数据缺少结构化
• 列存储数据库
相关产品:Cassandra, HBase, Riak
典型应用:分布式的文件系统
数据模型:以列簇式存储,将同一列数据存在一起
优势:查找速度快,可扩展性强,更容易进行分布式扩展
劣势:功能相对局限
• 文档型数据库
相关产品:CouchDB、MongoDB
典型应用:Web应用(与Key-Value类似,Value是结构化的)
数据模型: 一系列键值对
优势:数据结构要求不严格
劣势: 查询性能不高,而且缺乏统一的查询语法
• 图形(Graph)数据库
相关数据库:Neo4J、InfoGrid、Infinite Graph
典型应用:社交网络
数据模型:图结构
优势:利用图结构相关算法。
劣势:需要对整个图做计算才能得出结果,不容易做分布式的集群方案。
配置介绍
数据结构
键值数据类型如下:
1) 字符串类型 string
2) 哈希类型 hash
3) 列表类型 list
4) 集合类型 set
5) 有序集合类型 sortedset
修正:关于有序无序问题
命令操作
前序
(1)点击redis-server.exe
(2)点击redis-cli.exe
注意——解决无法连接的情况
cmd redis 所在文件夹,输入redis-server.exe redis.windows.conf
一、字符串类型 string
- 存储: set key value
set username zhangsan
OK
- 获取: get key
get username
"zhangsan"
- 删除: del key
del age
(integer) 1
二、哈希类型 hash
- 存储: hset key field value
hset myhash username lisi
(integer) 1
hset myhash password 123
(integer) 1
- 获取:
hget key field: 获取指定的field对应的值
hget myhash username
"lisi"
hgetall key:获取所有的field和value
hgetall myhash
1) "username"
2) "lisi"
3) "password"
4) "123"
- 删除: hdel key field
hdel myhash username
(integer) 1
三、 列表类型 list
可以添加一个元素到列表的头部(左边)或者尾部(右边)
- 添加:
(1) lpush key value: 将元素加入列表左表
(2) rpush key value:将元素加入列表右边
lpush myList a
(integer) 1
lpush myList b
(integer) 2
rpush myList c
(integer) 3
- 获取:
lrange key start end :范围获取
lrange myList 0 -1
1) "b"
2) "a"
3) "c"
存储原理
- 删除:
lpop key: 删除列表最左边的元素,并将元素返回
rpop key: 删除列表最右边的元素,并将元素返回
四、 集合类型 set
不允许重复元素
- 存储:sadd key value
sadd myset a
(integer) 1
sadd myset a
(integer) 0
- 获取:smembers key:获取set集合中所有元素
smembers myset
1) "a"
- 删除:srem key value:删除set集合中的某个元素
srem myset a
(integer) 1
五、有序集合类型 sortedset
不允许重复元素,且元素有顺序.每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
- 存储:zadd key score value
zadd mysort 60 zhangsan
(integer) 1
zadd mysort 50 lisi
(integer) 1
zadd mysort 80 wangwu
(integer) 1
- 获取:zrange key start end [withscores]
zrange mysort 0 -1
1) "lisi"
2) "zhangsan"
3) "wangwu"
以排名的形式
zrange mysort 0 -1 withscores
1) "zhangsan"
2) "60"
3) "wangwu"
4) "80"
5) "lisi"
6) "500"
- 删除:zrem key value
zrem mysort lisi
(integer) 1
通用命令
- keys * : 查询所有的键
- type key : 获取键对应的value的类型
- del key:删除指定的key value
持久化
redis是一个内存数据库,当redis服务器重启,获取电脑重启,数据会丢失,我们可以将redis内存中的数据持久化保存到硬盘的文件中。
redis持久化机制:
一、 RDB:
默认方式,不需要进行配置,默认就使用这种机制,在一定的间隔时间中,检测key的变化情况,然后持久化数据
编辑redis.windwos.conf文件
save 900 1
after 900 sec (15 min) if at least 1 key changed
save 300 10
after 300 sec (5 min) if at least 10 keys changed
save 60 10000
after 60 sec if at least 10000 keys changed
- 重新启动redis服务器,并指定配置文件名称,
redis-2.8.9>redis-server.exe redis.windows.conf
二、AOF:
日志记录的方式,可以记录每一条命令的操作。可以每一次命令操作后,持久化数据
-
编辑
redis.windwos.conf
文件
appendonly no(关闭aof) --> appendonly yes (开启aof)# appendfsync always : 每一次操作都进行持久化 appendfsync everysec : 每隔一秒进行一次持久化 # appendfsync no : 不进行持久化
基于实战中学习,学习快乐中成长
.
时间会回答成长,成长会回答梦想