• Redis五大基本数据类型的基本命令


    键(key)

    • keys *:查看当前库所有key
    • exists key:判断某个key是否存在
    • type key:查看你的key是什么类型
    • del key:删除指定的key数据
    • unlink key:根据value选择非阻塞删除
      • 仅将keys从keyspace元数据中删除,真正的删除会再后续异步操作
    • expire key 10:为给定的key设置过期时间,10s
    • ttl key:查看还有多少秒过期:-1表示永不过期,-2表示已过期
    • select:命令切换数据库
    • dbsize:查看当前数据库的key数量
    • flushdb:清空当前库
    • flushall:通杀全部库

    字符串(String)

    String是Redis最基本的类型,一个key对应一个value,value最多可以是512M
    String类型是二进制安全的,意味着Redis的string可以包含任何数据,比如jpg图片、序列化对象
    String的数据结构为简单动态字符串(Simple Dynamic String,缩写SDS),是可以修改的字符串,内部结构实现上类似Java的ArrayList,采用预分配冗余空间的方式来减少内存的频繁分配。
    
    如下图所示,当前字符串实际分配的空间capacity一般要高于实际字符串的长度len,当字符串长度小于1M时,扩容都时加倍现有的空间,如果超过1M,扩容时一次只会多扩1M的空间,需要注意的是字符串最大长度为512M
    
    • 1
    • 2
    • 3
    • 4
    • 5

    =

    • set key value :添加键值对
      • NX:当数据库key不存在时,可以将key-value添加数据库
      • XX:当数据库key存在时,可以将key-value添加数据库,与NX参数互斥
      • EX:key的超时秒数
      • PX:key的超时毫秒数,与EX互斥
    • get key :查询对应键值
    • append key value :将给定的 value 追加到原值的末尾
    • strlen key :获得值的长度
    • setnx key value :只有在key不存在时,设置key的值
    • incr key :将key中存储的数字值+1,只能对数字值操作,若为空,设该值为1
    • decr key :将key中存储的数字值-1,只能对数字值操作,若为空,设该值为-1
    • incrby / decrby key 步长 :将key中存储的数字值增减,自定义步长
    • mset key1 value1 key2 value2 :同时设置一个或多个key-value对
    • msetnx key1 value1 key2 value2 :同时设置一个或多个key-value对,当且仅当所有给定key都不存在
    • mget key1 key2 key3 :同时获取一个或多个value
    • getrange key 起始位置 结束位置 :获得值的范围,类似java中substring
    • setrange key 起始位置 value :用value覆盖key所存储的字符串值,从起始位置开始
    • setex key 过期时间 value :设置键值的同时,设置过期时间,单位秒
    • getset key value :以新换旧,设置新值,同时获得旧值

    列表(List)

    单键多值,Redis列表是简单的字符串列表,安装插入顺序排序,可以添加一个元素到队列的头部(左)或者尾部(右)。它的底层实际是双向链表,对两端的操作性能很高,通过索引下标操作中间节点的性能会较差
    
    List的数据结构为快速链表quickList,首先在列表元素较少的情况下会使用一块连续的内存存储,这个结构是ziplist,也就是压缩列表,它将所有的元素紧挨着一起存储,分配的是一块连续的内存,当数据量较多时才会改为quicklist
    这个列表里存的只是int类型的数据,结构上还需要两个额外的指针prev、next
    Redis将链表和ziplist结合起来组成了quicklist,也就是将多个ziplist使用双向指针串起来使用。这样既满足了快速的插入删除性能,又不会出现太大的空间冗余
    
    • 1
    • 2
    • 3
    • 4
    • 5

    • lpush/rpush key value1 value2 value3 …:从左边/右边插入一个或多个值
    • lpop/rpop key :从左边/右边吐出一个值,值在键在,值光键亡
    • rpoplpush key1 key2 :从 key1 列表右边吐出一个值,插到 key2 列表左边
    • lrange key start stop :按照索引下标获得元素(从左到右)
    • lindex key index :按照索引下标获得元素(从左到右)
    • llen key :获得列表长度
    • linsert key before value newvalue :在 value 的后面插入 newvalue 值
    • lrem key n value :从左边删除n个value(从左到右)
    • lset key index value :将列表key下标为index的值替换成value

    集合(Set)

    Redis的Set是string类型的无序集合,底层是一个value为null的hash表,所以添加、删除、查找的复杂度都为O(1)
    set是可以自动去重,数据结构是dict字典,字典是用哈希表完成的
    Java中HashSet的内部实现使用的是HashMap,只不过所有的value都指向同一个对象。Redis的set结构也是一样,它的内部也使用hash结构,所有的value都指向同一个内部值
    
    • 1
    • 2
    • 3
    • sadd key value1 value2 …:将一个或多个member元素加入到集合key中,已经存在的member元素将被忽略
    • smembers key :取出该集合的所有值
    • sismember key value :判断集合 key 是否含有该value值,1代表有,0代表无
    • scard key :返回该集合的元素个数
    • srem key value1 value2 :删除集合中的某个元素
    • spop key :随机从该集合中吐出一个值
    • srandmember key n :随机从该集合中取出n个值,不会从集合中删除
    • smove source destination value:把集合中一个值从一个集合移动到另一个集合
    • sinter key1 key2 :返回两个集合的交集元素
    • sunion key1 key2 :返回两个集合的并集元素
    • sdiff key1 key2 :返回两个集合的差集元素(key1中有,key2无)

    哈希(Hash)

    键值对集合,一个string类型的field和value的映射表,hash特别适用于存储对象,类似于java的Map
    
    Hash类型对应的数据结构又两种:ziplist(压缩列表)、hashtable(哈希表)。当field-value长度较短且个数较少时,使用ziplist,否则使用hashtable
    
    • 1
    • 2
    • 3
    • hset key field value :给key集合中的field键赋值value
    • hget key1 field :从key1集合field取出value
    • hmset key1 field1 value1 field2 value2 …:批量设置hash的值
    • hexists key1 field :查看哈希表key中,给定域field是否存在
    • hkeys key :列出该key集合中所有的field
    • hvals key :列出该key集合的所有value
    • hincrby key field increment :为哈希表key中的域fied的值加上增量1 -1
    • hsetnx key field value :将哈希表key中的域field的值设置为value,当前仅当域field不存在

    有序集合Zset(sorted set)

    在普通集合set基础上,集合中的每个成员都关联了一个评分(score),这个评分被用来按照从最低到最高分的方式排序集合中的成员,集合的成员是唯一的,但评分是可以重复的
    元素是有序的,所以可以根据评分或者次序来获取一个范围的元素
    访问有序集合的中间元素也是非常快的,因此你能够使用有序集合作为一个没有重复成员的只能列表
    
    zset是Redis提供的一个非常特别的数据结构,一方面它等价于java中的Map,可以给每一个元素value赋予一个权重score,另一方面它又类似于TreeSet,内部的元素会按照权重score进行排序,可以得到每个元素的名词,还可以通过score的范围来获取元素的列表
    
    zset底层使用了两个数据结构
    	-hash,hash的作用就是关联元素value和权重score,保障元素value的唯一性,可以通过元素value找到相应的score值
    	-跳跃表,跳跃表的目的在于给元素value排序,根据score的范围获取元素列表
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • zadd key score1 value1 score2 value2 :将一个或多个member元素及其score值加入有序集合key中
    • zrange key start stop [WITHSCORES]:返回有序集合key中,下标在 statr stop 之间的元素,带WITHSCORES,可以让分数一起和值返回到结果集
    • zrangebyscore key minmax[withscores] [limit offset count]:返回有序集合key中,所有score值介于min、max之间的成员,有序集合按score值递增次序排列
    • zrevrangebyscore key maxmin [withscores] [limit offset count]:同上,递减次序排列
    • zincrby key increment value :为元素的score加上增量
    • zrem key value :删除该集合下,指定值的元素
    • zcount key min max :统计该集合,分数区间内的元素个数
    • zrank key value :返回该值在集合中的排名,从0开始
  • 相关阅读:
    数字经济时代 企业的数据安全需要多维考虑
    线性与树型数据结构可视化模拟器
    ARouter 面试题
    Hadoop
    《面向对象软件工程》笔记——1-2章
    CompletableFuture 实战
    MFC中利用CDockablePane实现悬浮窗
    kubernetes集群基于kubeadm部署以及常见问题解决
    activemq的安全机制、Connection使用方法、Session的使用方法、签收模式、使用事务
    发版检查list
  • 原文地址:https://blog.csdn.net/mynameisgt/article/details/125902291