Redis_常用5颇数据类型简介

发布时间:2018-11-15  栏目:NoSQL  评论:0 Comments

  前面介绍了部分redis的的中心配备,以及安装,本文继续读书redis的五深数据类型。

0. 数组


  • 概念:用来储存具有 相同类型 的差不多独元素
  • 书写:元素类型 数组名[元素个数]
  • 初始化

    • 先期定义再度 完全 初始化

      int ages[5];
      ages[0] = 18;
      ages[1] = 18;
      ages[2] = 18;
      ages[3] = 18;
      ages[4] = 18;
      
    • 定义 同时 部分 初始化

      int ages[5] = {18, 18, 18}};
      
    • 定义 同时 完全 初始化

      float heights[5] = {1.99f, 1.99f, 1.99f, 1.99f, 1.99f};
      
    • 注意

      • 只得定义 同时 使用 {} 进行初始化,若先定义那么就非可知利用
        {}
      • 不建议 使用 变量 作为 元素个数
      • 若先定义再度 不完全 初始化,那么 部分元素 可能是如出一辙截
        垃圾数据

        int ages[5];
        ages[0] = 18;
        ages[1] = 18;
        printf("0 = %i\n", ages[0]);
        printf("1 = %i\n", ages[1]);
        printf("2 = %i\n", ages[2]);
        printf("3 = %i\n", ages[3]);
        printf("4 = %i\n", ages[4]);
        
      • 设定义同时 不完全 初始化, 那么 没有被初始化
        的元素,默认是 0

        int ages[5] = {18, 18};
        printf("0 = %i\n", ages[0]);
        printf("1 = %i\n", ages[1]);
        printf("2 = %i\n", ages[2]);
        printf("3 = %i\n", ages[3]);
        printf("4 = %i\n", ages[4]);
        
      • 而定义同时初始化,那么元素的个数可以 省略

        int ages[] = {18, 18};
        printf("0 = %i\n", ages[0]);
        printf("1 = %i\n", ages[1]);
        
      • 足由此 [索引] = 方式,给 指定索引 元素赋值

        int ages[101] = {[66] = 18, [88] = 18};
        printf("66 = %i\n", ages[66]);
        printf("88 = %i\n", ages[88]);
        
  • 素访问:通过 下标 访问元素

    int ages[] = {18, 18, 18};
    int a = ages[2];
    printf("2 = %i\n", a);
    
  • 遍历

    int ages[] = {18, 18, 18, 18, 18, 18};
    int length = sizeof(ages) / sizeof(ages[0]);
    for (int i = 0; i < length; i++) {
        printf("ages[%i] = %i\n", i, ages[I]);
    }
    
  • 内存分配

    • 囤细节

      • 系统给数组分配 一块连续存储空间
      • 数组名 代表数组的 首地址,从首地址位置,依次 存入元素
      • 每个元素占用 相同字节数
      • 数组中元素之间的地点是 连续的

        图片 1

        内存分配

    • 地址:&charValues == &charValues[0] == charValues
    • 越界:数据混乱程序崩溃

      char numbers[] = {3, 2};
      char values[] = {6, 6, 6};
      values[3] = 66;
      printf("nums[0] = %i\n", nums[0]);
      nums[-1] = 88;
      printf("values[2] = %i\n", values[2]);
      

一样、Redis的五颇数据类型

1. 二维数组


  • 定义:一个 一维数组每个元素 又是 一维数组
  • 书写:元素类型 数组名 [一维数组个数][一维数组元素个数]
    • 要素类型:说明 二维数组 中每个 一维数组 中的 元素数据类型
    • 一维数组个数:说明 二维数组 中的 元素数量
    • 一维数组元素个数:说明 二维数组每一个 一维数组
      元素个数
  • 初始化

    • 先期定义再度 完全 初始化

      char names[2][3];
      names[0][0] = 'W';
      names[0][1] = 'X';
      names[0][2] = 'X';
      names[1][0] = 'Q';
      names[1][1] = 'T';
      names[1][2] = 'T';
      
    • 定义 同时 部分 初始化

      char names[2][3] = {
        {'W', 'X'}
      } ;
      
    • 定义 同时 完全 初始化

      char names[2][3] = {
        {'W', 'X', 'X'},
        {'Q', 'T', 'T'}
      }
      
    • 定义 同时 初始化,省略 {}

      char names[2][3] = {
        'W', 'X', 'X',
        'Q', 'T', 'T'
      }
      
    • 定义 同时 初始化,省略 一维数组个数

      char names[][3] = {
        'W', 'X', 'X',
        'Q', 'T', 'T',
        'H', 'Y'
      }
      
  • 素访问:通过 下标 访问元素

    char names[2][3] = {
      {'W', 'X', 'X'},
      {'Q', 'T', 'T'}
    };
    printf("%c\n", names[1][1]);
    
  • 遍历

    int scores[3][5] = {
      {66, 88, 99, 100, 120},
      {22, 33, 44, 55, 66},
      {11, 22, 33, 44, 55}
    };
    for(int i = 0; i < 3; i++) {
      for(int j = 0; j < 5; j++) {
          printf("scores[%i][%i] = %i\n", i, j, scores[i][j]);
      }
    };
    
  • 内存分配

    • 积存细节

      • 系统被二维数组分配 一块连续存储空间
      • 数组名 代表数组的 首地址,从首地址位置,依次
        存入每一行
      • 诸一行存储方,还是从 行首地址 位置,依次 存入元素
      • 每个元素占用 相同字节数
      • 数组中元素之间的地方是 连续的

        图片 2

        内存分配.png


  String(字符串)、List(列表)、Set(集合)、Hash(哈希,类似java里的map)、Zset(sorted
set:有序聚集)

2. 字符串


  • 概念:用来储存 多个 有序 字符,其实就算是 数组
  • 书写:位于 双引号 中,在内存中盖 \0 结束
  • 初始化

    char name[] = "coder";
    char names[] = {"coderqinzy"};
    char nameOne[] = {'l', 'u', 'c', 'k', '\0'};
    // \0 对应 ASCII 0
    char nameTwo[] = {'l', 'u', 'c', 'k', 0};
    char nameThree[9] = {'l', 'u', 'c', 'k'};
    
  • 输出:%s,从传播的 地址 开始逐一取出元素,直到碰到 \0 位置

    char name[] = {'l', 'u', 'c', 'k', '\0'};
    char nameOne[] = {'w', 'x', 'x'};
    printf("nameOne = %s\n", nameOne);
    
  • 计字符串长度

    char str[] = "cool";
    size_t size = strlen(str);
    printf("%ld\n", size );
    
  • 合龙接字符串

    char str1[7] = "luck";
    char str2[10] = "cool";
    size_t length = sizeof(str1) / sizeof(str1[0]) - strlen(str1) - 1;
    strncat(str1, str2, length);
    printf("%s\n", str1);
    
  • 拷贝字符串

    char str1[] = "wonderful";
    char str2[] = "accelerate";
    size_t length = sizeof(str1) / sizeof(str1[0]) - 1;
    strncpy(str1, str2, length);
    printf("%s\n", str1);
    
  • 于字符串

    char str1[] = "aac";
    char str2[] = "abc";
    // 取出字符串中的每一个字符进行逐个比较,如果发现不相等就不会继续往下比较
    int res = strcmp(str1, str2);
    printf("%i\n", res);
    
  • 字符串数组

    char names[2][10] = {"wxx", "qtt"};
    char namesOne[2][10] = {{"wxx"}, {"qtt"}};
    char namesTwo[2][10] = {{'w', 'x', 'x', '\0'}, {'q', 't', 't', '\0'}};
    

老二、那里去得到Redis的宽广数据类型操作命令

  Http://redisdoc.com/

三、Redis键(key)

  常用的key命令:

   keys *(查询所以的key)

图片 3

  exists key 判断有key是否留存(1意味着在,0意味不存在)

图片 4

  move key db(将有key移动到另外库中)

图片 5

  expire key 秒:为加的key设置过时(返回1意味着成功)

图片 6

  ttl key 查看还有多少秒过期,-1象征毫不过期,-2表示已经过期

图片 7

  type key 查看key是啊类型

图片 8

  注意:在set时,如果key存在,则后面的value值将会晤挂前的value值

四、Redis字符串(String)

  String是redis最基本的色,你可以知晓成和Memcached一样的类,一个key对应一个value。

  String类是凡二进制安全之。意思是redis的String可以涵盖其他数。比如jpg图片或序列化的目标。

  String类型是Redis最中心的数据类型,一个redis中value最多好是512M

  set 设置值,get获取值,del删除值

图片 9

  append(拼接String,返回value长度),strlen(获取String长度)

图片 10

  incr key +1,decr key -1,incrby key n +n, decrby key n
-n(需要注意的凡,只生数字才好操作)

图片 11

  如果无是数字,则会报错。

图片 12

  getrange:获取指定区间范围外的价,类似between…and的涉嫌。(注意:从0到-1代表一切)

  setrange:设置指定区间范围外的值,格式是settrange key值 具体值

图片 13

  setex(set with wxpire)键秒值:设置key/value时设置存活时间

图片 14

  setnx(set id not exist)设置key 如果key存在则插入数据失败 返回0

图片 15

  mset(批量栽数据)/mget(批量获取数据)/msetnx(批量采取setnx插入数据)

 图片 16

 

五、Redis列表(List)

  Redis列表是简单的字符串列表,按照插入顺序排序。你可加上一个素到列表的脑部要尾部。它的底层是一个链表。

  lpush key v1 v2
v3(插入list返回长度)

图片 17

  rpush key (在最终在value的价值) lpush key(在极端前加入value的价)

图片 18

  lrange key n n (查询list的值,0 到 -1为全部)

图片 19

  lpop 从漏洞百出删除 rpop从右边删除

图片 20

  lindex 按照索引获取元素(从上到下)

图片 21

  llen 查看list中元素个数

图片 22

  lrem key n value
删除n个value,如果value值不够则去所有的这value值返回去个数

图片 23

图片 24

  ltrim key 开始 index 结束index,截取知道限制的值后赋值给key

 图片 25

  rpoplpush key1 key2 将key1的右侧value到key2中

图片 26

  lset key index value 给现实下标位置设置value,如果该下标不存在则报错

图片 27

  linsert key before/after 值1
值2(在值1之前/之后栽入值2,如果来重新的价值则会以率先个左右进行扦插)

图片 28

  总结:

    它是一个字符串链表,left,right都好插添加

    如果键不在,创建新的链表,如果键已经有则猛增内容

    如果情节全移除。对应的键也消解。

    链表的操作无论是在头和尾效率都极其高,但如是本着中级元素进行操作,效率就是不行辛苦。

六、Redis集合(Set)

  Redis的Set的histring类型的无序聚集。他是由此HashTable实现的。

七、Redis哈希(Hash)

  Redis hash是一个键值对聚集。

  Redis
hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。

  类似Java里面Map<String,
Object>

八、Redis有序集合Zset(sorted set)

  Redis
zset和set一样为是string类型元素的集结,而且免允许再的成员。

  不同的凡每个元素还见面涉嫌一个double类型的分数。

  redis正是通过分数来吗集聚中之分子开展由小到死的排序。zset的成员是绝无仅有的,但分数(score)却可重。

留下评论

网站地图xml地图