logo 范 · 拾光录
网址收集 关于作者 Github Gitee
杂文随笔4
Hexo博客:基础使用Hexo博客:Next主题Hexo博客:Next进阶使用Hexo博客:Next高级配置
前端编程3
前端基础知识16
UniApp15
Vue框架19
Java编程7
Java基础知识14
SpringBoot31
SpringMVC14
MyBatis8
SpringCloud15
RocketMQ1
MyCat1
数据库4
MySQL6
Redis7
MongoDB10
H21
Java技术栈4
知识整理分布式锁的实现方案MySQL事务MySQL的锁
软件工具箱14
IDEAGitMavenGradleNginx安装Nginx配置JMeter压测OllamaPicGoRustFSVSCodeDockerObsidianObs录制
Linux知识11
树莓派安装及使用ArchLinux:常用软件ArchLinux:基础系统安装ArchLinux:深度优化ArchLInux:图形化界面安装ArchLinux:Nirifrp内网穿透Jar启动脚本Linux常用命令VirtualBox安装CentOSVirtualBox安装Ubuntu
Python编程6
Python基础知识Python语法yolo目标检测OpenCV的使用及树莓派平台condauv
创意设计2
Blender:入门知识UI设计基础知识
AI相关9
Claude CodeHermes AgentOpenAI基本使用OpenAI工具调用OpenAI记忆管理OpenAI推理执行OpenAI开发框架Langchainllama.cpp

数据库

Redis默认有16个数据库

默认使用的是第0个,可以使用select进行切换

命令

# 查看数据库大小
dbsize

# 存
set key value

# 取
get key

# 查看所有key
keys *

# 清空当前数据库
flushdb

# 清空所有数据库
flushall

# 设置key的过期时间,单位秒
expire key 10

# 查看当前key的剩余时间
ttl key

# 查看key的数据类型
type key

# 查询是否存在key
exists key

# 给key的value追加内容
append key value

# 查询key的value长度
strlen key

# 自增(加1)
incr key

# 自增(带步长,可负反向操作)
incrby key 10

# 自减(减1)
decr key

# 自减(带步长,可负反向操作)
decrby key 10

数据类型

String

注意一个键值最大存储为512M

# 获取字符串指定范围数据
getrange key start end
如:getrange key 2 -1 # 第3个字符到最后

# 替换
setrange key offset value

setex(set with expire)   # 设置过期时间
setnx(set if not exist)  # 不存在设置(分布式常用)

# 批量存
mset k1 v1 k2 v2 ...
# 批量取
mget k1 k2 ...

使用场景:

List

可以把List做成栈、队列、阻塞队列

所有的List命令都是l开头

# 将一个或多个值插到列表头部
lpush key value
# 将一个或多个值插到列表尾部
rpush key value

# 通过区间获取值
lrange key 0 -1 # -1最后一个

# 移除头部
lpop key

# 移除尾部
rpop key

# 获取第某个值
lindex key index

# 查询列表长度
llen key

# 移除list集合中指定个数的value,注意list是可以重复的
lrem key length name

消息队列(lpush rpop 先进先出),栈(lpush lpop 先进后出)

Set

Set中的值是不能重复、无序的

# 存
sadd key value

# 查看指定set的所有值
smembers key

# 判断某一个值是否在Set中
sismember key value

# 获取元素个数
scard key

# 移除
srem key value

# 获取随机不重复
srandmember key 1 # 可指定个数

# 随机移除
spop key

# 差集(查询key1在key2中没有的值)
sdiff key1 key2

# 交集(查询key1在key2中有的值)
sinter key1 key2

# 并集(查询key1和key2中的所有值)
sunion key1 key2

Zset

有序不可重复集合

Hash

hash是一个键值对集合,是一个String类型的field和value的映射表,适用于存储对象

# 存
hset item name "tom"
# 取
hget item name

Geospatial

地理位置,在Redis3.2版本推出

# 添加
geoadd china:city 116.40 39.90 beijing
# 查询
geopos china:city beijing
# 查询两个位置距离
geodist china:city beijing shanghai
# 附近的人
georadius china:city 110 30 100 km

事务

Redis单条命令保存有原子性,但是事物不保证原子性

Redis的事务:

注意:命令是顺序执行的

放弃事务

multi # 开启事务
set k1 v1
set k2 v2
discard # 取消事务

Redis事务没有隔离级别概念,如开启事务后执行,只要不是命令有误,那么入队的命令都会执行,即使中途出现错误,后面的命令依然会执行

实现乐观锁

Redis中有watch监视功能,监视一个字段后开启事务进行操作,如果提交事务发现监视字段发生了变化,那么事务就会提交失败

数据库
命令
数据类型
String
List
Set
Zset
Hash
Geospatial
事务
实现乐观锁