Redis的数据结构,其本身大方向是键值对

【0】大概特点

相关产品:Redis、Riak、SimpleDB、Chordless、Scalaris、Memcached

形式:Key 指向 Value 的键值对,通常用hash table来实现

 应用:内容缓存

优点:扩展性好、灵活性好、大量写操作时性能高

缺点:无法存储结构化信息、条件查询效率较低

使用者:百度云(Redis)、GitHub(Riak)、BestBuy(Riak)、Twitter(Ridis和Memcached)

【1】五种数据类型

  (1)String:字符串             (2)List:字符串列表

  (3)sorted set:有序字符串集合     (4)set :字符串集合

  (5)Hash:哈希

【2】Key定义的注意点

  (1)不要过长

  (2)不要过短

  (3)统一的命名规范

【3】基本用法

目录: 

【3.1】String
【3.2】Hash
【3.3】List
【3.4】set
【3.5】Sorted-Set
【3.6】Keys的通用操作

正文:

【3.1】String

   【3.1.1】String的存储

      (1)二进制安全存储,存入和获取的数据相同

      (2)单个Value最多可以容纳512M以上数据

   【3.1.2】常用命令

      (1)set 赋值:set key value       =》set name zhangsan

      (2)get 取值:get key           =》get name

      (3)getset 取值并重新复制:getset key value   =》get name lisi

      (4)del 删除:delete key           =》del name  =》del name1 name2 name3(批量删除)

      (5)incr/decr 数值递增递减:《1,递增》incr key =》incr num    《2,递减》decr key =》decr key

                如果num不存在,则默认值为0,如果操作在字符串上则报错

      (6)incrby/decrby 加减运算:《1,加》incrby key addnum =》incrby num 5         -- 给num key对应的 value 数字 +5

              《2,减》decrby key subnum =》decrby num 3        -- 给num key对应的 value 数字 -3

      (7)append 拼接字符串:append key =》append name abc   -- 如果 name 是 lisi ,则结果应该是 lisiabc      -- 如果key不存在,则新建该key,且value为 abc

      (8)查看所有key:keys *

        

【3.2】Hash

   【3.2.1】Hash 的存储

      String Key 和 String Value 的 map 容器

      每一个 Hash 可以存储 4294967295 一个无符号4字节的 键值对

      一个hashkey 中可以包含多个 key value 键值对

      【3.2.2】常用命令

      (1)hset 赋值:hset hashkey key value =》hset myhash user jack,其实这也可以多个 hset hashkey key1 value1 key2 value2 key3 value3

      (2)hmset 批量赋值:hmset hashkey key1 value1 key2 value2 =》hmset myhash2 user jack age 20

      (3)hget 取值:hget hashkey key =》hget myhash user

      (4)hmget 批量取值:hmget hashkey key1 key2 =》hmget myhash2 user age

      (5)hgetall 获取所有key value:hgetall myhash2

      (6)hdel 删除:hdel hashkey key1 key2

      (7)del 删除hashkey:del hashkey

      (8)hincrby/hdecrby 加减运算:hincrby hashkey key addnum

      (9)hexists 存在判断:hexists hashkey key  -- 返回 1 代表存在,0代表不存在

      (10)hlen 获取key数量:hlen hashkey

      (11)hkeys 获取hashkey中的所有Key:hkeys hashkey

      (12)hvals 获取所有value:hvals hashkey

       (13)hsetnx 创建hashkey中的key,如果不存在则创建,如果存在则不创建:hsetnx hashkey key value

        

【3.3】List

【3.3.1】存储形式

  《1》ArrayList 使用数组存储方式  《2》LinkedList 使用双向链表方式

  ArrayList:根据索引,查询非常快,新增和删除节点的时候慢(特别是中间节点,因为要移动数据);

  LinkedList:增删节点非常快

【3.3.2】List 的常用命令

理论:

(1)两端添加节点(lpush/rpush):lpush listkey value3 value2 value1(这里的顺序是从右到左),rpush是从左到右。
(2)查看列表(lrange ):lrange listkey begin_pos end_pos(0表示第一个元素下标,-1表示最后一个元素下标)
(3)两端删除/取出节点(lpop/rpop)
    《1》lpop listkey :如果listkey存在,则删除list的第1个元素
    《2》rpop listkey :如果listkey存在,则删除list的最后个元素
(4)获取列表元素个数(llen listkey):
(5)判断listkey是否存在,存在则添加(lpushx/rpushx)
(6)根据value删除(lrem)
lrem listkey count value :从listkey 中删除 count个 值为value的元素
  其中,count为正数的时候正序删除,count为负数的时候,倒叙删除,count为0的时候全部删除。
(7)修改list下标所在值(lset):lset listkey 下标号 value
(8)在某个value之前插入newvalue:linsert keylist before/after value newvalue
(9)将A listkey中的最后一个下标value 转移到B listkey中的0下标(rpoplpush):rpoplpush listkeyA listkeyB 。
  用途:当消费者从队列中pop时做一个备份,以便当消费者已经取出信息但还没有来得及处理就崩溃导致该数据丢失,保证了数据的一致性。

实践:

  (1)两端添加节点(lpush/rpush):lpush listkey value3 value2 value1(这里的顺序是从右到左),rpush是从左到右。

  (2)查看列表(lrange ):lrange listkey begin_pos end_pos(0表示第一个元素下标,-1表示最后一个元素下标)  

      

  (3)两端删除/取出节点(lpop/rpop)

    《1》lpop listkey :如果listkey存在,则删除list的第1个元素

    《2》rpop listkey :如果listkey存在,则删除list的最后个元素

        

  (4)获取列表元素个数(llen listkey):

    

  (5)判断listkey是否存在,存在则添加(lpushx/rpushx)

   (6)根据value删除(lrem)

      lrem listkey count value :从listkey 中删除 count个 值为value的元素

      其中,count为正数的时候正序删除,count为负数的时候,倒叙删除,count为0的时候全部删除。

        

  (7)修改list下标所在值(lset):lset listkey 下标号  value

      

   (8)在某个value之前插入newvalue:linsert keylist before/after value newvalue

      

  (9)将A listkey中的最后一个下标value 转移到B listkey中的0下标(rpoplpush):rpoplpush listkeyA listkeyB   。用途:当消费者从队列中pop时做一个备份,以便当消费者取出信息时还没有来得及处理就崩溃导致该数据丢失,保证了数据的一致性。

      

【3.4】set

【3.4.1】set 的存储

  Set 和 List 差不多,但Set 集合中不允许出现重复的元素。

  Set 可以包含最大的元素数量是2^32 * 2

【3.4.2】set 的基本操作

  (1)sadd(添加):sadd setkey value1 value2 value3

  (2)srem(删除):srem setkey value1 value2

  (3)smembers(查看):smembers setkey

  (4)(修改)

  (5)sismember(判断 value 是否存在于 setkey,存在返回1,否则0):sismember setkey value

  (6)sdiff(差集运算):sdiff setkey1 setkey2

  (7)sinter(交集运算):sinter setkey1 setkey2

  (8)sunion(并集运算):sunion setkey1 setkey2

  (9)scard(元素数量):scard keyset

  (10)srandmember(随机获取1个value):srandmember setkey

  (11)sdiffstore(把两个setkey的差集存到一个新的setkey):sdiffkey key1 key2 stroekey

     sinterstore key1 key2 stroekey    把两个 setkey 的交集存到一个新的setkey

       sunionstore key1 key2 storekey   把两个 setkey 的并集存到一个新的setkey

【3.5】Sorted-Set

【3.5.1】Sorted-Set 存储

  Sorted-Set 与 Set 的区别:

    Sorted-Set 有一个分数与之关联,通过分数对成员进行从小到大的排序。成员是唯一的,但分数是可以重复的。

    Sorted-Set中的成员在集合中的位置是有序的,所以对中部成员检索也是比较高效的。

    应用场景:游戏排名、微博热搜榜 等等

【3.5.2】基本操作

  (1)zadd(增加):zadd sortkey score1 value1 score2 value2

             如果,已经有 70 zs 80 ls  ,再进行 zadd sortkey 100 zs,那么value相同,就改变了其 value 对应的 score

  (2)zrem(删除):zrem sortkey value1 value2...

              zremrangebyrank sortkey 0 4 -- 删除 0~4下标对应的value and score

              zrerangebyscore sortkey 80 100 -- 删除 80 ~ 100分的 value and score

  (3)zscore(查看分数):zscore sortkey zs   -- 结果是100(见(1)中的再次操作)

  (4)zcard(查看成员数量):zcard sortkey

  (5)zrange(范围查看):zrange sortkey 0 -1  -- 只显示value

                zrange sortkey 0 -1 withscores -- 升序显示value and score

                zrevrange sortkey 0 -1 withscores -- 降序显示 value and score

                zrangebyscore sortkey 0 100 -- 升序显示 分数在0~100之间的value

                zrangebyscore sortkey 0 100 with scores limit 0 2 --查询分数在0~100之间的 score(withscores) 与 对应的 value,并且从第0个开始去2个(limit 0 2)            

  (6)zincrby(增加分数):zincrby sortkey 3 zs -- 给 zs 对应的score +3

  (7)zcount(统计个数):zcount sortkey 80 90 -- 统计80~90分存在value的个数

【3.6】Keys的通用操作

  无论是什么类型的redis key,都可以使用这些命令来进行相关操作

【3.6.1】基本操作

  (1)keys(查看当前所有类型的key):keys *  --查看所有     keys  a* --查看a开头的key

  (2)del(删除任意类型的key):del andkey1 andkey2 andkey3

  (3)rename(重命名):rename anykey1 andkey2

  (4)expire (过期时间):expire andkey 1000  --单位为秒

  (5)ttl(查看有效期):ttl andkey --结果为当前有效的时间,单位为秒

  (6)type(查看 anykey 的数据类型):type anykey

Redis(1.2)Redis的数据结构与基本操作的更多相关文章

  1. Redis 系列(02)数据结构

    目录 Redis 系列(02)数据结构 Redis 系列目录 1. String 1.1 基本操作 1.2 数据结构 1.3 Redis数据存储结构 2. Hash 2.1 基本操作 2.2 数据结构 ...

  2. Redis(1)——5种基本数据结构

    一.Redis 简介 "Redis is an open source (BSD licensed), in-memory data structure store, used as a d ...

  3. Redis系统学习 二、数据结构

    一.字符串     1.在Redis里,字符串是最基本的数据结构.当你在思索着关键字-值对时,你就是在死锁着字符串数据结构.不要被名字给搞混了. 常见实例: set users:leto " ...

  4. 深入剖析Redis系列:Redis数据结构与全局命令概述

    前言 Redis 提供了 5 种数据结构.理解每种数据结构的特点,对于 Redis 的 开发运维 非常重要,同时掌握 Redis 的 单线程命令处理 机制,会使 数据结构 和 命令 的选择事半功倍. ...

  5. Redis源码分析-底层数据结构盘点

    前段时间翻看了Redis的源代码(C语言版本,Git地址:https://github.com/antirez/redis), 过了一遍Redis数据结构,包括SDS.ADList.dict.ints ...

  6. Redis(一)基础数据结构

    1.目录 Redis 基础数据结构 string (字符串) list (列表) hash (字典) set (集合) zset (集合) 容器型数据结构的通用规则 过期时间 2.Redis 基础数据 ...

  7. Redis(一)、Redis五种数据结构

    Redis五种数据结构如下: 对redis来说,所有的key(键)都是字符串. 1.String 字符串类型 是redis中最基本的数据类型,一个key对应一个value. String类型是二进制安 ...

  8. 聊聊Mysql索引和redis跳表 ---redis的有序集合zset数据结构底层采用了跳表原理 时间复杂度O(logn)(阿里)

    redis使用跳表不用B+数的原因是:redis是内存数据库,而B+树纯粹是为了mysql这种IO数据库准备的.B+树的每个节点的数量都是一个mysql分区页的大小(阿里面试) 还有个几个姊妹篇:介绍 ...

  9. [redis读书笔记] 第一部分 数据结构与对象 对象类型

    - 从前面redis的基本数据结构来看,可以看出,redis都是在基本结构(string)的基础上,封装了一层统计的结构(SDS),这样让对基本结构的访问能够更快更准确,提高可控制度. - redis ...

  10. Redis(一):数据结构与对象

    前言 本书是Redis设计与实现的读书笔记,旨在对Redis底层的数据结构及实现有一定了解.本书所有的代码基于Redis 3.0. 简单动态字符串 SDS Redis没有直接使用C语言中的字符串,而是 ...

随机推荐

  1. react-native-pg-utils(对react-native全局进行配置,对内置对象原型链增加方法,增加常用全局方法.)

    react-native-pg-utils 对react-native全局进行配置,对内置对象原型链增加方法,增加常用全局方法. 每次新建react-native项目之后都会发现有一些很常用的方法在这 ...

  2. demo(一) react-native-router-flux

    react-native init AwesomeProject cd AwesomeProject 安装模块 npm i react-native-router-flux --save

  3. hdu 4810 Wall Painting (组合数+分类数位统计)

    Wall Painting Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) T ...

  4. SSO 断点登陆

    1. 摘要 ( 注意:请仔细看下摘要,留心此文是否是您的菜,若浪费宝贵时间,深感歉意!!!) SSO这一概念由来已久,网络上对应不同场景的成熟SSO解决方案比比皆是,从简单到复杂,各式各样应有尽有!开 ...

  5. Tomcat的server.xml

    慕课网:https://www.imooc.com/video/19201 Server:指整个tomcat服务器,它其中包含多个组件,它主要负责管理和启动各个service,同时监听8005端发过来 ...

  6. JS基础_数组简介

    内建对象 宿主对象 自定义对象 数组(Array) - 数组也是一个对象 - 它和我们普通的对象功能类似,也是用来存储一些值的 - 不同的是普通对象是使用字符串作为属性名的 数组是使用数字来作为索引来 ...

  7. CCF 2017 09-02 公共钥匙盒

     CCF 2017 09-02 公共钥匙盒 1.用快速排序函数结合排序规则函数来给取放排序. 2.vector数组的强大功能. #include<iostream> #include< ...

  8. [Python]统计1个元素在列表中的出现次数

    使用列表自带的count方法: list.count(element) 示例:  列表a,有4个元素,其中值1出现3次 In []: a=[,,,] In []: a Out[]: [, , , ] ...

  9. 互斥锁lock、信号量semaphore、事件Event、

    1.互斥锁lock 应用在多进程中互斥所lock:互斥锁是进程间的get_ticket互相排斥进程之间,谁先枪占到资源,谁就先上锁,等到解锁之后,下一个进程在继续使用.# 语法: 上锁: lock.a ...

  10. Mac 配置vscode调试PHP

    Mac系统版本:MacOS Mojave  10.14.5 vscode:1.36.0 MacOS Mojave  10.14.5 系统自带 PHP 7.1.23 1.开启php sudo vim / ...