Redis学习笔记—数据类型及常用命令

本文深入解析Redis五种主要数据类型:字符串、哈希、列表、集合和有序集合的特点与应用场景,涵盖基本概念、优势及常见命令操作,助力高效数据管理和处理。

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

Redis 学习笔记

一、简介

Redis本质上是一个Key-Value类型的内存数据库,很像memcached,整个数据库在内存当中进行操作,定期通过异步操作把数据库数 据写到硬盘上进行保存。因为是纯内存操作,Redis的性能非常出色,每秒可以处理超过 10万次读写操作,是已知性能快的KeyValue DB。 Redis的出色之处不仅仅是性能,Redis大的魅力是支持保存多种数据结构,此外单个value的大限制是1GB,不像 memcached只能保存1MB的数据,因此Redis可以用来实现很多有用的功能。默认16个数据库,类似数组下标是从零开始,初始默认 使用零号库,统一的密码管理,16个库都是同样密码,要么都连上要么一个也连接不上,redis默认端口是6379

优点:

  • 速度快:因为数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1)
  • 持久化:定期通过异步操作把数据库数据写到硬盘上进行保存
  • 支持丰富数据类型:支持string,list,set,sorted set,hash 支持事务:操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行
  • 丰富的特性:可用于缓存,消息,按key设置过期时间,过期后将会自动删除

二、安装

redis下载地址

redis可视化管理工具百度网盘

三、redis 数据类型及常用命令

  1. 字符串类型 string
  • 介绍

    • string是redis基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value
    • string类型是二进制安全的。意思是redis的string可以存储任何数据。如图片或者序列化的对象
  • 常用命令

    • 赋值命令:set key value

      set age 1			//ok
      

      如果key不存在创建该key并赋值,返回“OK”

      如果该Key已经存在,则覆盖其原有值。返回"OK"

    • 取值命令:get key

      get age   			//1
      

      获取指定 Key 的 Value

      如果 key 存在返回对应的 value

      如果该 Key 不存在,返回 nil

    • 数字递增:incr key

      incr age				//2
      

      将指定 Key 的 Value 原子性的递增1。

      如果该 Key 不存在,其初始值为0,在 incr 之后其值为1

    • 数字递减:decr key

      decr age			//1
      

      将指定 Key 的 Value 原子性的递减1

      如果该 Key 不存在,其初始值为0,在 decr 之后其值为-1。

      操作返回递减后的 value值。

    • 增加指定的整数:incrby key increment

      incrby age 10			//11
      

      将指定Key的Value原子性的增加increment。

      如果该Key不存在,其初始值为0,在incrby之后其值为increment。

      操作成 功则返回增加后的value值。

    • 减少指定的整数:decrby key decrement

      decrby age 10		//1
      

      将指定Key的Value原子性的减少decrement。

      如果该Key不存在,其初始值为0,在decrby之后其值为-decrement。

      操 作成功则返回减少后的value值。

    • 向尾部追加值:append key value

      append age xhb		//1xhb
      

      如果该Key已经存在,APPEND命令将参数Value的数据追加到已存在Value的末尾。

      如果该Key不存在,APPEND命令将 会创建一个新的Key/Value。

      返回追加后Value的字符串长度。


  1. 哈希类型 hash
  • 介绍

    • redis的hash 是一个键值对集合
    • redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象;
    • 类似Java里面的Map<String,Object>
  • 常用命令

    • 赋值命令:hset key field value

      hset userinfo name xhb		//1
      

      为指定的 Key (对象/集合)添加属性并设置值

      如果 Key 不存在,该命令将创建新 Key (对象/集合) 以用于存储参数中的 属性对

      如果参数中的 Field(属性) 在该 Key 中已经存在,则用新值覆盖其原有值。

      返回1表示新的 Field(属性) 被设置了新值, 0表示Field已经存在,用新值覆盖原有值

    • 取值命令:hget key field

      hget user name			//xhb
      

      返回指定 Key (对象/集合)中指定 Field(属性) 的关联值,

      如果参数中的 Key 或 Field 不存在,返回nil

    • 删除字段 :hdel key field [field …]

      hdel userinfo name			//1
      

      从指定Key (对象/集合)的Hashes Value中删除参数中指定的多个字段

      如果不存在的字段将被忽略,返回实际删除的 Field数量。

      如果Key不存在,则将其视为空Hashes,并返回0。

    • 设置多个字段的值:hmset key field value [field value …]

      hmset userinfo name xhb age 20 		//ok
      

      逐对依次设置参数中给出的Field/Value对。

      如果其中某个Field已经存在,则用新值覆盖原有值

      如果Key (对象/集合)不 存在,则创建新Key (对象/集合),同时设定参数中的Field/Value。

    • 获取多个字段的值:hmget key field [field …]

      hmget userinfo name age		//xhb 20
      

      获取和参数中指定 Fields 关联的一组 Values,其返回顺序等同于 Fields 的请求顺序。

      如果请求的 Field 不存在,其值返 回null。

    • 获取key中的所有field :hkeys key

      hkeys userinfo		//name age
      
    • 获取key中的所有field 的value:hvals key

      hvals userinfo		//xhb 20
      

      没有相关的key,会返回(empty list or set)


  1. **列表类型 list **
  • 介绍

    • Redis的list是每个子元素都是String类型的双向链表,可以通过push和pop操作从列表的头部或者尾部添加或者删除元素,这样 List即可以作为栈, 也可以作为队列。
    • 使用List结构,我们可以轻松地实现新消息排行等功能。
  • 常用命令

    • 向列表头部添加元素:lpush key value [value …]

      lpush list 1 2 3 4 5		//5
      

      向列表左边添加元素。

      如果该 Key 不存在,创建一个与该 Key 关联的空链表,之后再将数据从链表的头部插入。

      操作成 功则返回插入后链表中元素的数量。

    • 向列表尾部添加元素:rpush key value [value …]

      rpush list 6 7		//7
      

      向列表右边添加元素。

      如果该 Key 不存在,创建一个与该 Key 关联的空链表,之后再将数据从链表的尾部插入。

      操作成 功则返回插入后链表中元素的数量。

    • 获得列表:lrange key start stop

      lrange list 0 -1		//5 4 3 2 1 6 7(全部)
      

      该命令的参数start和end都是0-based。

      即0表示链表头部(leftmost)的第一个元素。

      其中start的值也可以为负值,-1将表 示链表中的后一个元素,即尾部元素,-2表示倒数第二个并以此类推。

      该命令在获取元素时,start和end位置上的元素也会被 取出。

      如果start的值大于链表中元素的数量,空链表将会被返回。

      如果end的值大于元素的数量,该命令则获取从start(包括 start)开始,链表中剩余的所有元素。

      注:Redis的列表起始索引为0。

      显然,LRANGE numbers 0 -1 可以获取列表中的所有元 素。返回指定范围内元素的列表。

    • 列表进行修剪:ltrim KEY_NAME START STOP

      ltrim list 0 5 			//ok
      lrange list 0 -1 		//5 4 3 2 1 6
      

      让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。

      下标 0 表示列表头部第一个元素,以 1 表示列 表头部的第二个元素,以此类推。

      你也可以使用负数下标,以 -1 表示列表尾部的后一个元素, -2 表示列表的倒数第二个元 素,以此类推。

    • 元素从左边出栈:lpop key

      lpop list 			//5
      lrange list 0 -1	//4 3 2 1 6
      

      返回并弹出指定 Key 关联的链表中的第一个元素,即头部元素。

      如果该 Key 不存在,返回 nil。

      LPOP 命令执行两步操 作:

      ​ 第一步是将列表左边的元素从列表中移除,

      ​ 第二步是返回被移除的元素值。

    • 元素从右边出栈:rpop key

      rpop list    //4
      lrange list 0 -1	//4 3 2 1
      

      返回并弹出指定 Key 关联的链表中的后一个元素,即头部元素。

      如果该 Key 不存在,返回 nil。

      RPOP 命令执行两步操 作:

      ​ 第一步是将列表右边的元素从列表中移除

      ​ 第二步是返回被移除的元素值。

    • 获取列表中元素的个数:llen key

      llen list		//4
      

      返回指定 Key 关联的链表中元素的数量,如果该 Key 不存在,则返回 0。

      如果与该 Key 关联的 Value 的类型不是链表, 则返回相关的错误信息

    • 获取指定索引的元素值:lindex key index

      lindex list 1		//3
      

      该命令将返回链表中指定位置(index)的元素

      index 是0-based,表示从头部位置开始第 index 的元素,

      如果 index 为 -1,表示尾部元素。如果与该 Key 关联的不是链表,该命令将返回相关的错误信息。

      如果超出 index 返回这返回 nil。


  1. 集合类型 set
  • 介绍

    • redis的set是string类型的无序集合。它是通过HashTable实现的
  • 常用命令

    • 增加元素:sadd key member [member …]

      sadd set 1 2 3			//3
      

      如果在插入的过程用,参数中有的成员在Set中已经存在,该成员将被忽略,而其它成员仍将会被正常插入。

      如果执行该 命令之前,该Key并不存在,该命令将会创建一个新的Set,此后再将参数中的成员陆续插入。

      返回实际插入的成员数量。

    • 获得集合中元素个数:scard key

      scard set     	//3
      

      返回Set中成员的数量,如果该Key并不存在,返回0。

    • 判断元素是否在集合中:sismember key member

      sismember set 3		//1
      

      判断参数中指定成员是否已经存在于与Key相关联的Set集合中。

      返回1表示已经存在,0表示不存在,或该Key本身并不 存在。

    • 获得集合中的所有元素:smembers key

      smembers set 		//1 2 3
      

      获取与该Key关联的Set中所有的成员。如果ket不存在返回空集合

    • 从集合中弹出一个元素:spop key

      spop set		//3
      

      随机的移除并返回Set中的某一成员。

      由于Set中元素的布局不受外部控制,因此无法像List那样确定哪个元素位于Set的 头部或者尾部。

      返回移除的成员,如果该Key并不存在,则返回nil。

    • 删除元素:srem key member [member …]

      srem set 1		//1
      

      从与Key关联的Set中删除参数中指定的成员,不存在的参数成员将被忽略

      如果该Key并不存在,将视为空Set处理。

      返 回从Set中实际移除的成员数量,如果没有则返回0。

    • 随机获得集合中的元素:srandmember key [count]

      srandmember set			//2
      

      和SPOP一样,随机的返回Set中的一个成员,不同的是该命令并不会删除返回的成员。

      还可以传递count参数来一次随机 获得多个元素,根据count的正负不同,具体表现也不同。

      当count 为正数时,SRANDMEMBER 会随机从集合里获得count个 不重复的元素

      如果count的值大于集合中的元素个数,则SRANDMEMBER 会返回集合中的全部元素。

      当count为负数时, SRANDMEMBER 会随机从集合里获得|count|个的元素,

      如果|count|大与集合中的元素,就会返回全部元素不够的以重复元 素补齐,

      如果key不存在则返回nil。


  1. 有序集合类型 sortedset
  • 介绍

    • redis的sortedset和 set 一样也是string类型元素的集合;
    • 不同的是每个元素都会关联一个double类型的分数;
    • redis正是通过分数来为集合中的成员进行从小到大的排序。sortedset的成员是唯一的,但分数(score)却可以重复;
  • 常用命令

    • 增加元素:zadd key score member [score] [member]

      zadd zsort 1 a 2 b 3 c		//3
      

      添加参数中指定的所有成员及其分数到指定key的Sorted Set中,在该命令中我们可以指定多组score/member作为参 数。

      如果在添加时参数中的某一成员已经存在,该命令将更新此成员的分数为新值,同时再将该成员基于新值重新排序。

      如果 键不存在,该命令将为该键创建一个新的Sorted Set Value,并将score/member对插入其中。

      如果该键已经存在,但是与其关 联的Value不是Sorted Set类型,相关的错误信息将被返回。

      添加成功返回实际插入的成员数量。

    • 获得集合中元素个数:zcard key

      zcard zsort			//3
      

      返回Sorted Set中的成员数量,如果该Key不存在,返回0。

    • 获得指定分数范围内的元素个数:zcount key min max

      zcount zsort 1 3			//3
      

      该命令用于获取分数(score)在min和max之间的成员数量。

      (min=<score<=max)如果加上了“(”着表明是开区间例如 zcount key (min max 则 表示

      (min<score=<max)c同理zcount key min (max 则表明(min=<score<max) 返回指定返回数 量。

    • 获得元素的分数:zscore key member

      zscore zsort a			//1	
      

      如果该成员存在,以字符串的形式返回其分数,否则返回nil。

    • 增加某个元素的分数:zincrby key increment member

      zincrby zsort 10 a		//11	
      

      该命令将为指定Key中的指定成员增加指定的分数。

      如果成员不存在,该命令将添加该成员并假设其初始分数为0,此后 再将其分数加上increment。

      如果Key不存在,该命令将创建该Key及其关联的Sorted Set,并包含参数指定的成员,其分数为 increment参数。

      如果与该Key关联的不是Sorted Set类型,相关的错误信息将被返回。如果不报错则以串形式表示的新分数。

    • 获得排名在某个范围的元素列表(分数从小到大):zrange key start stop [WITHSCORES]

      zrange zsort 0 -1			// b c a
      

      该命令返回顺序在参数start和stop指定范围内的成员,这里start和stop参数都是0-based,即0表示第一个成员,-1表示 后一个成员。

      如果start大于该Sorted Set中的大索引值,或start > stop,此时一个空集合将被返回。如果stop大于大索 引值,该命令将返回从start到集合的后一个成员。

      如果命令中带有可选参数WITHSCORES选项,该命令在返回的结果中将包含 每个成员的分数值,如value1,score1,value2,score2…。

    • 获得排名在某个范围的元素列表(元素分数从大到小排序):zrevrange key start stop [WITHSCORES]

      zrevrange zsort 0 -1		//a b c
      

      该命令的功能和ZRANGE基本相同,唯一的差别在于该命令是通过反向排序获取指定位置的成员,即从高到低的顺序。

      如 果成员具有相同的分数,则按降序字典顺序排序。

    • 获得指定分数范围的元素(分数从小到大):zrangebyscore key min max [WITHSCORES] [LIMIT offset count]

      zrangebyscore zsort 0 12				//b c a		
      

      该命令将返回分数在min和max之间的所有成员,即满足表达式min <= score <= max的成员,

      其中返回的成员是按照其 分数从低到高的顺序返回,如果成员具有相同的分数,则按成员的字典顺序返回。

      可选参数LIMIT用于限制返回成员的数量范 围。

      可选参数offset表示从符合条件的第offset个成员开始返回,同时返回count个成员。

      可选参数WITHSCORES的含义参照 ZRANGE中该选项的说明。

      *后需要说明的是参数中min和max的规则可参照命令ZCOUNT。

      **(0 12 😗*大于等于0 小于12

      **0 12)😗*大于 0 小于等12

    • 获得指定分数范围的元素(元素分数从大到小排序):zrevrangebyscore key max min [WITHSCORES] [LIMIT offset count]

      zrevrangebyscore zsort 12 0					// a c b
      

      该命令除了排序方式是基于从高到低的分数排序之外,其它功能和参数含义均与ZRANGEBYSCORE相同。

      需要注意的是 该命令中的min和max参数的顺序和ZRANGEBYSCORE命令是相反的。

    • 获得元素的排名:zrank key member

      zrank zsort a			//2
      

      Sorted Set中的成员都是按照分数从低到高的顺序存储,该命令将返回参数中指定成员的位置值,其中0表示第一个成 员,它是Sorted Set中分数低的成员。

      如果该成员存在,则返回它的位置索引值。否则返回nil。

    • 删除一个或多个元素:zrem key member [member …]

      zrem zsort c		//1	
      

      该命令将移除参数中指定的成员,其中不存在的成员将被忽略。

      如果与该Key关联的Value不是Sorted Set,相应的错误 信息将被返回。

      如果操作成功则返回实际被删除的成员数量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值