JSON

基本概念:JavaScript Object Notation javaScript对象表示法

  1. json多用于存储和交换文本信息的语法
  2. 进行数据传输,类似于XML,但是更小更快

语法:

  1. 基本规则:
  1. 数据在名称/值对中:json数据是由键值对构成
  1. 键用引号(单双都可)引起来,也可以不使用引号
  2. 值对取直类型:
  1. 数字
  2. 字符串(双引号中)
  3. 逻辑值{true或false}
  4. 数组(在方括号中)
  5. Json对象(在花括号中)
  6. null
  1. 数据由逗号分隔
  1. 多个键值对之间由逗号分隔
  1. 花括号保存对象:实验{ }定义json格式
  2. 方括号保存数组:[ ]
  1. 获取数据:
  1. json对象.键名
  2. json对象[“键名”]
  3. 数组对象[索引]

JSON数据和java对象的相互转换

  1. JSON解析器:封装好的JSON工具类,节省代码编写
  1. Jsonlib
  2. Gson
  3. fastjson
  4. jackson(Spring框架内值解析器)
  1. JSON转为Java对象
  2. Java对象转换JSON
  1. 步骤:
  1. 导入jackson的jar包
  2. 创建Jackson核心对象ObjectMapper
  3. 调用ObjectMapper的相关方法(writeValue)进行转换
  1. 转换方式:
  1. writeValue(参数1,obj对象)
  1. 参数1有很多重载形式:
  1. File:将obj对象转换为JSON字符串,并保存到指定的文件中
  2. Writer:将obj对象转换为JSON字符串,并将json数据填充到字符输出流
  3. OutputStream:将obj对象转换为JSON字符串,并将json数据填充到字节输出流
  4. writeValueAsString(obj):将obj对象转换为JSON字符串,直接返回给用户writeValueAsString(obj):将对象转为json字符串
  1. 代码:
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);
  1. 注解:
  1. @JsonIgnore:排除属性(加在对象类的属性上)
@JsonIgnore
    private Date birthday;
  1. @JsonFotmat:属性值格式化
@JsonFormat(pattern = "yyyy-MM-dd")
    private Date birthday;
  1. 复杂的java对象如果转json
  1. List:数组
  2. Map:跟对象格式一致
  3. 两个都可以直接转

JSON对象转Java

  1. 步骤:
  1. 导入jackson的jar包
  2. 创建Jackson核心对象ObjectMapper
  3. 调用ObjectMapper的相关方法(readValue)进行转换
  1. 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系列的非关系型数据库

  1. Not Only SQL,泛指非关系型数据库
  2. 对比关系型和非关系型数据库:
  1. 关系型:mysql、oracle
  1. 数据之间有关联关系
  2. 数据存储在硬盘的文件(表)中
  1. 非关系型:redis(键值型)、hbase(列存储)、MongoDB(文档型)、Neo4J(图形数据库)
  1. 没有表的概念,所有数据全部是key:value的键值对的形式
  2. 数据之间没有关联关系
  3. 数据存储在内存中,相比操作IO快很多
  1. Redis:C语言开发、高性能键值对数据库,
  2. 应用场景:
  1. 缓存(数据查询、短链接、新闻内容、商品内容)
  2. 聊天室的在线好友列表
  3. 任务队列(秒杀、抢购)
  4. 应用排行榜
  5. 网站访问统计
  6. 数据过期处理

使用:

  1. redis.conf:配置文件
  2. 运行命令:
#	运行服务器端
$ redis-server

#	连接redis 
$ redis-cli -p 6379 -h 127.0.0.1

# 存值
$ set name "Parzival"

# 取值
$ get name

redis的数据结构

  1. redis存储的是:key,value格式的数据,其中key都是字符串,value有5种
  1. 字符串类型 string
  2. 哈希类型 hash (map格式)
  3. 列表类型 list (链表格式)允许重复元素
  4. 集合类型 set (hashSet)不允许重复元素
  5. 有序集合类型 sortedset 不允许重复元素,且有序

命令操作:

  1. 字符串类型 string
  1. 存储:set key value
  2. 获取:get key
  3. 删除:del key
  1. 哈希类型 hash
  1. 存储:hset key field value
  2. 获取指定field:hget key field
  1. 获取全部field值:hgetall key
  1. 删除:hdel key field
  1. 列表类型 list (按照插入顺序排序),可以添加一个元素到列表头部(左侧)或尾部(右侧)
  1. 添加:
  1. 左侧添加: lpush key value
  2. 右侧添加: rpush key value
  1. 获取:
  1. 范围获取: lrange key start end
  1. 如果获取所有的话:start为0,end为-1
  1. 删除:
  1. 左侧弹出: lpop key
  2. 右侧弹出: rpop key
  1. 集合类型 set :不允许重复
  1. 存储:sadd key value1 value2 value3
  2. 获取: smembers key:获取set集合中所有元素
  3. 删除:srem key value:删除set集合中的某个元素
  1. 有序集合类型 sortedset :不允许重复元素,且元素有序(按照分数进行排序,分数也要存储)
  1. 存储:zadd key score value
  2. 获取:zrange key start end
  1. 获取同时获取分数:zrange key start end with scores
  1. 删除:zrem key value
  1. 通用命令:
  1. keys * : 获取所有的键值
  2. type key:获取对应键值的类型
  3. del key :删除指定键值

持久化

  1. redis是一个内存数据库,当redis服务器重启数据会丢失,我们可以将redis内存中的数据持久化保存到内存中。
  2. 持久化机制:
  1. RDB:默认方式,不需要配置默认使用这种机制
  1. 在一定的间隔时间中,检测key变化情况,然后去持久化数据
  2. 较为推荐,对性能影响比较低
  3. 使用方式:
  1. 编辑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
  1. 重新启动服务器,并指定配置文件
$ redis-server redis.conf
  1. AOF:日志记录方式,可以记录每一条命令的操作。可以每一次命令操作后,持久化数据
  1. 使用步骤:
  1. 打开配置文件,找到appendonly ,默认值为no ,改为yes
# appendfsync always	:	每一次操作都进行持久化
appendfsync everysec	:	每间一秒操作都进行持久化(默认)
# appendfsync no			:	不进行持久化
  1. 重新启动服务器,并指定配置文件