Redis基础学习

Redis是一种开源的内存数据结构存储系统,常用于数据库、缓存和消息中间件。它支持字符串、哈希、列表、集合和有序集合等数据类型,提供高效的数据操作。例如,字符串用于计数、缓存,哈希适合存储用户信息,列表可实现消息队列,集合用于存储唯一元素,有序集合则可用于成绩排名或粉丝列表排序。

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

Redis基础学习

Redis简介

缓存定义: 缓存是一个高速数据交换的存储器,使用它还可以快速的访问和操作数据。

Redis is an open source (BSD licensed),in-memory data structure store,used as a database,cache ,and message broker.这是Redis官网对Redis的介绍,翻译为:Redis是一个开源的内存中的数据结构存储系统,它可以用作:数据库、缓存和消息中间件、

Redis官网https://redis.io

Redis基于内存,因此具有极高的读写效率,并且支持多种数据持久化方式,使得数据能够在断电等异常下得到保护。Redis还具有强大的消息队列功能,可以广泛应用于Web应用、缓存系统、消息队列系统等场景。

Redis数据类型

Redis存储的是key-value结构的数据

  • 字符串 String
  • 哈希 hash
  • 列表 list
  • 集合 set
  • 有序集合 sorted set / zset
数据类型说明主要方法使用场景
StringString是Redis中最基本、最常用的数据类型,String类型是二进制安全的,一个key对应一个Value。它可以存储任何格式的数据,如:数字、字符串、图片、或者序列化的对象等set、get、decr、incr、mget计数器、数据缓存、session缓存
HashHash是一个String类型的field和Value的映射表,相比于String更节省空间,特别适用于存储对象hset、hget、hmget缓存用户信息
ListList是简单的字符串列表,按照插入顺序排列排列,可以添加一个元素到列表头部(左边)或尾部(右边)lpush、rpush、lpop、rpop、llen、标签、消息队列、等
SetSet是String类型的无序集合,其实也是通过哈希表实现的。集合成员是唯一的,会自动去重重复的成员sadd、scard、sismember、zrem共同好友等
ZSetZSet和Set一样也是String类型元素的集合,并且不允许出现重复的成员。区别在于:ZSet的每个元素都会关联一个double类型的分数,并通过分数为集合中的成员进行排序Zadd、zcard、zrange排行榜、关注度等

1.字符串类型使用(String)

set [key] [value] #添加key-value字符串类型数据
get [key] #通过key查询value
strlen [key] #通过key查询value字符串的长度
set [key] [val] ex [过期时间] #通过ex可以设置过期时间

在这里插入图片描述
2.字典类型(Hash):
字典类型(Hash)有被称为散列类型或者是哈希表类型,它是将一个键值(key)和一个特殊的“哈希表”关联起来,这个“哈希表”包含两列数据:字段和值,他就相当于Java中的Map<String,Map<String,String>>结构。

hset [key] [field] [value] #添加数据
hget [key] [field] #获取字典中key 对应field的value

在这里插入图片描述
通常情况下地点类型会使用数组的方式存储相关的数据,但发生哈希冲突时才会使用链表的结构来存储数据。

3.列表类型(List):
列表类型(List)是一个使用链表结构存储的有序结构,它的元素插入会按照先后顺序存储到链表结构中,因此它的元素操作(插入和删除)时间复杂度为O(1),所以相对来说速度还是比较快的,但是查询时间复杂度为O(n),因此查询可能会比较慢。

lpush mylist 1 2 3 #往列表左边开始添加元素
lpop mylist # 往列表左边删除元素

在这里插入图片描述
列表的典型使用场景有以下两个:

  • 消息队列:列表类型可以使用rpush实现先进先出的功能,同时又可以使用lpop轻松弹出并删除第一个元素,所以列表类型可以用来实现消息队列;
  • 文章列表:对于博客站点来说,当用户和文章都越来越多是,为了加快程序响应速度,我们可以把用户自己的文章存入到List中,因为List是有序的结构,所以这样又可以完美实现分页功能,从而加快程序的响应速度。

4.集合类型(Set):
集合类型Set是无序并唯一的键值集合,类似于java中的Set。

sadd myset zhangsan lisi # 往Set集合中插入数据
smembers myset # 查看myset中所有数据

在这里插入图片描述

  • 微博关注我的人和我关注的人都适用集合存储,可以保证人员不会重复;
  • 中奖人信息也适用集合类型存储,这样可以保证一个人不会重复中奖。

集合类型(Set)和列表类型(List):

  • 列表类型可以存储重复元素,集合类型只能存储非重复元素;
  • 列表是按照元素的先后顺序存储元素的,而集合则是无序方式存储元素的。

有序集合类型(Sorted Set):
有序集合类型(Sorted Set)相比于集合类型多了一个排序属性score(分值),对于有序集合ZSet来说,每个存储元素相当于有两个值组成 ,一个是有序结合的元素值,一个是排序值。有序集合的存储元素值不能重复,但分值可以重复的。

zadd myZSet 10 java 9 c++ 8 golang #往有序集合插入数据并制定分值大小(分值是double类型的)
zrange myZSet 0 -1 #查询有序集合所有数据

在这里插入图片描述
有序集合经典使用场景:

  • 学生成绩排名;
  • 粉丝列表,根据关注的先后时间排序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值