A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

【redis】 高性能的 nosql 系列的 非关系型数据库 C语言开发 开源 键值对

    nosql : not only sql

    01 nosql vs 关系型数据库

        01 查询速度:内存 硬盘【】
        02 存储数据类型:
            01 nosql 的存储形式是 key-value 形式,文档形式,图片形式等等,也可以存储基本类型以及对象或者集合等各种形式
            02 关系型数据库只支持基本类型
        03 拓展性:关系型数据库有类型 join 这样的多表查询机制的限制导致拓展艰难

        04 维护工具和资料有限
        05 不提供对 sql 的支持
        06 不提供 关系型数据库 对事务的处理【】

    02 一般将数据存储在 关系型数据库,在nosql数据库中备份关系型数据库的数据

    03 数据类型
        string list set hash sortedset

    04 应用场景
        01 缓存(数据查询、短连接、新闻内容、商品内容)
        02 聊天室的在线好友列表
        03 任务队列(秒杀、抢购、12306等)
        04 应用排行榜
        05 网站访问统计
        06 数据过期处理(可以精确到毫秒)
        07 分布式集群架构中的 session 分离

    05 下载安装
        01 https://redis.io
        02 http://www.redis.net.cn
        03 一些说明
            01 redis.windows.conf        配置文件
            02 redis-cli.exe                redis的客户端
            03 redis-server.exe                redis服务器端

06 命令操作

    01 string
        01 set key value
        02 get key
        03 del key

    02 hash
        01 hset key field value
        02 hget key field
        03 hgetall key
        04 hdel key field

    03 list
        01 lpush/rpush key value
        02 lrange key start end         【lrange key 0 -1】
        03 lpop/rpop key
       
    04 set
        01 sadd key value
        02 srem key value 【】
        03 smembers key        【】

    05 sortedset (根据score排序)
        01 zadd key score value
        02 zrange key start end
        03 zrem key value 【】

07 通用命令
    01 keys *
    02 type key
    03 del key

08 持久化
    01 RDB 默认方式,在一定时间间隔内,检测key的变化情况,满足则持久化数据
        redis.window.conf

#   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

        【】redis-server.exe redis.windows.conf
            修改完配置文件,需要重新启动服务器:

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

appendonly no(关闭aof) --> appendonly yes (开启aof)

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


【jedis】 java操作redis数据库的工具

Jedis jedis = new Jedis("localhost",6379);
jedis.set("username","zhangsan");
jedis.close();

    string list hash set sortedset 操作方法雷同

【JedisPool】

JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(50);
config.setMaxIdle(10);
JedisPool jedisPool = new JedisPool(config,"localhost",6379);
Jedis jedis = jedisPool.getResource();

//operation

jedis.close();【归还连接池】

【JedisPoolUtils】


【案例】
    省份下拉列表(数据查询:先从缓存中获取,获取不到再到数据库中获取)

缓存的数据最好是不进行增删改的数据
如果需要进行增删改,需要先删除redis中的数据,再更新


【ajax】 异步的javascript和xml

    01 异步 同步

    02 ajax 能在无需重新加载整个页面的情况下,更新局部网页

    03 实现

01 原生 js 实现 (了解)
       
        01 创建核心对象

        var xmlhttp;
        if (window.XMLHttpRequest)
        {// code for IE7+, Firefox, Chrome, Opera, Safari
                xmlhttp=new XMLHttpRequest();
        }
        else
        {// code for IE6, IE5
                xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
        }

        02 建立连接 get/post url 同步/异步

        xmlhttp.open("GET","ajaxServlet?username=tom",true);

        03 发送请求

        xmlhttp.send();

        04 做出响应

        xmlhttp.onreadystatechange=function()
        {
                //判断readyState就绪状态是否为4,判断status响应状态码是否为200
                if (xmlhttp.readyState==4 && xmlhttp.status==200)
                {
                   //获取服务器的响应结果
                        var responseText = xmlhttp.responseText;
                        alert(responseText);
                }
        }

02 jq 实现

    01 $.ajax({

        url : "",
        type : "POST",
        // data : "username=zero&age=12&gender=true",
        data : {"username":"zero",age:12,"gender":true},
        success:function(data){ alert(data); },

        error:function(data){ alert(data); },
        dataType:"text"
    });

    02 $.get(
        "url",
        {"username":"zero",age:12,"gender":true},
        function(data){ alert(data); },【成功后调用的函数】
        "type"
    );

    03 $.post(
        "url",
        {"username":"zero",age:12,"gender":true},
        function(data){ alert(data); },【成功后调用的函数】
        "type"
    );


【json】 javascript 对象表示法

    var p = {"name":"张三","age":23,"gender":"男"};
    var arr = ["zero","abel"];

    json 存储和交换文本信息
    比xml 更小,更快,更易解析

    01 json 数据由键值对组成
        键        用单引号或双引号引起来,也可以不使用引号
        值        数字 字符串 true/false 对象 数组 null

    02 获取数据

        p.name p["name"] arr[0]

    03 遍历

        for(var key in p){ alert(p[key]); }
        for(var i=0;i<arr.length;i++){ alert(arr[i]); }

        $.each(p,function(key,element){ alert(key + "---" + element); });

        $(p).each(function(key,element){ alert(key + "---" + element); });

    04 json 对象 与 java 对象 的相互转换

        json 解析器: jsonlib gson fastjson jackson【介绍】

01 导入 jar 包
02 创建 Jackson 核心对象 ObjectMapper

    ObjectMapper.writeValue(File/Writer/OutputStream,obj)

    String jsonStr = ObjectMapper.writeValueAsString(obj)

    @JsonIgnore
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")

    User user = objectMapper.readValue(jsonStr, User.class);

【案例】ajax + jquery ,异步检验用户名是否存在

    01 mapper.writeValue(response.getWriter(),map);
    02 指定响应的数据格式 【查询tomcat】
        response.setContentType("application/json;charset=utf-8");
    03 ajax 请求指定 type 为 json


【JQuery-02】

01 动画

    01 show hide                        ("fast","swing",function(){ ... })
    02 slideDown slideUp                (5000,"linear")
    03 fadeIn fadeOut                        ("slow")
    04 toggle slideToggle fadeToggle        ("slow")

02 遍历

    01 for(var i=0;i<arr.length;i++){ .. }
    02 jq对象.each(function(index,element){ ... });
    03 $.each(objject,function(index,element){ ... });

    04 for(ele of arr){ ... } 【jquery 3.0版本后提供的方式】


03 事件的绑定与解除

    01 传统的方式

        focus blur change click dblclick
        keydowm keyup keypress
        mousedown mouseenter mouseleave
        submit

        链式编程:jq对象.click(function(){ ... }).dblclick(function(){ ... });

    02 on off

        jq对象.on("事件名称1 事件名称2",function(){ ... })

        jq对象.off("时间名称")

        jq对象.off() 【将组件上的所有事件全部解绑】

    03 事件切换

        jq对象.toggle(函数1,函数2);

        【注意】这个方法在高版本中被剔除了,需要引入 jquery-migrate-1.0.0.js

04 针对 jq 对象,进行方法拓展

    $.fn.extend(
        check:function(){this.prop("checked",true);},
        uncheck:function(){this.prop("checked",false);}
    );

    $("input[type='checkbox']").check();

05 针对 jq 对象,进行方法拓展

    $.extend(
        max:function(a,b){return a>b?a:b;},
        min:function(a,b){return a<b?a:b;}
    );

    var max = $.max(4,3);

06

【JQuery-01】write Less,Do More

01 Jquery 入口函数
    $(function(){ ... });
    $(document).ready(function(){ ... });

02 js对象 和 jquery对象都可以看作数组

03 js jq 转化
    01 var jq = $(js);
    02 var ja = jq[0];
    03 var ja = jq.get(0);

04 入口函数
    01 window.onload = function(){ ... }
        01 只能写一次,如果写多次,将会覆盖
    02 $(function(){ ... });
        01 可以写多次,如果写多次,不会覆盖
    03 $(document).ready(function(){ ... });
        01 等价于 02


05 一些例子

    $("#b1").click(function(){
        $("#div1").css("backgroundColor","pink");
    });

06 基本选择器

    01 id          #id
    02 class           .class
    03 标签             div
    04 并集          span,#id

07 属性选择器

    01 div[title]                 含有title属性的div
    02 div[title='test']        含有title属性的div,且其属性值为 test
    03 div[title!='test']        01 不含有title属性的div 02 含有title属性的div,但其属性值不为 test
    04 div[title^='te']                含有title属性的div,且其属性值以 te 开头
    05 div[title$='est']        含有title属性的div,且其属性值以 est 结尾
    06 div[title*='es']                含有title属性的div,且其属性值包含 es

08 层次选择器

    01 body div         body 内的所有 div
    02 body > div        body 的直接孩子中的 div

09 过滤选择器

    01 div:first        第一个 div
    02 div:last                最后一个 div
    03 div:not(.one)        class 不为 one 的所有 div
    04 div:even                索引值为偶数的所有 div
    05 div:odd                索引值为奇数的所有 div
    06 div:gt(3)        索引值大于3的所有 div
    07 div:eq(3)        索引值为3的所有 div
    08 div:lt(3)        索引值小于3的所有 div
    09 :header                匹配 h1 - h6 标签

10 表单属性过滤选择器

    01 input[type='text']:enabled         可以编辑的
    02 input[type='text']:disabled         不可编辑的
    03 input[type='checkbox']:checked        被选中的
    04 #job > option:selected                被选中的

11 dom 操作

01 val html text

    01 $("#myinput").val()                 获取值
    02 $("#myinput").val("newValue")         设置值

    03 $("#mydiv").html();                获取html文本,如果有html标签,也会获取
    04 $("#mydiv").html("<h1>一级标题</h1>");        设置html标签文本

    05 $("#mydiv").text();                获取text文本,如果有html标签,不会获取
    06 $("#mydiv").text("<h1>一级标题</h1>");        设置text文本,html标签会被原样显        示

02 attr prop

    01 $("#bj").attr("name");
    02 $("#bj").attr("name","dabeijing");
    03 $("#bj").removeAttr("name");

    04 $("#hobby").prop("checked");        【固有属性,用prop】
    05 $("#bj").prop("name","dabeijing");

03 class css

    01 $("#one").prop("class","second");
    02 $("#one").addClass("second");
    03 $("#one").removeClass("second");
    04 $("#one").toggleClass("second"); 【切换样式】

    05 $("#one").css("backgroundColor");
    06 $("#one").css("backgroundColor","green");

04 文档操作

    01 append                appendTo
    02 prepend                prependTo
    03 after                insertAfter
    04 before                insertBefore

    05 remove
    06 empty

    07 clone


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马