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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 白家鑫 初级黑马   /  2019-9-16 15:46  /  1070 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文



        1. 概念:
redis是一款高性能的NOSQL系列的非关系型数据库

               

                优点总结
                        关系型数据库与NoSQL数据库并非对立而是互补的关系,即通常情况下使用关系型数据库,在适合使用NoSQL的时候使用NoSQL数据库,
                        让NoSQL数据库对关系型数据库的不足进行弥补。
                一般会将数据存储在关系型数据库中,在nosql数据库中备份存储关                系型数据库的数据

        主流的NOSQL产品
                        键值(Key-Value)存储数据库
                相关产品: Tokyo Cabinet/Tyrant、Redis、Voldemort、Berkeley DB
     典型应用: 内容缓存,主要用于处理大量数据的高访问负载。
                        数据模型: 一系列键值对
                        优势: 快速查询
                        劣势: 存储的数据缺少结构化
                列存储数据库
                                        相关产品:Cassandra, HBase, Riak
                                        典型应用:分布式的文件系统
                                        数据模型:以列簇式存储,将同一列数据存在一起
                                        优势:查找速度快,可扩展性强,更容易进行分布式扩展
                                        劣势:功能相对局限
                文档型数据库
                                        相关产品:CouchDB、MongoDB
                                        典型应用:Web应用(与Key-Value类似,Value是结构化的)
                                        数据模型: 一系列键值对
                                        优势:数据结构要求不严格
                                        劣势: 查询性能不高,而且缺乏统一的查询语法
                图形(Graph)数据库
                                相关数据库:Neo4J、InfoGrid、Infinite Graph
                                典型应用:社交网络
                                数据模型:图结构
                                优势:利用图结构相关算法。
                                劣势:需要对整个图做计算才能得出结果,不容易做分布式的集群方案。

         什么是Redis
                        Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库,官方提供测试数据,50个并发执行100000个请求,读的速度是110000次/s,写的速度是81000次/s ,且Redis通过提供多种键值数据类型来适应不同场景下的存储需求,目前为止Redis支持的键值数据类型如下:
                                1) 字符串类型 string
                                2) 哈希类型 hash
                                3) 列表类型 list
                                4) 集合类型 set
                                5) 有序集合类型 sortedset


       
命令操作
        redis的数据结构:
                redis存储的是:key,value格式的数据,其中key都是字符串,value有5种不同的数据结构
                         value的数据结构:
                                        1) 字符串类型 string
                                        2) 哈希类型 hash : map格式  
                                        3) 列表类型 list : linkedlist格式。支持重复元素
                                        4) 集合类型 set  : 不允许重复元素
                                        5) 有序集合类型 sortedset:不允许重复元素,且元素有顺序
               
                2. 字符串类型 string
                        1. 存储: set key value
                               
                        2. 获取: get key
                               
                        3. 删除: del key
                               
        3. 哈希类型 hash
                        1. 存储: hset key field value
                       
                        2. 获取:
                                * hget key field: 获取指定的field对应的值
                                * hgetall key:获取所有的field和value
                                       
                        3. 删除: hdel key field
                       
        4. 列表类型 list:
可以添加一个元素到列表的头部(左边)或者尾部(右边)
                        1. 添加:
                                1. lpush key value: 将元素加入列表左表
                                2. rpush key value:将元素加入列表右边       
                        2. 获取:
                                * lrange key start end :范围获取       
                        3. 删除:
                                * lpop key: 删除列表最左边的元素,并将元素返回
                                * rpop key: 删除列表最右边的元素,并将元素返回


        5. 集合类型 set : 不允许重复元素
                        1. 存储:sadd key value
                        2. 获取:smembers key:获取set集合中所有元素
                        3. 删除:srem key value:删除set集合中的某个元素       
                               
        6. 有序集合类型 sortedset:
不允许重复元素,且元素有顺序.每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。

                        1. 存储:zadd key score value
                        2. 获取:zrange key start end [withscores]
                        3. 删除:zrem key value
                       
        7. 通用命令
                        1. keys * : 查询所有的键
                        2. type key : 获取键对应的value的类型
                        3. del key:删除指定的key value


4. 持久化

        1. redis是一个内存数据库,当redis服务器重启,获取电脑重启,数据会丢失,我们可以将redis内存中的数据持久化保存到硬盘的文件中。

        2. redis持久化机制:
                        1. RDB:默认方式,不需要进行配置,默认就使用这种机制
                                * 在一定的间隔时间中,检测key的变化情况,然后持久化数据
                       
                                2. 重新启动redis服务器,并指定配置文件名称
                                       
                               
                        2. AOF:日志记录的方式,可以记录每一条命令的操作。可以每一次命令操作后,持久化数据
                                1. 编辑redis.windwos.conf文件
                                        appendonly no(关闭aof) --> appendonly yes (开启aof)
                                        # appendfsync always : 每一次操作都进行持久化
                                        appendfsync everysec : 每隔一秒进行一次持久化
                                        # appendfsync no         : 不进行持久化



               
                * Jedis操作各种redis中的数据结构
                        1) 字符串类型 string
                                set  /   get
                               
                                 //1. 获取连接
                        Jedis jedis = new Jedis();//如果使用空参构造,默认值 "localhost",6379端
                        //2. 操作
                        //存储
                        jedis.set("username","zhangsan");
                        //获取
                        String username = jedis.get("username");
                        System.out.println(username);
               
                        //可以使用setex()方法存储可以指定过期时间的 key value
                        jedis.setex("activecode",20,"hehe");//将activecode:hehe键值对存入redis,并且20秒后自动删除该键值对
               
                        //3. 关闭连接
                        jedis.close();

                        2) 哈希类型 hash : map格式  
                                hset
                                hget
                                hgetAll
                                //1. 获取连接
                        Jedis jedis = new Jedis();//如果使用空参构造,默认值 "localhost",6379端

                        //2. 操作
                        // 存储hash
                        jedis.hset("user","name","lisi");
                        jedis.hset("user","age","23");
                        jedis.hset("user","gender","female");
               
                        // 获取hash
                        String name = jedis.hget("user", "name");
                        System.out.println(name);
               
               
                        // 获取hash的所有map中的数据
                        Map<String, String> user = jedis.hgetAll("user");
               
                        // keyset
                        Set<String> keySet = user.keySet();
                        for (String key : keySet) {
                            //获取value
                            String value = user.get(key);
                            System.out.println(key + ":" + value);
                        }
               
                        //3. 关闭连接
                        jedis.close();


                        3) 列表类型 list : linkedlist格式。支持重复元素
                                lpush / rpush
                                lpop / rpop
                                lrange start end : 范围获取
                               
                                 //1. 获取连接
                        Jedis jedis = new Jedis();//如果使用空参构造,默认值 "localhost",6379端口
                        //2. 操作
                        // list 存储
                                        jedis.lpush("mylist","a","b","c");//从左边存
                                        jedis.rpush("mylist","a","b","c");//从右边存
               
                        // list 范围获取
                                        List<String> mylist = jedis.lrange("mylist", 0, -1);
                                       System.out.println(mylist);
                        
                        // list 弹出
                                        String element1 = jedis.lpop("mylist");//c
                                      System.out.println(element1);
                       
                        String element2 = jedis.rpop("mylist");//c
                        System.out.println(element2);
               
                        // list 范围获取
                        List<String> mylist2 = jedis.lrange("mylist", 0, -1);
                        System.out.println(mylist2);
               
                        //3. 关闭连接
                        jedis.close();


                        4) 集合类型 set  : 不允许重复元素
                        sadd
                        smembers:获取所有元素

                        //1. 获取连接
                        Jedis jedis = new Jedis();//如果使用空参构造,默认值 "localhost",6379端
                          

             /2. 操作
                        // set 存储
                                        jedis.sadd("myset","java","php","c++");
               
                        // set 获取
                                        Set<String> myset = jedis.smembers("myset");
                                        System.out.println(myset);
               
                        //3. 关闭连接
                                        jedis.close();
                        5) 有序集合类型 sortedset:不允许重复元素,且元素有顺序
                                        zadd
                                        zrange


异步请求
局部刷新
不刷新网页的情况下对网页的局部内容进行修改!!!
ajax支持同步和异步请求


JQ的ajax的语法
$.ajax ( {
url : " 访问路径"
type  : "get / post" ,  // 使用方法
data :{"key":value,"key":value}或者"key=value&key=value",
success: function (data){
//  data 是服务器返回的数据
//  实现请求完成后逻辑
//  页面展示

},
dataType : ”text / json / jsonp“   
})

$.ajax({
type : "get / post",
url : "访问路径"
})

注意事项
1. $后面有个.
2.data提交的数据, key一定要加 ”“ ,value根据类型来决定
3.dataType中jsonp是用来解决跨域问题!!!


       
        $.get(
                "访问路径",
                {"key":value,"key":value}或者"key=value&key=value",
                function(data){
                        //data是服务器返回的数据
                        //实现请求完成后逻辑
                        //页面展示
                },
                "text/json"
        );
       
        $.post(
                "访问路径",
                {"key":value,"key":value}或者"key=value&key=value",
                function(data){
                        //data是服务器返回的数据
                        //实现请求完成后逻辑
                        //页面展示
                },
                "text/json"
        );




JSON
        JS中的对象
        json作用
                1.作为配置文件(SS,SSR)
                2.作为网络数据格式进行数据传输
        json比xml更加合适
                更小更快更易解析

        如何定义
                对象       
                {
                        "key":value,
                        "key":value
                }
                数组
                [
                        {"key":value,"key":value},
                        {"key":value,"key":value}
                ]
                复杂(对象中放数组)
                {
                        "key":[
                        {"key":value,"key":value},
                        {"key":value,"key":value}
                        ],
                        "key":value
                }

        json取值
                上面三种方式对应的取值方式


        弹框注意是什么类型
                显示内容是 {"username":"zs","age":18}                ->  json字符串
                显示内容是  [object Object]                                        ->        json对象

                把json字符串转换成为json对象
                        var jsonObj = JSON.parse('{"username":"zs","age":18}');










       

0 个回复

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