Redis五大数据类型及基本操作

这篇博客介绍了Redis作为缓存数据库的key-value存储方式,并详细阐述了Redis的五大数据类型:string、hash、list、set和zset(有序集合),以及相应的基本操作,包括信息添加、查询和清除等。此外,还提到了针对key和db的操作。

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

Redis是以key-value的方式存储数据的缓存数据库。

Redis基本操作

- 功能性指令
信息添加

set key value

信息查询

get key (数据没有返回(nil))

- 清除屏幕信息

 clear

- 帮助信息查阅

help command(命令名) 
help @组名

例如,help get
在这里插入图片描述
例如,help @string
在这里插入图片描述

在这里插入图片描述

- 退出指令(三种)

quit 
exit 
<Esc>   (会关掉显示屏,最好别用)

Redis支持的数据类型

redis支持五种数据类型,分别是string、hash、list、set、sorted set

string(字符串)

格式:
-添加/修改数据
    set key value  (单数据插入)
    mset key1 value1 key2 value2 ...... (多数据插入)
-获取数据
    get key  
    mget key1 key2 ......

-设置一个不可修改的key
    setnx key value
    (注意:只在键 key 不存在的情况下, 将键 key 的值设置为 value 。
    若键 key 已经存在, 则 SETNX 命令不做任何动作。 可用于分布锁)
    
-设置数值数据增加指定范围的值
    incr key (默认加1)
    incrby key increment  (整数)
    incrbyfloat key increment (小数)
-设置数值数据减少指定范围的值
    decr key (默认减1)
    decrby key increment
      
-设置数据具有指定的生命周期
    setex key seconds value
    psetex key milliseconds value
  
  
1.string类型在redis内部存储默认是一个字符串,当遇到增减类(incr,decr)操作时会转成数值进行计算。

2.string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。

3.redis所有的操作都是原子性的,采用单线程处理所有业务,命令是一个一个执行的,因此无需考虑并发带来的影响。

4.redis中string类型数据最大存储量 521MB

注意:按数值进行操作的数据,如果原始数据不能转成数值,或超越redis数值上限范围,将报错。
redis数值计算上限范围(java中long类型数据的最大值,Long.MAX_VALUE = 2^(63)-1)
利用redis数值超越上限范围报错的方式,可以用于处理点击次数的业务中
(设置保存值=最大值-可点击次数,若用户继续点击redis报错,程序则提示用户次数用完,
这样就不需要去判断用户次数,提高程序性能)。

hash(哈希)

存储需求:对一系列的存储数据进行编组,方便管理,典型应用存储对象信息
存储结构:一个存储空间保存多个键值对数据
hash类型:底层使用哈希表结构实现数据存储

在这里插入图片描述

格式: 
- 添加/修改数据
    hset key field value
    hmset key field1 value1 field1 value2 ......
- 获取数据
    hget key field
    hmget key field1 field2 ......
    hgetall key
-删除数据
    hdel key field1 field2 ......
    
-设置数值数据增加/减少指定范围的值
    hincr key field (默认加1)
    hincrby key field increment  (整数)
    hincrbyfloat key field increment (小数)

-获取哈希表中字段的数量
    hlen key
    
-获取哈希表中是否存在指定字段
    hexists key field


1.hash类型下的value只能存储字符串,不允许存储其他数据类型的数据,不存在嵌套现象。如果数据未获取到,对应的值为(nil)。

2.每个hash只能存储 2^(32)-1 个键值对。

3.hash类型十分贴近对象的数据存储形式,并且可以灵活添加、删除对象属性。但hash设计初衷不是为了存储大量对象而设计的,切记不可滥用,更不可以将hash作为对象列表使用。

4.hgetall key 操作可以获取全部的属性,但如果内部的field过多,遍历整体数据效率会很低,有可能会成为数据访问的瓶颈。       

list(列表)

数据存储需求:存储多个数据,并对数据进入存储空间的顺序进行区分。
需要的存储结构:一个存储空间保存多个数据,且通过数据可以体现进入顺序。
list类型:保存多个数据,底层使用双向链表存储结构实现。

在这里插入图片描述

格式:
-添加/修改数据
-左边插入
    lpush key value1 value2 ......
-右边插入
    rpush key value1 value2 ......
-获取数据
    lrange key start stop    (lrange key 0 -1 (获取全部数据))
    lindex key index

在这里插入图片描述

-获取list列表的长度
    llen key

-获取并移除数据
    lpop key 
    rpop key
    blpop key timeout(等待时间) 
    brpop key timeout(等待时间)
    查询key中是否存在value,存在返回key和value并移除value,不存在,进入等待时间,时间过后不存在返回(nil)

在这里插入图片描述

-移除指定数据
    lrem key count value

在这里插入图片描述在这里插入图片描述

set(集合)

存储需求:存储大量的数据,在查询方面提供更高的效率。
需要的存储结构:能够保存大量的数据,高效的内部存储机制,便于查询。
set类型:与hash存储结构完全相同,但仅存储键,不存在键值(nil),并且值是不允许重复的。

在这里插入图片描述

格式:
-添加数据
    sadd key member1 member2 ...... 
-获取全部数据
    smembers key
-删除数据
    srem key member1 member2 ......

在这里插入图片描述

-获取集合数据总量
    scard key
    
-判断集合中是否包含指定数据
    sismember key member

在这里插入图片描述

-随机获取集合中指定数量的数据
    srandmember key count
-随机获取集合中的某个数据并将该数据移出集合
    spop key

在这里插入图片描述

-求两个集合的交、并、差集
    sinter key1 key2 ......
    sunion key1 key2 ......
    sdiff key1 key2 ......
-求两个集合的交、并、差集并存储到指定集合中
    sinterstore destination key1 key2 ......
    sunionstore destination key1 key2 ......
    sdiffstore destination key1 key2 ......
-将指定数据从原始集合中移动到目标集合中
    smove source destination member
    

set类型不允许数据重复,如果添加的数据在set中已经存在,将只保留一份。

set虽然与hash的存储结构相同,但是无法启用hash中存储值的空间。

在这里插入图片描述

zset(sorted_set 有序集合)

存储需求:数据排序有利于数据的有效展示,需要提供一种可以根据自身特征进行排序的方式。
存储结构:可以保存可排序的数据结构。
sorted_set类型:在set的存储结构基础上添加可排序字段。

在这里插入图片描述

格式:
-添加数据
    zadd key score value
-获取全部数据
    zrange key start stop [withscores]
    zrevrange key start stop [withscores]
-删除数据
    zrem key member1 member2 ......

在这里插入图片描述在这里插入图片描述

-按条件获取数据
    zrangebyscore key min max [withscores] [limit]
    zrevrangebyscore key min max [withscores]      

在这里插入图片描述在这里插入图片描述

注意:
    min与max用于限定搜索查询的条件
    start与stop用于限定查询范围,作用于索引,表示开始和结束索引
    offset与count用于限定查询范围,作用于查询结果,表示开始位置和数据总量
    
    
-按条件删除数据
    zremrangebyrank key start stop
    zremrangebyscore key min max

在这里插入图片描述

-获取集合数据总量
    zcard key
    zcount key min max

-集合交、并操作
    zinterstore destination numkeys key [key]
    zunionstore destination numkeys key [key]

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

注意:
    score保存的数据存储空间是64位,如果是整数范围是-9007199254740992~9007199254740992
    score保存的数据也可以是一个双精度的double值,基于双精度浮点数的特征,可能会丢失精度,使用时候要慎重(比如,在描述0.5=(2^-1),0.25=(2^-2),0.125=(2^-4)这些数据可以精准描述,而0.3,0.6,0.9这些数字都不了精准描述)
    sorted_set 底层存储还是基于set结构的,因此value数据不能重复,如果重复添加相同的数据,score值将被反复覆盖,保留最后一次修改的结果

在这里插入图片描述

key基本操作

-删除指定的key
    del key

-获取key的存在
    exists key
    
-获取key的类型
    type key

在这里插入图片描述

-为指定的key设置有效值
    expire key seconds
    pexpire key milliseconds

-获取key的有效时间
    ttl key
    pttl key

-设置key从时效性转换到永久性
    persist key

在这里插入图片描述

-查询key操作
    keys pattern
    
    查询模式规则
    * 匹配任意数量的任意符号    ? 匹配一个任意字符    [] 匹配一个指定符号

在这里插入图片描述

-修改key的名字
    rename key newkey
    renamenx key newkey  (如果newkey存在则不做操作)

-对key进行排序
    sort key(默认升序)
    
    redis支持对 hash、list,set,sorted set元素(元素可以为数值与字符串)的排序,string不行。

db基本操作

redis共有16个数据库编号从0~15,通常默认打开的是0号数据库。

-切换数据库
    select index
    
-退出
    quit

-查询数据库是否连通
    ping  (连通返回 pong)
    
-打印指定的字符串
    echo message

在这里插入图片描述

-数据移动
    move key db
    (如果移动的key在指定数据库中存在则移动失败)

-获取当前数据库key的个数
    dbsize

-数据删除
    flushdb    (删除当前数据库的数据)
    flushall   (删除全部数据库的数据)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值