• NoSQL入门第二天——Redis入门介绍


    一、基本概述

      1.是什么

        Redis:REmote DIctionary Server  (远程字典服务器)

        是完全开源免费的,用C语言编写的,遵守BSD协议,
        是一个高性能的(key/value)分布式内存数据库,基于内存运行
        并支持持久化的NoSQL数据库,是当前最热门的NoSql数据库之一,
        也被人们称为数据结构服务器

      三大特点:

        Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用

        Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储

        Redis支持数据的备份,即master-slave模式的数据备份

      2.能干什么

        内存存储和持久化:redis支持异步将内存中的数据写到硬盘上,同时不影响继续服务

        取最新N个数据的操作,如:可以将最新的10条评论的ID放在Redis的List集合里面

        模拟类似于HttpSession这种需要设定过期时间的功能

        发布、订阅消息系统

        定时器、计数器

      3.怎么干

        ->下载地址:http://redis.io/  http://www.redis.cn/

       特性: 

        数据类型、基本操作和配置

        持久化和复制,RDB/AOF

        事务的控制

        复制

        ...

      4.Redis的安装

        只应该在Linux下安装;windows的只适合玩耍使用(下载,解压就能启动了!)。

        安装抽取为一篇随笔:http://www.cnblogs.com/jiangbei/p/7349639.html ——(包括启动关闭与其它基本概念)

      5.推荐参考

        阿里云Redis开发规范阿里云Redis开发规范

        Redis开发规范:https://www.cnblogs.com/ae6623/p/6183714.html

    二、Redis的数据类型

      1. 5大数据类型

      概述可以参见官网:

     它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets)

       对于javaBean的存放,可以通过存放一个转换后的json,也可以存放序列化后的字节数组

    jedis.set("person:100".getBytes(), SerializeUtil.serialize(new Person(100, "zhangsan")));

      2. 5大数据类型概述

      2.1 String类型

      

    String(字符串)


    string是redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value。


    string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。


    string类型是Redis最基本的数据类型,一个redis中字符串value最多可以是512M

       2.2 hash(哈希,类似java里的Map)

    Hash(哈希)
    Redis hash 是一个键值对集合。
    Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。

    类似Java里面的Map<String,Object>

      2.3 list(列表)

    List(列表)
    Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素导列表的头部(左边)或者尾部(右边)。
    它的底层实际是个链表

       // LinkedList而不是ArrayList,可以左右插入

       2.4 set(集合)

    Set(集合)
    Redis的Set是string类型的无序集合。它是通过HashTable实现实现的,

      2.5zset(sorted set:有序集合)——相当于set加个分数(排行榜)

    zset(sorted set:有序集合)
    Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。
    不同的是每个元素都会关联一个double类型的分数。
    redis正是通过分数来为集合中的成员进行从小到大的排序。zset的成员是唯一的,但分数(score)却可以重复。

      //最常用的是前三种

      3.Redis命令查找

        1.命令大全:http://redisdoc.com/

      4.详解5大数据类型

        4.1Redis 键(key)

        实例:

    KEYS *  ——  查看所有的KEY

     exists key的名字,判断某个key是否存在  —— 1代表存在,0代表不存在

     move key db   --->当前库就没有了,被移除了

     expire key 秒钟:为给定的key设置过期时间
     ttl key 查看还有多少秒过期(time to live),-1表示永不过期,-2表示已过期

      已过期,移除内存系统:——一般而言不采用删除,而是设置过期时间让其自动过期,删除可以使用DEL(详见命令大全

     type key 查看你的key是什么类型

      相同KEY是覆盖,而不是弹出:

      

         4.2 Redis字符串(String)

       单值单value:一个String一个值

      实例:

     set/get/del/append/strlen  —— 字符串的常见操作

    Incr/decr/incrby/decrby,一定要是数字才能进行加减 —— 数字的相加减(前两个单步递增减,后两个多步)

      //在redis里操作将会提升速度

     getrange/setrange  —— 获取指定区间范围内的值(between and,字符串截取),从零到负一表示全部

     setex(set with expire)键 秒 值 /setnx(set if not exist)——

        setex:设置带过期时间的key,动态设置。
       setex 键 秒值 真实值

    //一般情况下,0就是失败了

     mset/mget/msetnx  —— (more set)

          mset:同时设置一个或多个 key-value 对。

          mget:获取所有(一个或多个)给定 key 的值。

          msetnx:同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在。

      //不存在部分成功的情况,只有全部不存在时才成功!

        4.3 Redis列表(List)

        单值多value:一个List多个元素

     lpush/rpush/lrange  —— 从左L(left)或从右进行入栈操作;最后一个为范围选中(选中所有时从栈顶开始遍历)

      //从左边插入的(正序插入),取值的时候便是逆序

      //右边与左边相反

     lpop/rpop  —— 从左或右进行出栈操作(注意从栈顶或栈底的操作),即lpop从栈顶弹出,rpop从栈底弹出

      //分清入栈出栈的顺序

     lindex,按照索引下标获得元素(从上到下)

      //注意下标都是从0开始(别被工具的下标迷惑了)

     llen  —— 返回列表长度

    lrem key count value  ——  根据参数 count 的值,移除列表中与参数 value 相等的元素。

      //通俗的讲,删除2个3

     ltrim key 开始index 结束index,截取指定范围的值后再赋值给key

      //注意一下索引的位置,左插入是从栈底开始插向栈顶,索引是从栈顶开始的(这里的mylist02是从栈顶开始插入)

     rpoplpush 源列表 目的列表

      这里有点向AK,装入弹夹,射击子弹

      //从mylist的栈底弹出,压入mylist02的栈顶,结果:

     lset key index value  —— 将列表 key 下标为 index 的元素的值设置为 value 。

     linsert key  before/after 值1 值2  —— 将值 value 插入到列表 key 当中,位于值 pivot 之前或之后。

      性能小结

    它是一个字符串链表,left、right都可以插入添加;
    如果键不存在,创建新的链表;
    如果键已存在,新增内容;
    如果值全移除,对应的键也就消失了。
    链表的操作无论是头和尾效率都极高,但假如是对中间元素进行操作,效率就很惨淡了。

         4.4 Redis集合(Set)

        单值多value:一个set里有多个元素

     sadd/smembers/sismember  —— 向set中新增;查看所有成员;判断成员是否属于

      //添加时无序不可重复,重复的添加时会自动去掉

      //同理,存在为1,不存在为0

     scard,获取集合里面的元素个数

     srem key value 删除集合中元素

     srandmember key 某个整数(随机出几个数) —— 试试运气,随机出若干个

     spop key 随机出栈(随机弹一个出去)

     smove key1 key2 在key1里某个值      作用是将key1里的某个指定值赋给key2

      集合交并补

    差集:sdiff  —— 在第一个set里面而不在后面任何一个set里面的项

    交集:sinter
    并集:sunion

      //不再举例赘述 并集交集

         4.5 Redis哈希(Hash)

        KV模式不变,但V是一个键值对

      hset/hget/hmset/hmget/hgetall/hdel  存单值;取单值;存多值(more);删除

      

      //这里就是,key是hset01,但value是 id 1001这样的键值对

       像这样,就表示了一个我们熟悉的POJO:

      多值存取:

      删除某个:

     hlen  —— 长度

     hexists key 在key里面的某个值的key  —— 判断是否存在

     hkeys/hvals  —— 查看所有key或value

     hincrby/hincrbyfloat  ——给值增加小数或者整数

     hsetnx  —— 不存在赋值,存在了无效。

      //存在时无效(为0),不存在时赋值

       4.6 Redis有序集合Zset(sorted set)

          在set基础上,加一个score值。
        之前set是k1 v1 v2 v3,
        现在zset是 —— k1 score1 v1 score2 v2

     zadd/zrange  —— 新增与范围查看(与前面类似,0 -1表示查看所有)
      withscores——带上分数显示

     zrangebyscore key 开始score 结束score  —— 查看指定分数范围(默认闭区间)
       withscores —— 带分数显示,同上
       (   不包含——即改为开区间
      limit —— 作用是返回限制, limit 开始下标步 多少步,和SQL的Limt类似,从第几条开始,要几条

      更改范围为开区间;例如 (50 (80

      使用Limit限制:(同样,下标从0开始)

     zrem key 某score下对应的value值,作用是删除元素

     zcard/zcount key score区间
    zrank key values值,作用是获得下标值
    zscore key 对应值,获得分数

     zrevrank key values值,作用是逆序获得下标值(也就是,最大排名为0)

     zrevrange  —— 逆序排列

     zrevrangebyscore  key 结束score 开始score ——逆序排列,从小达到大,变为从大到小

  • 相关阅读:
    MD代码块指定语言类型
    spring通过bean名称,方法名,反射调用服务。
    h5魔塔开坑记
    意识流CSP2021游记
    Android开发byte version = 0x80错误: 不兼容的类型: 从int转换到byte可能会有损失
    Installed Build Tools revision 31.0.0 is corrupted. Remove and install again using the SDK Manager解决方法
    Android开发androidstudio调试smali代码
    Android开发修改手机ro.debuggable=1便于调试应用程序
    window环境下载Android系统源代码的方法
    android开发jni开发遍历文件夹下的文件以及目录
  • 原文地址:https://www.cnblogs.com/jiangbei/p/7255994.html
Copyright © 2020-2023  润新知