6、redis

关系型(用SQL)
oracle
mysql
sql server
sqlite

    使用SQL

    数据的组织形式:
        表 -- 行和列的集合

    确保数据持久化到硬盘上

非关系型(NoSQL)
No only sql

    redis
    memcached
    mongodb

        不是SQL操作数据库,使用自己一套命令API
        大部分都是内存型

        持久化程度没有关系型数据库高,一些对数据安全看中的企业不使用
        也不支持事务(ACID)


    数据组织形式: 键值对 key-value

    优势:读写效率高

    redis配合关系型数据库的使用

    请求1 从关系型数据库中读取数据
        判断是否频繁读写的数据
            是
                存到redis
            否
                没操作
    请求2 首先看一下redis有没有数据,有就读取返回



    存一些临时数据

redis优点
redis 有三个主要使其有别于其它很多竞争对手的特点:
1)redis是完全在内存中保存数据的数据库,使用磁盘只是为了持久性目的
2)redis相比许多键值数据存储系统有相对丰富的数据类型
3)redis可以将数据复制到任意数量的从服务器中

redis安装和启动 
    安装
        解压源代码
        make 
        sudo make install

    启动redis服务
        redis-server

        redis-cli 
        redis-cli -h 127.0.0.1 -p 6379

        退出客户端
            quit/exit/ctrl d


        测试服务端连通
            ping 
            服务器回pong
            ping hello
            服务器回 hello

    关闭服务器
        客户端使用shutdown命令

文档地址:http://www.redis.cn/
文档地址:https://download.csdn.net/download/u014749668/10645216

redis 类型
    redis存储数据都是使用键值对 key-valu
        key  - 字符串
        value 可以是以下类型

    字符串string 是redis里边唯一一个基础类型
     mysql - > int double

    redis类型         含义
        String          字符串     
        Hash            字典.   
        List            列表.   
        Set             集合    
        Sorted Set      有序集合
        Pub/Sub         订阅
5 字符串
    set/get
        set key value
        get key

    mset/mget     m -- multi
        mset key1 val1 key2 val2 ...
        mget key1 key2 ...

    append
        追加,在本来的字符串后面再追加一段
        append key str

    incr/decr
        increase / decrease
        自增自减操作
        只能用于整数的字符串,浮点也不行

        incr key 

    incrby/decrby
        增加/减少相应数值

        incryby key n


    setnx
        nx -  not exists
        只有当某个key不存在的时候才会设置
        setnx key value
6 列表
    复合类型的成员都是string
    不能 list <list>

    list -> std::list

    lpush/lpop
        压栈出栈
        lpush key mem1 mem2 ...
        lpop key

    rpush/rpop 
        r - reverse  反向


    lrange 
        查看list范围内的所有成员
        lrange key 0 -1 
            负数表示倒数第几个

    lindex 
        下标取值
        lindex key i

    llen
        获取长度

    lpushx 
        当key存在并且是列表的情况下才push
        lpushx key mem

    栈和队列
        栈:FILO  第一个进最后一个出
            同一个方向push 和 pop操作
            lpush - lpop
            rpush - rpop


        队列: FIFO 先进先出
            一个方向进,另一个方向出
            lpush - rpop
            rpush - lpop

7 集合
    set - > std::set
        不重复,还会自动排序
    sadd
        sadd key mem1 mem2 ...

    smembers
        列出成员,自动根据字符串值来排序
        smembers key

    集合操作
        A = {1,2,3}
        B = {2,3,4}

        交集
        sinter key1 key2 ...
            大家都有那部分
            {2,3}
        并集
        sunion key1 key2 ...
            集合相加,去重
            {1,2,3,4}
        差集
        sdiff key1 key2 ...
            分方向,求一个集合相对于另一个集合没有的那部分
            A-B : A有B没有的 {1}
            B-A : {4}

        QQ : 好友推荐


    smove
        将一个成员从一个集合移动到另一个集合

    srem
        remove  key member [member ...]

    sdiffstore destination key [key ...]
    sinterstore destination key [key ...]
    sunionstore destination key [key ...]
        经过集合运算之后,将结果又存到另一个集合


8 有序集合
    按照其他条件来排序,不是根据字符串字面值来排序

    zadd key score member [score member ...]

        score是权重,相当排序条件
        zadd z1 5 a 4 b 3 c 2 d

    zrange key start end [WITHSCORES]
        根据权重从小到大进行排序输出

    zrevrange
        反向排序输出
9 哈希 hash
    hash - std::map
        key - value
        存对象信息
            student
            {
                name:itcast
                age:18
                sex:male
            }

    hset key field value
        key 指 redis中key
        field hash对应域
        value 值(只能是字符串)
        hset student name itcast


    hget
        hget key field

    hmset
        hmset key field1 val1 field2 val2 ...
        hmset student age 18 sex male
    hmget
        hmget key field1 field2 ...
    hkeys student 获取student里面的所有value

猜你喜欢

转载自blog.csdn.net/u014749668/article/details/82391161
今日推荐