输入banner图图片脚本导航/分类

学习随笔: NOSQL系列的非关系型数据库 —— 浅谈Redis

  NoSQL(NoSQL = Not Only SQL),意即“不仅仅是SQL”,是一项全新的数据库理念,泛指非关系型的数据库。

  NOSQL和关系型数据库比较:

  优点

                1)成本:nosql数据库简单易部署,基本都是开源软件,不需要像使用oracle那样花费大量成本购买使用,相比关系型数据库价格便宜。

                2)查询速度:nosql数据库将数据存储于缓存之中,关系型数据库将数据存储在硬盘中,自然查询速度远不及nosql数据库。

                3)存储数据的格式:nosql的存储格式是key,value形式、文档形式、图片形式等等,所以可以存储基础类型以及对象或者是集合等各种格式,而数据库则只支持基础类型。

                4)扩展性:关系型数据库有类似join这样的多表查询机制的限制导致扩展很艰难。

         缺点

                1)维护的工具和资料有限,因为nosql是属于新的技术,不能和关系型数据库10几年的技术同日而语。

                2)不提供对sql的支持,如果不支持sql这样的工业标准,将产生一定用户的学习和使用成本。

                3)不提供关系型数据库对事务的处理。

  非关系型数据库的优势:

            1)性能NOSQL是基于键值对的,可以想象成表中的主键和值的对应关系,而且不需要经过SQL层的解析,所以性能非常高。

            2)可扩展性同样也是因为基于键值对,数据之间没有耦合性,所以非常容易水平扩展。

       关系型数据库的优势:

            1)复杂查询可以用SQL语句方便的在一个表以及多个表之间做非常复杂的数据查询。

            2)事务支持使得对于安全性能很高的数据访问要求得以实现。对于这两类数据库,对方的优势就是自己的弱势,反之亦然。

  主流产品:

   * 键值(Key-Value)存储数据库

                相关产品: Tokyo Cabinet/Tyrant、Redis、Voldemort、Berkeley DB

                典型应用: 内容缓存,主要用于处理大量数据的高访问负载。

                数据模型: 一系列键值对

                优势: 快速查询

                劣势: 存储的数据缺少结构化

   * 列存储数据库:Cassandra, HBase, Riak

      数据模型:以列簇式存储,将同一列数据存在一起  典型应用:分布式的文件系统

   * 文档型数据库:CouchDB、MongoDB

                数据模型: 一系列键值对             典型应用:Web应用(与Key-Value类似,Value是结构化的)

   * 图形(Graph)数据库:Neo4J、InfoGrid、Infinite Graph

                数据模型:图结构                 典型应用:社交网络

  使用

    一般与关系型数据库一起使用,数据存放在关系型数据库,而将部分关系型数据库的数据在nosql中备份。

Ⅱ 、Redis

  1、概念  

  Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库,官方测试,50个并发执行100000个请求,读的速度是110000次/s,写的速度是81000次/s ,且提供多种键值数据类型来适应不同场景下的存储需求。

  主要应用场景:

    ?    缓存(数据查询、短连接、新闻内容、商品内容等等)

            ?    聊天室的在线好友列表

            ?    任务队列。(秒杀、抢购、12306等等)

            ?    应用排行榜

            ?    网站访问统计

            ?    数据过期处理(可以精确到毫秒)

            ?    分布式集群架构中的session分离

  2、数据结构及操作  

  redis存储的是:key, value格式的数据,其中key都是字符串,value有5种不同的数据结构。

    value:

     1) 字符串类型: string

                2) 哈希类型 hash : map格式  

                3) 列表类型 list : linkedlist格式。支持重复元素

                4) 集合类型 set  : 不允许重复元素

                5) 有序集合类型 sortedset:不允许重复元素,且元素有顺序

    ?  通用命令

      keys * : 查询所有的键

      type key : 获取键对应的value的类型

      del key:删除指定的key value

    ?   string(字符串格式)

    存储: set key value

    获取:get key

    删除:del key

    eg:  > set username zz

        > get username  "zz"

        > del username

    ?   hash(map格式):每个 hash 可以存储 232 - 1 键值对,(4294967295, 40多亿个)

    存储: hset key field value

    获取:hget key field: 获取指定的field对应的值

          hgetall key:获取所有的field和value

    删除:hdel key field

    eg:  > hset mhash name lisi

        > hset mhash  age 13

        > hget myhash name  "lisi"

        > hdel myhash name     

    ?   list(列表格式):可以添加一个元素到列表的头部(左边)或者尾部(右边),一个列表最多可以包含 232 - 1 个元素

    添加:

      1. lpush key value: 将元素加入列表左表

      2. rpush key value:将元素加入列表右边

    获取:lrange key start end :范围获取,start是开始点,end结束点,为-1表示获取后面所有

          eg:  > lrange myList 0 -1

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

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

    eg:  > hset mhash name lisi

        > hset mhash  age 13

        > hget myhash name  "lisi"

        > hdel myhash name

    ?   set(集合格式):不允许有重复元素,集合中最大的成员数为 232 - 1

    添加:sadd key value

    获取:smembers key: 获取set集合中所有元素

    删除:srem key value:删除set集合中的某个元素

    eg:  > sadd myset abc  (integer) 1

        > sadd myset abc  (integer) 0

        > smembers key  "abc"

        > srem myset abc

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

    添加:zadd key score value

    获取:zrange key start end [withscores]: 递增

    删除:zrem key value

    eg:  > zadd mysort 60 si  (integer) 1

        > zadd mysort 50 san  (integer) 1

        > zrange mysort 0 -1   1) "san"            2) "si"

        > zrange mysort 0 -1 withscore   1) "san"            2) 50    3)"si"    4)60

        > zrem mysort si

  3、持久化  

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

  redis持久化机制:

    * RDB:默认方式,不需要进行配置,默认就使用这种机制。在一定的间隔时间中,检测key的变化情况,然后持久化数据。

      1. 编辑redis.windwos.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

      2. 重新启动redis服务器,并指定配置文件名称

        C: >  redis-server.exe redis.windows.conf   

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

      1. 编辑redis.windwos.conf文件
                appendonly no(关闭aof) --> appendonly yes (开启aof)
                
                # appendfsync always : 每一次操作都进行持久化
                appendfsync everysec : 每隔一秒进行一次持久化

                # appendfsync no     : 不进行持久化

  jedis工具类:

    使用java进行redis数据库操作

 

学习随笔: NOSQL系列的非关系型数据库 —— 浅谈Redis

标签:infinite   rgb   便宜   模型   保存   而且   有序   高性能   hba