Redis从基础命令到核心机制简单介绍

关系型数据库 XxxSQL

有表结构要求 二维表-易于维护

非关系型数据库 NoSQL

只要不是关系型数据库 就是非关系型数据库

数据模型比较简单、灵活性较强、数据库性能较高(运行在内存中)、数据一致性较关系型数据库较低、

  • 键值存储:Redis
  • 列存储:HBase
  • 文档型数据库:MongoDb(json数据格式)
  • 图形数据库

redis

对于给定的key 可以映射复杂环境

单线程的好处是?内存操作极快,高效利用CPU缓存、规避线程上下文切换的CPU损耗,无需加锁保护共享数据,架构简单易维护

常见命令

bash 复制代码
redis-cli [-a 密码] 登录[+密码]

flushdb -- 清空当前库

flushall -- 清空所有数据库

clear -- 清屏

keys * --  查看全部的key

keys 前缀*  -- 查看指定前缀的key

exists key -- 是否存在指定的key

expire key 秒数 -- 设置key过期时间

persist key --  取消key过期时间

select 0-15 --  切换到指定数据库

dbsize -- 查看数据库key的数量

multi -- 开启事务(将几个操作挪到一起执行)

key的设计

  • 唯一性
  • 可读性(key简短名义 太长也会影响内存)
  • 灵活性
  • 时效性(key过期)

数据类型

String

包含字符串类型、数值类型(可以进行加减操作)

命令
bash 复制代码
set key value -- 设置值

get key -- 获取value值

incr key -- 为key对应的value值+1,返回的是加后的值

decr key -- 为key对应的value值-1,返回的是减后的值

del key -- 删除

setex key  秒数 value  -- 设置key过期时间

ttl key -- 查看剩余存活时间  -1表示永远存在  -2表示已过期

setnx key value -- 为key设置值 有值无法放置 返回0,没有值可以设置 返回1

incrby key num -- 为指定key 加几(减为加负数)

mset key value key value .....  -- 批量存入key-value

append key 需要添加的字符串 -- 为指定key的value拼接字符串

setrange key 变更的节点值 变更的字符串 -- 为指定key的value在指定位置替换
hash

大key+小key 取value

命令
bash 复制代码
hset KEY key value  -- 设置值

hsetnx KEY key value -- 设置值 存在返回0不改变原值、不存在创建返回1

hget KEY key -- 获取指定value值

hexists KEY key -- 判断指定KEY中是否包含key

hdel KEY key -- 删除key

del KEY -- 删除KEY

hincrby KEY key 需要添加的值 --  为指定value添加指定的值 (可以添加负数)

hlen KEY -- 判断KEY 中有几个key

hkeys KEY -- 查看KEY对应的所有key 无序的

hvals KEY -- 查看所有value

hgetall KEY -- 查看所有的key value (1.key 2.value 3.key ...)
list

用于用户收藏列表

命令
bash 复制代码
rpush key value1 value2.... -- 设置list key和值

lrange key  0 -1 -- 查看全部key的value

lpop key -- 弹出list最左侧的数据

rpop key -- 弹出list最左侧的数据

llen key -- 获取列表长度

linsert key before/after 参照值 添加的值 -- 在参照值的前/后添加新值

lset key index value -- 根据索引修改数据

lrem key count value -- 在列表中按照指定个数删除数据

ltrim key 开始节点 结束节点 -- 截取为指定范围数据

lindex key index -- 根据指定索引取列表中的数据
set

无序且唯一

应用场景:抽奖

命令
bash 复制代码
sadd key value -- 添加数据

smembers key -- 列出指定set的全部value

srem key value -- 删除指定集合的一个元素

spop key count -- 随机弹出count个数的元素,并从原集合中删除

srandmember key count -- 随机选出count个数的元素,原集合不改变

sdiff key1 key2  -- 取key1 相对 key2 的差集

sdiffstore var key1 key2 -- 返回key1 相对 key2 的差集 存储到var中

sinter key1 key2 -- 取两个集合的交集

sinter var  key1 key2 -- 取两个集合的交集 存储到var中

sunion key1 key2 -- 返回两个集合的并集

sunion var  key1 key2 -- 返回两个集合的并集 存储到var中

smove key1 key2 value -- 把key1 中的value放到key2 中

scard key -- 返回集合中元素个数

sismember key value -- 判断集合中是否包含value
sorted_set(zset)有序集合

应用场景:热搜 排行榜

命令
bash 复制代码
zadd key score column-- 存入分数和名称

zincrby key score column-- 给指定key的value分数偏移

​	例:zincrby key -1 java	

zrange key start end -- 按照分数升序输出column

zrevrange key start end -- 按照分数降序输出column

zrank key column -- 升序返回指定column的排名

zrevrank key column -- 降序返回指定column 的排名

zcard key -- 返回key的元素个数

zrangebyscore key min max -- 按照分数范围升序输出column

zrevrangebyscore key max min  -- 按照分数范围降序输出column

zrem key column -- 删除key中指定的column 

zremrangebyscore key max min -- 根据分数范围删除column 

zremrangebyrank key start end -- 根据排名删除column 

zcount key min max -- 按照分数范围统计个数

持久化机制

RDB(Redis DataBase)

redis 默认的持久化方案

AOF(Append Only File)

appendfsync:

​ always:同步持久化(慢,安全)

​ everysec:出厂默认,每秒异步记录一次

​ no:不同步

内存淘汰机制及过期key处理

内存淘汰机制
  1. LRU:(Least recently used)长期不用的数据
  2. LFU:(Least Frequently Used) 一段时间内使用最少
  3. TTL:数据设置的过期时间,即将过期,内存不足时提前淘汰
  4. 随机淘汰
过期清除策略
  1. 惰性删除:访问key时发现过期了再删除,对cpu友好,对内存不友好(可以搭配TTL使用)
  2. 定期删除:隔一段时间,对数据检查一次,删除过期key
  3. 定时删除:设置key过期时间的同时创建定时器,key到达过期时间,立即删除(最不友好的方式)
相关推荐
ltl16 分钟前
RocksDB Leveled Compaction:层级不变式与 CompactionPicker
数据库
ltl16 分钟前
DuckDB 向量化与 Morsel-Driven Pipeline
数据库
NJCloud30 分钟前
TiDB 集群部署与 MySQL 兼容性适配实战
linux·运维·数据库·mysql·tidb
喜欢打篮球的普通人1 小时前
LLVM Backend Lowering 从入门到实战:把 IR 变成机器码的完整链路
android·java·数据库
SomeOtherTime3 小时前
Postgresql触发器实现对表的日志审计
数据库·postgresql
这个DBA有点耶3 小时前
Oracle 迁移金仓兼容性评估指南:5 大维度深度拆解
数据库·oracle·架构
wear工程师4 小时前
Redis 和 MySQL 缓存一致性,延迟双删为什么不是强一致
redis·mysql
李可以量化4 小时前
Redis 从了解到精通(二)下:发布订阅进阶命令、量化场景落地与避坑指南
数据库·redis·python·qmt·ptrade
添砖java‘’5 小时前
Redis中常用数据结构
数据库·redis·缓存