redis总结

简介:

redis与memcached

  • redis支持更多的数据结构
  • redis支持数据持久化

redis支持两种存储方式:snapshot(快照)和aof(append only mode),快照是定时将内存快照持久化到硬盘(crash会丢失数据),aof是在写入数据的同时将操作命令保存到日志(不会丢失数据,但操作日志管理维护成本高)

  • redis单线程,memcached是多线程的
  • redis修改libevent实现小巧的epoll,memcached完全依赖libevent(性能影响)
  • memcached使用CAS避免资源竞争修改,redis提供了事务功能

CAS是通过为每一个cacke key设置一个隐藏的cas token作为版本号,每次set操作都会检查并更新token

数据类型

string

string是key/value的存储结构(同memcached一样),支持的命令:

get/set/del
incr/incrby
decr/descby
append/strlen
getrange/setrange

问题:计数

一般情况都需要额外使用锁来避免并发写的问题。

解决方法:

使用incr命令来实现原子递增,使用get/set来重置计数状态。

与memcached相同,可作为key/value数据库,例如session共享。

hash

hash的value实际上是一个hashmap,可以直接操作value的各个feild的值,支持的命令:

hset/hget/hgetall
hmset/hmget
hlen/hexists
hkeys/hvals

hash两种实现方式,

  • 当数据较少时,为了节省内存采用线性存储来节省空间
  • 当数据较多时,才会使用hashmap来降低时间复杂度

问题:商品维度计数
商品有各种计数(喜欢、评论、鉴定、浏览等)
解决方法:
使用hash的field字段来存储喜欢、评论等计数值。

同理,用户维度计数(动态、关注、粉丝、喜欢、发帖等)。

该存储结构适用于常用的商品、热门新闻动态等经常被大量访问的数据对象。

list

list通过双向链表实现,支持反向查找和遍历,支持的命令:

lpush/rpush
lpop/rpop
lrange/lrem

利用push和pop操作可以实现消息队列,也可以实现关注列表、粉丝/在线好友列表等功能。

问题:显示最新的项目列表

SELECT * FROM foo WHERE ... ORDER BY TIME DESC LIMIT 10;

数据库上的查询语句如上,随着数据的增多,排序会越来越慢。
解决方法:

  • 为每一条数据选择一个唯一的ID(可选自增ID)
  • 缓存最新的N个数据,利用redis做数据缓存(list结构不断LPUSH最新的数据)
  • 当查询内容超过redis缓存内容后,才会穿透缓存访问数据库

消息队列的实现:

  • 用list数据结构作为channel
  • 生产者lpush消息
  • 消费者rpop消息
  • 设定超时时间

上述消息队列与PUB/SUB相比,不会丢失数据,但也没有失败重传的机制(也就是没有消息状态)

set

set是一个不允许重复的数据组合,支持的命令:

sadd/spop
sismembers
sinter/sunion/sdiff

smembers可以用来实现好友列表中判断是否为已存在好友或关注好友,也可以通过集合操作来实现共同好友、共同兴趣、共同关注列表等。

问题:判断微博的共同好友、共同兴趣、是否为关注好友
解决方法:

  • 利用set集合存储用户的好友ID
  • 通过sismembers判断用户是否存在好友集合中
  • 通过sinter来判断两个好友集合的共同好友
  • 通过sunion来获取两个集合的所有好友
  • 通过sdiff来获取两个集合的非共同好友,用于好友推荐

sorted set

sorted set是有序的set,通过提供一个优先级score来实现自动排序,支持的命令:

zadd/zrem
zrange/zcard

score可以用来实现权重队列,也可以实现按时间、评分的自动排序列表。

问题:在线游戏实时排行榜
在线游戏的排行榜都需要实时更新操作,不可能去频繁地更改关系型数据库,
解决方法:

  • 为用户设置唯一的ID,采用sorted set来存储用户的得分情况
  • 利用有序集合来对用户得分进行排名,这里不可能存储全部的用户,可能只关心前100个用户,那么就需要在redis之外做限制

问题:新闻排序
新闻排序是按照新闻的关注度(点击率)和时间做排序,

score = points / (time^alpha)

上面的公式可以说明,点击率越高,越可能获得更多的评分;时间越久远,也会降低新闻的评分。
因此,需要有一个专门用于计算新闻评分的进程,实时地处理最新的N条数据
解决方法:

  • 拉取最新的N条数据
  • 计算各个数据的评分
  • 添加到有序集合中

Pub/Sub

实现消息队列、实时消息系统。

Transactions

redis提供事务的支持,

  • 事务可以一次执行多个命令,多个命令按照顺序执行,不会被其他客户单的命令所打断
  • 事务是原子操作,要么全部执行,要么不执行

使用方法:

> MULTI
> ...
> EXEC

错误处理:

  • 在EXEC之前产生的错误,redis会自动放弃这个事务
  • 在EXEC之后产生的错误,并没有特殊处理

其他应用

  • 实时统计,而全量操作数据记录到log日志,利用Hadoop进行更全面的离线分析
  • web缓存,减轻数据库压力


本文转自cococo点点博客园博客,原文链接:http://www.cnblogs.com/coder2012/p/5365846.html,如需转载请自行联系原作者
相关文章
|
数据库 数据安全/隐私保护 OceanBase
OceanBase数据库中,权限管理
OceanBase数据库中,权限管理
974 2
|
存储 安全 Java
JUC系列之《深入理解synchronized:Java并发编程的基石 》
本文深入解析Java中synchronized关键字的使用与原理,涵盖其三种用法、底层Monitor机制、锁升级过程及JVM优化,并对比Lock差异,结合volatile应用场景,全面掌握线程安全核心知识。
|
人工智能 数据库管理 数据挖掘
「瑶池 Data Agent 入门训练营」火热进行中,参营可得棒球帽等多重好礼!
还在为数据报表熬夜?「瑶池Data Agent入门训练营」课程全部上线!7节实战课,教你一句话生成报告、分析问题根源、预测销售链路;定制AI助手,效率提升10倍。完成学习可获得阿里云结营证书,前100名还可赢取实物奖,2月28日正式结营!
「瑶池 Data Agent 入门训练营」火热进行中,参营可得棒球帽等多重好礼!
|
8月前
|
人工智能 数据安全/隐私保护
AI.com 以 7000 万美元成交,AI 真的这么值钱了?
AI.com以约7000万美元成交,创全球域名交易纪录。该域名由Crypto.com CEO购得,将打造面向大众的AI智能代理平台。它标志着AI已从技术概念跃升为高价值商业入口,象征互联网迈入“智能入口时代”。
1529 3
|
存储 分布式计算 NoSQL
Facebook内部都在用的存储引擎,LSM凭什么能硬扛亿级写入流量?
RocksDB是Meta开源的高性能键值存储引擎,基于LSM树设计,专为高吞吐写入场景优化。其核心包括内存表MemTable、持久化SSTable、预写日志WAL及合并机制,适用于海量数据处理。
551 0
|
Windows
代码签名证书如何申请
代码签名证书如何申请
723 0
|
Linux 开发者
【亮剑】Linux系统中的四种文件锁定机制:flock、fcntl、lockfile和flockfile,用于多进程环境下协调共享资源访问,防止数据损坏和竞争条件
【4月更文挑战第30天】本文介绍了Linux系统中的四种文件锁定机制:flock、fcntl、lockfile和flockfile,用于多进程环境下协调共享资源访问,防止数据损坏和竞争条件。flock适合脚本,fcntl提供底层灵活性,lockfile用于管理锁定文件,flockfile则结合两者功能。选择锁定策略时需考虑应用场景,如脚本可选flock,复杂需求则用fcntl。理解并正确使用这些工具对保证系统稳定性和数据一致性至关重要。
1605 1
|
关系型数据库 数据库 Docker
使用 SQLStudio 进行数据库管理并通过 Docker Compose 进行部署
在现代软件开发中,数据库管理是一个至关重要的环节。SQLStudio 是一个强大的工具,可以帮助开发人员轻松管理数据库,现在改名成SQLynx,我们用的是旧的镜像,本文还是用SQLStudio这个名称。同时,使用 Docker Compose 可以简化应用程序的部署过程,使整个开发流程更加高效和可靠。最近了看到有合作伙伴在内网使用SQLStudio,我们这篇文章就介绍 SQLStudio 的基本特点,并指导如何使用 Docker Compose 部署应用程序。
1265 2
使用 SQLStudio 进行数据库管理并通过 Docker Compose 进行部署
|
机器学习/深度学习 Python
【Python机器学习】卷积神经网络Vgg19模型预测动物类别实战(附源码和数据集)
【Python机器学习】卷积神经网络Vgg19模型预测动物类别实战(附源码和数据集)
1049 1
|
编解码 安全
Wii 可以播放 DVD 吗?当然!| 2023 年更新
Wii 可以播放 DVD 吗?这可能是许多 Wii 爱好者最常问的问题。你可能会失望地发现答案是否定的。但由于技术的进步,只要你掌握正确的方法,你就可以在 Wii 上播放 DVD。

热门文章

最新文章