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到达过期时间,立即删除(最不友好的方式)
相关推荐
dear_bi_MyOnly2 小时前
【MyBatis 操作数据库】
java·数据库·学习·mybatis·学习方法
DBA_G3 小时前
南大通用GBase 8s数据库新存储引擎核心能力二
数据库·微服务·架构
衣乌安、4 小时前
数据库事务原理与回滚机制
数据库
CodexDave5 小时前
PostgreSQL 明明有索引却选了 Nested Loop:从行数误判修正执行计划
数据库·postgresql·执行计划·扩展统计·nestedloop
czhaii7 小时前
STC ai助手单片机工程项目创建实例
数据库·mongodb
山峰哥7 小时前
数据库性能救星:Explain执行计划深度拆解
服务器·开发语言·数据库·sql·启发式算法
oradh8 小时前
Oracle 11g rac IP地址修改(public ip、vip、scan ip、priviate ip)
数据库·tcp/ip·oracle·rac ip地址修改
YOU OU8 小时前
Redis哨兵 & 集群
数据库·redis·sentinel
小罗水8 小时前
第8章 文档解析与文本切片
数据库·spring·spring cloud·微服务