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 应用场景
-
数据频繁更新且一致性要求不高
▼text复制代码阅读数/评论数/分享数等 接口限流 -
基于 List 实现栈/队列等特殊结构
-
基于经纬度的地理位置操作--->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个评论
全部评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论

