Redis学习笔记-基础篇

本文深入探讨Redis的特性,包括数据持久化、丰富的数据类型、高性能读写速度以及原子性和事务支持。详细介绍了Redis支持的五种基本数据类型:String、Hash、List、Set和Sorted Set的操作和应用场景。

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

Reids的特点

  • Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
  • Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
  • Redis支持数据的备份,即master-slave模式的数据备份。

Redis的优势

  • 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
  • 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
  • 原子 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。
  • 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。

Redis基本数据类型

1.redis支持五种基本数据类型:

  • string(字符串)
  • hash(哈希)
  • list(列表)
  • set(集合)
  • zset(sort set:有序集合)

String(字符串)

string 是 redis 最基本的类型,一个 key 对应一个 value。
string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据。比如jpg图片或者序列化的对象。
string 类型是 Redis 最基本的数据类型,string 类型的值最大能存储 512MB。

基本操作
  • 添加/修改数据
set key value
  • 获取数据
get key
  • 删除数据
del key
实例

在这里插入图片描述
上面实例使用到了Redis的set和get命令,键为name,对应的值为tom

我们还可以将用户主键和属性名作为key,例如:
在这里插入图片描述
或者也可以使用json的格式来存储,例如:
在这里插入图片描述

扩展操作
  • 设置数值数据增加指定范围的值
incr key 					一次增加1
incrby key increment		增加给定数值	
incrbyfloat key increment	增加float值
  • 设置数值数据减少指定范围的值
dcer key					一次减少1
decr key increment			减少给定值
  • 设置数据具有指定周期(设置多久存活,时间到了就删除)
setex key seconds value			秒
psetex key milliseconds value	毫秒
实例

在这里插入图片描述
在这里插入图片描述
如果类型不同则会报错
在这里插入图片描述
10秒后自动清除,注意:如果设置消除时间后再一次set name,则时间会消失

Hash(哈希)

Redis hash 是一个键值(key=>value)对集合。
Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。
在这里插入图片描述

底层使用哈希结构实现数据存储

Hash存储的结构优化:

  • 如过filed数量较少,存储结构优化为类数组结构
  • 如过filed数量较多,存储结构使用HashMap结构
基本操作
  • 添加/修改数据
hset key filed value
  • 获取数据
hget key filed
hgetall key
  • 删除数据
hdel key filed1 [filed2]
批量操作
  • 添加/修改多个数据
hmset key field1 value field2 value...
  • 获取多个数据
hmget key field1 field2 ...
  • 获取哈希表中字段的数量
hlen key
  • 获取哈希表中是否存在指定的字段
hexists key field
实例

在这里插入图片描述
如果存在指定字段则返回1,否则返回0
在这里插入图片描述

扩展操作
  • 获取哈希表中所有的字段名或字段值
hkeys key
hvals key
  • 设置指定字段的数值数据增加指定范围的值
hincrby key  field increment
hincrbyfloat key field increment
实例

获取表中所有key或者所有value
在这里插入图片描述

List(列表)

  • Redis列表是简单的字符串列表,按照插入顺序排序(查询效率慢,内部为链表)。你可以添加一个元素到列表的头部(左边)或者尾部(右边)
  • 一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。
基本操作
  • 添加/修改数据
lpush key value1 [value2]...	从左边添加
rpush key value1 [value2]...	从右边添加
  • 获取数据
lrange key start stop
lindex key index
llen key
  • 获取并移除数据
lpop key	从左边获取并移除
rpop key	从右边获取并移除
实例

在这里插入图片描述
使用list的时候需要注意插入的顺序
在这里插入图片描述
如果想一次性查询所有,可以以相反方向查询
在这里插入图片描述
获取长度或者使用索引查询
在这里插入图片描述
结合lpush,rpush和lpop,rpop可以实现栈(先进后出)
在这里插入图片描述

扩展操作
  • 规定时间内获取并移除数据(以秒为单位)
blpop key1 [key2]... timeout
brpop key1 [key2]... timeout
  • 移除指定数据
lrem key count value	count:移除多少位 value:移除的value
实例

b代表阻塞,当使用blpop或brpop时,如果list中存在数据,则立即取出,如果list中没有任何东西,那么他会等待设置的秒数,在此时间内如果list中有新东西进入,则他会获取里面的东西,
在这里插入图片描述
他还可以同时等待多个list,从a,b,c依次获取数据,哪个先有数据则取哪个
在这里插入图片描述
删除指定的value
在这里插入图片描述

set(集合)

  • Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。
  • Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。
  • 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。
    在这里插入图片描述
    它相当于是使用了hash存储,但是将field当成了value使用,而value只能为空
    Hash的存储效率很高,并且这样设计可以使用到field不能重复的特点,重复则覆盖,这样既继承了存储效率高的特点,也继承了不能重复的特点
基本操作
  • 添加数据
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
实例

取出后不删除
在这里插入图片描述
取出后删除
在这里插入图片描述
交,并差集实例:
需注意,差集存在顺序关系
在这里插入图片描述

sorted_set(有序集合)

  • Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。
  • 不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
  • 有序集合的成员是唯一的,但分数(score)却可以重复。通过score来进行排序
  • 集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。
    在这里插入图片描述
基本操作
  • 添加数据
zadd key score1 member1 [score2 member2]
  • 获取全部数据
zrange key start stop [WITHSCORES]
zrevrange key start stop [WITHSCORES]
  • 删除数据
zrem key member [member..]
  • 按条件获取数据
zrangebyscore key min max [WITHSCORES] [LIMIT offset count]
zrevrangebyscore key max min [WITHSCORES]
  • 条件删除数据
zremrangebyrank key start stop
zremrangebyscore key min max
  • 获取集合数据总量
zcard key
zcount key min max
  • 集合交,并操作
zinterstore destination numkeys key [key...] [WEIGHTS weight] [AGGREGATE SUM|MIN|MAX]
zunionstore destination numkeys key [key...] [WEIGHTS weight] [AGGREGATE SUM|MIN|MAX]
实例

以学生成绩排名,虽然存储在score上,但是不要把它认为是数据
在这里插入图片描述
withscores表示查询结果连同score一起展示
在这里插入图片描述
根据限定范围的score查询
在这里插入图片描述
使用limit的情况,offset:偏移量,count:数量
在这里插入图片描述
获取sorted_set数量
在这里插入图片描述
求交集时它会先将找到共有的数据,然后再将其score通过AGGREGATE去处理,默认相加
在这里插入图片描述

扩展操作
  • 获取数据对应的索引(排名)
zrank key member
zrevrank key member
  • score值获取与修改
zscore key member
zincrby key increment member
实例

可用于一些排行榜之类
在这里插入图片描述

Redis通用命令

key通用指令

key基本操作
  • 删除指定key
del key
  • 获取key是否存在
exists key
  • 获取key的类型
type key
key扩展操作
时效性控制
  • 为指定的key设置有效期
expire key seconds
pexpire key milliseconds
expireat key timestamp
pexpireat key milliseconds-timestamp
  • 获取key的有效时间
ttl key
pttl key
  • 切换key从时效性转换为永久性
persist key
实例

如果一个key没有设置有效时间,则ttl返回-1,如果一个key时间有效时间过了则返回-2,如果设置了有效期,则返回有效时长
在这里插入图片描述

查询模式
  • 查询key
keys pattern
查询模式规则
  • *匹配任意数量任意符号
  • ?匹配一个任意字符
  • []匹配一个指定符号
    在这里插入图片描述
实例

keys *查询所有的key
在这里插入图片描述
在这里插入图片描述

key其他操作
  • 为key改名
rename key newkey		newkey存在会覆盖
renamenx key newkey		newkey存在会报错
  • 对多有key排序
sort
  • 其他key通用操作
help @generic
实例

指令help
在这里插入图片描述
sort是排序key里的元素,不会修改原有数据
在这里插入图片描述

数据库通用指令

  • reids为每个服务提供有16个数据库,编号从1-15
  • 没个数据库之间的数据相互独立
    在这里插入图片描述
DB基本操作

-切换数据库

select index
  • 其他操作
quit 
ping
echo message
实例

在这里插入图片描述
在这里插入图片描述
ping有响应则为接通状态
在这里插入图片描述

DB相关操作
  • 数据移动
move key db
  • 数据清除(删除指令慎用)
dbsize			获取当前数据库key数量
flushdb			删除当前库数据
flushall		删除所有库数据
实例

在这里插入图片描述
慎用!慎用!慎用!
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yikai945

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值