Redis的数据结构

五种数据类型:

  字符串(String)、字符串列表(list)、字符串集合(set)、有序字符串集合(sorted set)、哈希(hash)

key定义的注意点:

  • 不要过长,不要超过1024个字节
  • 不要过短,会降低可读性
  • 要有统一的命名规范

存储String

二进制的方式存储的,意味着该类型存入和获取的数据是相同的,value最多容纳的数据长度

  • 存储String常用命令:

    • 赋值set、
    • 取值get(getset)、
    • 删除del、
    • 扩展[incrby(将value加指定值),decrby自减]、
    • 数据增减[incr(若没有则设初始值0,再数值增1;字符串会异常),decr自减1]
    • 追加append,返回字符串长度

存储Hash

String key和String Value的map容器,每个Hashkey最多存储4294967295个键值对

  • 常用命令:

    • 赋值 hset myhash username cui
    • 多个赋值 hmset myhash username cui age 24
    • 取值 hget myhash username
    • 多个取值 hmget myhash username age
    • 获取全部值 hgetall myhash
    • 删除多个 hdel myhash username age
    • 删除整个集合 del myhash
    • 增加 hincrby myhash age 5
    • 判断值是否存在 hexists myhash username
    • 获取值的数量hlen myhash
    • 获取所有属性名称 hkeys myhash
    • 获取所有属性的值 hvals myhash

存储list

ArrayList使用数组方式,LinkedList使用双向链表方式,双向链表中增加数据、删除数据

  • 常用命令:

    • 两端添加

      • lpush mylist a b c
      • rpush mylist 1 2 3
    • 查看列表
      • lrange mylist 0 -1(查看全部)
    • 两端弹出
      • lpop mylist (弹出第一个元素,就没有此元素了)
      • rpop mylist
    • 获取列表元素个数
      • llen mylist
    • 扩展命令
      • lpushx mylist 3 (仅当mylist存在时插入)
      • rpushx mylist 3
    • lrem mylist count value
      (count>0:从头删除count个值为value的元素
      count=0: 删除所有等于value的元素
      count<0:从尾开始删除count个等于value的元素)
    • 设置下标插入 lset mylist 3 mm(在3位置插入mm)
    • 设置在某元素前后插入linsert mylist before|after b 11(在b前或后插入11)
    • 将一个list的尾弹出压入另一个list头(rpoplpush mylist1 mylist2)

rpoplpush使用场景:

  消息队列发布系统时,对其进行备份

存储Set

没有排序的字符集合,不允许出现重复set可包含最大元素数量是4294967295个

  • 常用命令:

    • 添加/删除元素

      • sadd myset a b c
      • srem myset b c
    • 获取集合中的元素
      • smembers myset
    • 集合中的差集运算
      • sdiff myset1 myset2
    • 集合中的交集运算
      • sinter myset1 myset2
    • 集合中的并集运算
      • sunion myset1 myset2
    • 扩展命令
      • 判断是否有指定的值sismember myset c
      • 查看set中的元素数量 scard myset
      • 返回set中的随机一个元素 srandmember myset
      • 将两个set中相差的元素存入新的集合 sdiffstore myset3 myset1 myset2 (存入myset3)
      • 将两个set中交集的元素存入新的集合 sinterstore myset3 myset1 myset2
      • 将两个set中并集的元素存入新的集合sunionstore myset3 myset1 myset2

set使用场景:

  • 跟踪具有唯一性的数据:访问某一博客的唯一ip地址
  • 维护数据对象之间的关联关系

存储Sorted-Set

Sorted-Set和Set的区别

    Sorted-Set每个成员都有一个分数(可以重复)与之关联,Redis中用来从小到大的排序。

    时间复杂度为集合中成员的个数的对数

    Sorted-Set中的成员在集合中的位置是有序的

  常用命令:

      • 添加元素

        • zadd mysort 70 cui 80 li 90 wang(先写分数再写元素,若元素已存在,则替换掉原有分数)
      • 获得元素
        • 获得分数 zscore mysort cui
        • 获得成员数量 zcard mysort
      • 删除元素
        • 删除 zrem mysort li wang
        • 按范围删除 zremrangebyrank mysort 0 4
        • 按分数范围删除 zremrangebyscore mysort 80 100
      • 范围查询
        • 查找全部 zrange mysort 0 -1
        • 查找并显示分数(由小到大) zrange mysort 0 -1 withscores
        • 查找并显示分数(由大到小) zrevrange mysort 0 -1 withscores
      • 扩展命令
        • 返回分数的某个范围的成员的前两个并按从大到小的顺序
          zrangebyscore mysort 0 100 withscores limit 0 2
        • 给li的分数加3 zincrby mysort 3 li
        • 获取分数再某个范围的成员的个数 zount mysort 80 90

  使用场景:

    • 一般用在游戏排名
    • 微博热点话题
    • 构建索引数据

Keys的通用操作

  • keys * 查看所有key
  • del my1 my2 my3 删除指定key
  • exists my1 查看my1是否存在
  • rename my1 my2 重命名为my2
  • expire my1 1000 设置过期时间为1000s
  • ttl my1 查看剩余时间(没有设置返回-1)
  • type my1 查看key的类型
  • flushall 清空数据库

Redis的特性

  • 多数据库
    • 一个Redis最多可提供16个数据库(0-15),也可通过 select 1选择1号数据库
    • 将0数据库的key(myset)到1号数据库 move myset 1
  • Redis事务
    • 通过multi exec discard命令实现事务
      multi 开启事务 直到 exec exec 提交 discard 回滚

Redis的数据结构、通用操作及其特性的更多相关文章

  1. Redis常用数据结构和操作

    1.String 存入字符类型 Set name luowen 设置name = luowen 存储 Get name 获取设置好的name的值 Setnx name luowen 设置name键值为 ...

  2. Redis Keys的通用操作

    keys * 显示所有key 127.0.0.1:6379> keys * 1) "sort1" 2) "l2" 3) "set2" ...

  3. 峰Redis学习(7)Redis 之Keys 通用操作

    keys * 显示所有key   查找所有以s开头的key 用s*  *代表任意字符 127.0.0.1:6379> keys s* 1) "set3" 2) "s ...

  4. Redis<六> Key通用操作

    1). KEYS pattern : 查找所有符合给定模式 pattern 的 key . 如 keys * , keys *list* 2). DEL key [key ...] : 删除给定的一个 ...

  5. Redis学习笔记(3)—— 五种数据类型&keys的通用操作

    一.Redis数据结构介绍 redis是一种高级的key-value的存储系统,其中的key是字符串类型,尽可能满足如下几点: 1)key不要太长,最好不要操作1024个字节,这不仅会消耗内存还会降低 ...

  6. Redis学习--key的通用操作、移库操作、订阅与事务、持久化和总结

    key的通用操作 keys pattern: pattern *表示任意一个多个字符 ?表示任意一个字符 del key1 key2 删除多个key exists keyname 查看是否存在 ren ...

  7. redis的keys常用操作及redis的特性

    redis的keys常用操作 1.获得所有的keys: keys * 2.可以模糊查询 keys:keys  my* 3.删除keys:del mymkey1 mykey2 4.是否存在keys:ex ...

  8. redis入门到精通系列(三):key的通用操作和redis内部db的通用操作

    五种数据类型都用到了key,key本身是一种字符串,通过key可以获取redis中保存的对象.这一篇博客就将介绍key的通用操作. (一)key基本操作 删除key del key key是否存在 e ...

  9. python连接redis、redis字符串操作、hash操作、列表操作、其他通用操作、管道、django中使用redis

    今日内容概要 python连接redis redis字符串操作 redis之hash操作 redis之列表操作 redis其他 通用操作,管道 django中使用redis 内容详细 1.python ...

随机推荐

  1. Linux 手册惯用的节名

    linux 手册将

  2. oldboy es和logstash

    logstash: input:https://www.elastic.co/guide/en/logstash/current/input-plugins.html input { file { p ...

  3. PDF在线解除密码的方法是什么

    大家在网上下载一些关于PDF文件的时候通常会发现有的PDF文件是有密码的,有密码的文件通常是不可以被转换的,这个时候我们就需要将其密码解除掉,这样后期不仅方便阅读也方便了PDF文件的转换. 操作工具: ...

  4. Linux filesystem

    文件系统的运作与操作系统的文件数据有关.较新的操作系统的文件数据除了文件实际内容外,通常含有非常多的属性,例如Linux操作系统的文件权限(rwx)与文件属性(属主.属组.时间参数等).文件系统通常会 ...

  5. 聊天机器人開發好消息!!DIALOGFLOW與微信的天作之合!!

    虽然DIALOGFLOW暂未能够与微信(WECHAT)或企业微信(ENTERPRISE WECHAT)进行任何技制上的连接INTERGRATION),确实限制了我们这些聊天机器人开发者的创作空间,因为 ...

  6. 前端开发-日常开发沉淀之git提交文件忽略

    .gitignore文件里添加需忽略的文件,或需要提交的文件 # Created by .ignore support plugin (hsz.mobi) ### VisualStudioCode t ...

  7. 对于Dubbo的理解

    最近才开始看关于Dubbo,曾经居然把Dubbo跟ActiveMQ联系到了一起,很显然 ,是没有深入理解Dubbo的本质. 其实Dubbo是项目与项目(或者是系统与系统)之间通信用的.在Dubbo没出 ...

  8. Ext选项卡tabpanel切换动态加载数据

    鸣人不说暗话,来张图: 代码开始:(使用Ext,ajax加载数据,如果你们有好的方法也可以多多交流)var tabxsk = new Object(); //初始化 tabxsk.init = fun ...

  9. volatile有什么用?能否用一句话描述volatile的应用场景

    volatile保证内存可见性和禁止指令重排.volatile用于多线程环境下的单次操作(单次读或者单次写).volatile关键字不能提供原子性.     volatile关键字为实例域的同步访问提 ...

  10. extundelete数据恢复

    需要安装的依赖包: 1. e2fsprogs软件包已安装2. e2fsprogs-libs软件包已安装3. e2fsprogs-devel软件包已安装4. gcc软件包已安装5. gcc-c++ 软件 ...