Redis基本数据结构及常用命令

本文详细介绍了Redis的基本用法,包括key的设置、获取、模糊匹配、存在性判断、类型查看、删除及过期时间管理。此外,还涵盖了Redis的几种常用数据类型如String、List、Set和SortedSet的特性、命令和数据结构说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

redis的基本用法

key的基本设置

  1. 设置key

    set key value
    
  2. 获取key

    get key
    
  3. 模糊匹配key key后面接正匹配表达式

    key *
    
  4. 判断是否存在key 存在返回1 不存在返回0

    exists key
    
  5. 查看key的类型

    type key
    
  6. 删除key 其中unlink key 为异步删除

    del key
    unlink key
    
  7. 为key设置过期时间 second为时间 单位为秒

    expire key second
    //例子
    expire key 10
    
  8. 查看距离key过期时间 返回-1为永不过期 -2 为已过期

    ttl key
    
  9. redis默认具有16个库 (0-15)切换库

    // 0是默认库 切换其他库直接写切换库的数字
    select 2
    
  10. 查看当前库的key的数量

    dbsize
    
  11. 清空当前库(谨慎使用)

    flushdb
    
  12. 清空所有库(谨慎使用)

    flushall
    

redis常用数据类型

String类型

简介

String 是 Redis 最基本的类型,你可以理解成与Memcached一模一样的类型,一个 key对应一个 value。
String 类型是二进制安全的。意味着 Redis 的 string 可以包含任何数据。比如jpg图片或者序列化的对象。
String 类型是 Redis 最基本的数据类型,一个Redis 中字符串 value 最多可以是512M

常用命令

  1. 设置值 set 如果当前库已有相同名称的key 覆盖掉原先的值 保存现在的值

    set k1 apple
    
  2. 获取值 get

    get k1
    
  3. 追加value值 append (返回值为value的长度)

    append k1 banana
    
  4. 获取value的长度 strlen

    strlen k1
    
  5. setnx 设置值 与set的区别为如果当前key已经有数据了,不能进行设置,可以配合过期时间实现分布式锁

    //返回0 设置不成功
    setnx k1 aaa
    
  6. value 自增 incr 只能对数字值操作 如果为空 则把值设置为1 对储存在指定的key值进行原子性操作

    set k2 1
    incr k2
    //
    
  7. value 自减

    decr k2
    
  8. incrby / decrby <步长>将 key 中储存的数字值增减。自定义步长

    //value 加10
    incrby k2 10
     //value 减10
    decrby k2 10
    
  9. 一次性设置多个string数据 mset …

    mset m1 aaa m2 bbb m3 ccc
    
  10. 一次性获取多个数据 mget …

    mget m1 m2 m3
    
  11. msetnx … 原子性操作 其中有有一个key值重复 则全部设置不成功

    // 设置失败 因为当前库中m1
    msetnx u1 ooo u2 jjj m1 vvv
    //设置成功
    msetnx u1 ooo u2 jjj 
    
  12. 获取value中部分值 getrange key start end

    //开始位置和结束位置都会取
    getrange m1 0 1
    
  13. 替换value中的部分值 setrange key <起始位置> value

    set m1 abcdefg
    setrange m1 2 bb
    
  14. setex key second value 设置值时同时设置过期时间 用于分布式锁

    //10为过期时间单位秒
    setex q1 10  qqqqq 
    
  15. 以新值换旧值 getset key valuenew

    getset m1 bbb
    get m1
    

数据结构
String 的数据结构为简单动态字符串(Simple Dynamic String,缩写 SDS)。是可以修改的字符串,内部结构实现上类似于 Java 的 ArrayList,采用预分配余空间的方式来减少内存的频繁分配.“

List 类型

简介

单键多值
Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。“
它的底层实际是个双向链表,对两端的操作性能很高,通过索引下标的操作中间的节点性能会较差。

常用命令

  1. 从左边或者右边插入一个或多个数据 lpush / rpush …

    lpush leftList a b c d
    rpush rightList z y x
    
  2. 通过下标索引获取元素(从左到右) lrange key start end

    //获取全部元素
    lrange leftList 0 -1
    //获取部分元素
    lrange rightList 0 2
    
  3. 从左边或者右边吐出一个值 lpop /rpop 当所有值被取出 key自动被删除 (值在键在,值亡键亡)

    lpop leftList 
    rpop rightList
    
  4. 从一个列表右边吐出一个值拿到另一个列表的左边 rpoplpush

    rpoplpush leftList rightList
    
  5. 在某个值前面或者后面插入一个新值 linsert before / after

     linsert leftList before b c
     linsert leftList after b c
    
  6. 从左边删除n个相同的value值 lrem value

    lrem leftList 2 c
    
  7. 将key的下标为index的value替换 lset

    lset leftList 2 m
    

数据结构

​ List 的数据结构为快速链表 quickList。首先在列表元素较少的情况下会使用一块连续的内存存储,这个结构是 ziplist,也即是压缩列表。
它将所有的元素紧挨着一起存储,分配的是一块连续的内存。“当数据量比较多的时候才会改成 quicklist。“
因为普通的链表需要的附加指针空间太大,会比较浪费空间。
在这里插入图片描述

Redis 将链表和 ziplist 结合起来组成了 quicklist。也就是将多个ziplist 使用双向指针串起来使用。这样既满足了快速的插入删除性能,又不会出现太大的空间冗余。

set类型

常用命令

  1. 添加数据 sadd …将一个或多个值添加到集合中去 如果集合中已经存在 则忽略

    sadd sk1 a b c d
    
  2. 取出集合中所有的值smembers

    smembers sk1
    
  3. 判断集合中是否有value 有返回1 无返回0 sismember

    sismember sk1 a
    sismembet sk1 m
    
  4. 获取集合中的元素个数 scard

    scard sk1
    
  5. 删除集合中的某个元素 srem …

    srem sk1 a
    
  6. 随机吐出集合中的一个值

    spop sk1
    
  7. 随机从集合中拿出n个元素 不会删除元素srandmember

    srandmember sk1 2
    
  8. 把集合中的一个值从一个集合移动到另外一个集合 smove value

    sadd sk2 m k l j b d
    smove sk1 sk2 a
    
  9. 获取两个集合的交集 sinter

    sinter sk1 sk2
    
  10. 获取两个集合中的并集 sunion

    sunion sk1 sk2
    
  11. 获取两个集合的差集 sdiff

    sdiff sk1 sk2
    

数据结构

Set 数据结构是 dict 字典,字典是用哈希表实现的。

Java中 HashSet 的内部实现使用的是 HashMap,只不过所有的 value 都指向同一个对象Redis 的rset 结构也是一样,它的内部也使用 hash结构,所有的 value都指向同一个内部值。

hash

简介
Redis hash 是一个键值对集合。
Redis hash 是一个 string类型的 field 和 value 的映射表,hash 特别适合用于存储对象。类似Java里面的Map<String.Object>
用户ID为查找的 key,存储的 value用户对象包合姓名,年龄,生日等信息,如果用普通的 key/value结构来存储
主要有以下2种存储方式:
在这里插入图片描述

hash方式:通过 key(用户 ID)+field(属性签)就可以作对应属性数据了,既不需要重复存储数据,也不会带来序列化和并发修改控制的问题。

keyfieldvalue
name张三
age20
gender

常用命令

  1. 添加数据 hset

    hset user:001 name 张三
    hset user:001 age 20
    hset uset:001 genner 男
    
  2. 获取数据 hget 从集合中拿出filed 属性值

    hget user:001 name
    hget user:001 age
    
  3. 一次性添加多个filed属性 hmset …

    hmset user:002 name 李四 age 20 genner 女
    
  4. 查看hash表中key的filed属性是否存在 hexists

    hexists user:001 name
    hexists user:001 score
    
  5. 列出hash的所有field值 hkeys

    hkeys user:001
    
  6. 列出hash的所有value hvals

    hvals user:001
    
  7. 为hash表中的key的域的value值增加1 hincrby

    //加1
    hincrby user:001 age 1
    //减1
    hincrby user:001 age -1
    //加10
    hincrby user:001 age 10
    //减5
    hincrby user:001 age -5
    
  8. 将hash表key的域field的值设置为value 当且仅当field不存在时 才可以添加

    //不可以添加 当前user:001中已经包含age
    hsetnx age 10
    //可以添加 当前user:001中不包含score
    hsetnx score 100
    

数据结构

Hash 类型对应的数据结构是两种: ziplist (压缩列表),hashtable (哈希表)。field-value 长度较短且个数较少时,使用 ziplist,否则使用 hashtable。

有序集合zset

简介

Redis有序集合 zset 与普通集合 set 非常相似,是一个没有重复元素的字符串集合。不同之处是有序集合的每个成员都关联了一个评分(score),这个评分(score )被用来按照从最低分到最高分的方式排序集合中的成员。集合的成员是唯一的,但是评分可以是重复了 。
因为元素是有序的,所以你也可以很快的根据评分(score)或者次序(position)来获取一个范围的元素。
访问有序集合的中间元素也是非常快的,因此你能够使用有序集合作为一个没有重复成员的智能列表。“

常用命令

  1. 添加有序集合 zadd …
 zadd phone 20 huawei 100 xiaomi 200 oppo
  1. 获取有序集合zrange [withScores]

    //不带分数
    zrange phone 0 -1
    //带分数
    zrange phone 0 -1 withScores
    
  2. 获取分数期间内的元素 zrangebyscore [withScores] [limit offset count] (由小到大排列)

    zrangebyscore phone 100 300 withScores 
    
  3. 获取由大到小集合 zrevrangebysocre [withScores] [limit offset count]

    zrevrangebyscore phone 100 200 withScores 
    
  4. 修改元素的分值 zincrby

    zincrby iphone 20 huawei
    
  5. 删除集合下 指定的元素 zrem

    zrem iphone huawei
    
  6. 统计集合中,分数区间的元素个数 zcount

    zcount iphone 100 200
    
  7. 返回集合中的排名 从0开始 zrank

    zrank iphone huawei
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值