• JavaWeb部分 (JSON Redis)


    写在前面:分享技术,共同进步,有不足请见谅,相关意见可评论告知 ~

    编程路漫漫,学习无止尽!

    [toc]

    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 格式 方括号保存数组:[]

    获取数据:

    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){
                //这样的方式获取不行。因为相当于  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对象

    1. 导入jackson的相关jar包
    2. 创建Jackson核心对象 ObjectMapper
    3. 调用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

    使用步骤:

    1. 导入jackson的相关jar包
    2. 创建Jackson核心对象 ObjectMapper
    ObjectMapper mapper = new ObjectMapper();
    
    1. 调用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);
    

    注解:

    1. @JsonIgnore:排除属性。 在原始类定义时标注,eg: Person.java

    2. @JsonFormat:属性值得格式化 在原始类定义时标注 eg: @JsonFormat(pattern = "yyyy-MM-dd")

    3. 复杂java对象转换

    4. List:数组

    5. 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

    1. 存储: set key value
     set username zhangsan
     OK
    
    1. 获取: get key
     get username
    "zhangsan"
    
    1. 删除: del key
     del age
    (integer) 1
    

    二、哈希类型 hash

    1. 存储: hset key field value
    hset myhash username lisi
    (integer) 1
    hset myhash password 123
    (integer) 1
    
    1. 获取: hget key field: 获取指定的field对应的值
    hget myhash username
    "lisi"
    

    hgetall key:获取所有的field和value

    hgetall myhash
    1) "username"
    2) "lisi"
    3) "password"
    4) "123"
    
    1. 删除: hdel key field
    hdel myhash username
    (integer) 1
    

    三、 列表类型 list

    可以添加一个元素到列表的头部(左边)或者尾部(右边)

    1. 添加: (1) lpush key value: 将元素加入列表左表 (2) rpush key value:将元素加入列表右边
     lpush myList a
    (integer) 1
    lpush myList b
    (integer) 2
    rpush myList c
    (integer) 3
    
    1. 获取: lrange key start end :范围获取
    lrange myList 0 -1
    1) "b"
    2) "a"
    3) "c"
    

    存储原理 在这里插入图片描述

    1. 删除: lpop key: 删除列表最左边的元素,并将元素返回 rpop key: 删除列表最右边的元素,并将元素返回

    四、 集合类型 set

    不允许重复元素

    1. 存储:sadd key value
    sadd myset a
    (integer) 1
    sadd myset a
    (integer) 0
    
    1. 获取:smembers key:获取set集合中所有元素
    smembers myset
    1) "a"
    
    1. 删除:srem key value:删除set集合中的某个元素
    srem myset a
    (integer) 1
    

    五、有序集合类型 sortedset

    不允许重复元素,且元素有顺序.每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。

    1. 存储:zadd key score value
     zadd mysort 60 zhangsan
    (integer) 1
    zadd mysort 50 lisi
    (integer) 1
    zadd mysort 80 wangwu
    (integer) 1
    
    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"
    
    1. 删除:zrem key value
    zrem mysort lisi
    (integer) 1
    

    通用命令

    1. keys * : 查询所有的键
    2. type key : 获取键对应的value的类型
    3. 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
    
    1. 重新启动redis服务器,并指定配置文件名称,redis-2.8.9>redis-server.exe redis.windows.conf

    二、AOF:

    日志记录的方式,可以记录每一条命令的操作。可以每一次命令操作后,持久化数据

    1. 编辑redis.windwos.conf文件 appendonly no(关闭aof) --> appendonly yes (开启aof)

       		# appendfsync always : 每一次操作都进行持久化
       		appendfsync everysec : 每隔一秒进行一次持久化
       		# appendfsync no	 : 不进行持久化
      

    基于实战中学习,学习快乐中成长 . 时间会回答成长,成长会回答梦想

  • 相关阅读:
    (转)C#中String跟string的“区别”
    C#中的this关键字
    (转)VS2015基础 指定一个或多个项目执行
    C# 中如何输出双引号(转义字符的使用)
    (转) C#中使用throw和throw ex抛出异常的区别
    springboot
    Zookeeper
    Maven
    springboot
    springboot
  • 原文地址:https://www.cnblogs.com/lzhCreate/p/13432655.html
Copyright © 2020-2023  润新知