Redis五大数据类型
一、16个数据库
redis默认使用第0个数据库
1、使用select切换数据库:select 3
2、查看当前数据库所有的key:keys *
3、清除当前数据库数据:flushdb
4、清除全部数据库数据:flushall
二、五大数据类型
redis-key
①判断键是否存在: exists name
②移除键:move name 1
③给键设置过期时间:expire name 10
④查看键值类型:type name
1、String(字符串)
①追加:append name 'hello world'
②获取字符串的长度:strlen name
③自增、自减
④截取字符串:getrange name 0 2
⑤替换字符串
⑥setex(set with expire)设置过期时间
⑦setnx(set if not exist) 不存在则创建
⑧mset:同时设置多个值
mget:同时获取多个值
msetnx:不存在则创建,存在则黄建失败
⑨getset:先get后set
string类型的使用场景(value除了是我们的字符串,还可以是数字):计数器、统计数量
2、List (列表)
在redis中,我们可以把list完成栈,队列、阻塞队列
所有的list命令都是l开头的,redis命令不区分大小写
①lpush:往左插入
rpush:往右插入
②lpop:移除列表第一个元素
rpop:移除列表最后一个元素
③lidex
④llen:获取列表的长度
⑤lrem:移除list中指定个数的value
⑥ltrim:截取list
⑦rpoplpush
⑧lset:更新列表中指定下标的数据
⑨linsert:将某个具体的value插入到列表中某个元素的前面后者后面
总结:
实际上是一个链表
如果key不存在,创建新的链表
如果key存在,新增内容
如果移除了所有值,空链表,也代表不存在
在两边插入或者改动值,效率最高,中间元素相对来说效率会低一些
3、Set(集合)
set中的值是不能重复的:无序不重合
①添加值、查看值、成员判断、集合元素个数
②移除
③随机获取/删除集合中某一个元素
④将一个集合中的元素移动到另一个元素中
⑤差集、交集、并集
微博,B站,共同关注(并集)
微博:A用户将所有关注的人放在一个集合中,将他的粉丝也放在一个集合中(共同关注、共同爱好、推荐好友)
4、Hash(哈希)
map集合,key-map集合,本质和Srting类型没有太大的区别,还是一个简单的key-value
①添加值/获取值
②删除值
③获取长度:hlen
④判断字段存在
⑤只获取所有字段
只获取所有value
应用:变更的数据,user、name、age,尤其是用户用户信息之类的,经常变动的信息。
hash更适合对象的存储,String更合适字符串的存储
5、Zset(有序集合)
①添加、查看
②排序
③删除
④获取有序集合中的个数
⑤获取指定区间的成员数量
三、事物
1、基本原理
redis事物本质:一组命令的集合。一个事物中所有的命令都会被序列化,在事务执行过程中,按照顺序执行
一次性、顺序性、排他性 执行一些列的命令。
所以redis事物没有隔离级别的概念
所有命令在事物中,并没有直接被执行,只有发起执行命令的时候才会执行
redis单条命令保证原子性的,但是事物不保证原子性
2、步骤
redis的事物:开启事物(multi)、命令入队、执行事物(exec)
3、演示
正常执行事物:
取消事物:
编译型异常(代码有问题,命令有错误),事物中所有的命令都不会被执行
运行是异常(I/O),如果事物队列中存在语法性,那么执行命令的时候,其他命令是可以正常那个执行的,错误命令抛异常
四、redis实现乐观锁
1、监控(Watch)(面试常问)
悲观锁:很悲观,认为什么时候都会出问题,无论做什么都会加锁
乐观锁:很乐观,认为什么时候都不会出现错误,所以不会加锁。更新数据的时候去判断一下在此期间是否有人修改过这个数据(获取version,更新的时候比较version)
2、redis的监视测试
正常执行成功:
测试多线程修改值,,使用watch可以当做redis的乐观锁操作:
如果修改失败,先解锁,获取最新的值
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现