NoSqol-Redis 基础

NoSql

什么是NoSQL

  • NoSQL(Not only SQL):不仅仅是Sql,是对不同于传统的关系数据库(以二维表结构展示)的数据库管理系统的统称
  • NoSql 与Sql 之间不是对立关系,而是作为Sql的补充,满足在特殊需求上,Sql实现复杂,效率低等问题...

常见类型的NoSql

  • 键值数据库 以 key-value 的形式存储数据 -->Redis
  • 文档数据库 以Document的形式存储 --->MongoDB,Elasticsearch
  • 图类型数据库 图结构 --->Neo4J
  • 列族数据库 以列族式存储,将同一列数据存在一起 -->HBase

扩展:

text
复制代码
1 .https://blog.csdn.net/weixin_44259720/article/details/104839050 2. https://zhuanlan.zhihu.com/p/345342966

Redis

什么是Redis

  • 以 key-value 形式存储,和传统的关系型数据库不一样.不一定遵循传统数据库的一些基本要求.(非关系型的,分布式的,开源的,水平可拓展的)

  • Redis 是以 key-value store 存储.

    text
    复制代码
    键可以包含:(string)字符串,哈希,(list)链表,(set)集合,(zset)有序集合. 这些数据集合都指出push/pop,add/remove及取交集和并集以及更丰富的操作. redis支持各种不同方式排序,为了保证效率,数据都是缓存在内存中. 它可以从周期性的把更新的数据写入到磁盘或者把修改操作写入追加的文件中.

优缺点

  • 优点:
text
复制代码
高并发读写 海量数据的高效率存储和访问 数据的可拓展性和高可用性 单线程操作,每个操作都是原子操作,没有并发相关问题
  • 缺点:
text
复制代码
事务处理非常简单 无法做太复杂的关系数据库模型 基于内存容易丢失数据

使用场景

缓存中间件

  • Redis 缓存的优缺点
text
复制代码
优点 提高查询性能, 减少 IO 操作 减轻 MySQL 数据库负担 减轻应用服务器 cpu & 内存负担 缺点 数据一致性问题 可能丢失数据
  • 什么数据适合做缓存?
text
复制代码
查询频率高 修改频率低 一致性要求较低
  • 缓存操作流程
text
复制代码
1. 读取 redis 数据,有则直接返回 2. redis 中没有,查询 mysql 数据库 3. 将 mysql 数据库的数据存储到 redis 4. 返回该数据

NoSql

  • NoSQL 应用场景
  1. 数据频繁更新且一致性要求不高

    text
    复制代码
    阅读数/评论数/分享数等 接口限流
  2. 基于 List 实现栈/队列等特殊结构

  3. 基于经纬度的地理位置操作--->Redis GEO

常见命令和基本五大数据类型

全局命令

命令描述
PING测试连接是否正常
INFO获取服务器信息
FLUSHALL删除所有数据库的所有数据
FLUSHDB删除当前数据库的所有数据
SELECT选择数据库
AUTH使用密码进行认证
KEYS查找所有符合给定模式的键
EXPIRE设置键的过期时间
TTL获取键的剩余过期时间
DEL删除键
RENAME重命名键
DBSIZE获取当前数据库中键的数量
SCAN迭代数据库中的键
EVAL执行Lua脚本
SCRIPT LOAD加载Lua脚本
SCRIPT EXECUTE执行已加载的Lua脚本
exists key判断 key 是否存在, 返回 1 或 0, 1表示存在, 0表示不存在
ttl key返回指定 key 还有多少秒过期, 如果已经过期或者不存在, 返回 -2, 如果没有设置过期时间, 返回 -1
expire key seconds为指定 key 设置过期时间为 seconds 秒, 如果之前已经设置了过期时间, 会直接覆盖之前的
flushdb清除 redis
keys pattern按照指定格式扫描所有 key, 返回匹配的 key 集合

常用数据类型命令

String

命令描述
SET key value存储一个键值对
GET key获取指定键的值
INCR key原子性地将键的值加1
DECR key原子性地将键的值减1
INCRBY key value原子性地将键的值增加指定值
DECRBY key value原子性地将键的值减少指定值
SETEX key seconds value设置键值对的同时,设置过期时间
SETNX key value如果键不存在则设置,返回1;如果键已存在则不设置,返回0(原子性操作)
MSET key1 value1...keyn valuen设置多个键值对
MGET key1 key2 keyn获取多个指定键的值

应用场景

  • 计数器(如浏览数、评论数、点赞数等)
  • 分布式自增ID生成器
  • 共享Session

Hash

命令描述
HSET key field value存储一个键值对到hash结构,键名为key,字段为field,值为value
HGET key field获取指定hash结构中field的值
HKEYS key获取hash结构下指定key的所有字段名
HVALS key获取hash结构下指定key的所有字段值
HINCRBY key field value原子性地将指定hash结构key中的field增加value(field必须是数字)
HGETALL key一次性返回指定hash key中的所有键值对

应用场景

  • 存储复杂类型的属性
  • 减少外部键数量,通过hash对数据进行分类,将同一分类下的数据存储在hash中

List

命令描述
RPUSH key value...往列表(List)的最后添加一个或多个元素
LINDEX key index获取列表中指定索引位置的元素
LRANGE key start stop获取列表中从指定的 start 索引到 stop 索引位置范围内的所有元素
LLEN key返回列表中的元素个数
LREM key count value删除列表中指定值为 value 的元素
- count > 0:从头到尾删除 count 个元素
- count < 0:从尾到头删除 count 个元素
- count = 0:删除所有值为 value 的元素
LPUSH/RPOP用于实现队列,支持先进先出(FIFO)
LPUSH/BRPOP用于实现阻塞队列,支持先进先出(FIFO),在获取不到元素时线程会阻塞等待
LPUSH/LPOP用于实现栈,支持先进后出(LIFO)

应用场景

  • 用作各种列表类型的数据结构
    • 普通列表
    • 队列/阻塞队列
  • 关注人集合/粉丝集合/收藏文章集合等
    • 注意处理大键(Key)的情况

Set

命令描述
SADD key members...往集合(Set)中添加一个或多个成员
SCARD key返回集合中的成员数量
SMEMBERS key返回集合中的所有成员
SDIFF key1 key2返回两个集合 key1 和 key2 的差集
SINTER key1 key2返回两个集合 key1 和 key2 的交集
SUNION key1 key2返回两个集合 key1 和 key2 的并集
SPOP key count随机移除并返回集合 key 中的 count 个成员
SRANDMEMBER key count随机返回集合 key 中的 count 个成员(允许重复)

应用场景

  • 求交集、并集、差集的需求
  • 数据去重、获取随机数
  • 抽奖功能等

Sorted Set 类型(ZSet)

命令描述
ZADD key score value往有序集合(ZSet)中添加一个带有分数的成员
ZCARD key返回有序集合中的成员数量
ZCOUNT key min max返回有序集合中分数在 min 和 max 之间的成员数量
ZINCRBY key score value为有序集合中的指定成员增加分数
ZRANGE key startIndex stopIndex根据分数从小到大的排序,返回有序集合的指定成员列表
ZREVRANGE key startIndex stopIndex根据分数从大到小的排序,返回有序集合的指定成员列表
ZRANK key value返回有序集合中指定成员的排名(从小到大的排序索引位置)
ZREVRANK key value返回有序集合中指定成员的排名(从大到小的排序索引位置)
ZREM key value从有序集合中删除指定成员
ZSCORE key value返回有序集合中指定成员的分数

应用场景

  • 排行榜应用场景,如游戏得分排名
  • 带权重的元素排序,如商品价格排名
  • 实时热门内容排行等
0个评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
下载 APP