收藏一篇redis文章

1,redis是什么

redis是一种支持Key-Value等多种数据结构的存储系统。可用于缓存,事件发布或订阅,高速队列等场景。该数据库使用ANSI C语言编写,支持网络,提供字符串,哈希,列表,队列,集合结构直接存取,基于内存,可持久化。

 

2,支持的语言

 

3,redis的应用场景有哪些

1,会话缓存(最常用)
2,消息队列,
比如支付3,活动排行榜或计数
4,发布,订阅消息(消息通知)
5,商品列表,评论列表等

 

4,redis数据类型
Redis一共支持五种数据类:string(字符串),hash(哈希),list(列表),set(集合)和zset(sorted set有序集合)。

(1)字符串(字符串)
它是redis的最基本的数据类型,一个键对应一个值,需要注意是一个键值最大存储512MB。

(2)hash(哈希)
redis hash是一个键值对的集合,是一个string类型的field和value的映射表,适合用于存储对象

(3)表(列表)
是redis的简单的字符串列表,它按插入顺序排序

(4)组(集合)
是字符串类型的无序集合,也不可重复

(5)zset(sorted set有序集合)
是string类型的有序集合,也不可重复
有序集合中的每个元素都需要指定一个分数,根据分数对元素进行升序排序,如果多个元素有相同的分数,则以字典序进行升序排序,sorted set因此非常适合实现排名

 

5,redis的服务相关的命令

slect#选择数据库(数据库编号0-15)
退出#退出连接
信息#获得服务的信息与统计
monitor#实时监控
config get#获得服务配置
flushdb#删除当前选择的数据库中的key
flushall#删除所有数据库中的键

 

6,redis的发布与订阅

redis的发布与订阅(发布/订阅)是它的一种消息通信模式,一方发送信息,一方接收信息。
下图是三个客户端同时订阅同一个频道

下图是有新信息发送给频道1时,就会将消息发送给订阅它的三个客户端

 

 

7,redis的持久化

redis持久有两种方式:快照(快照),仅附加文件(AOF)

快照(快照)

1,将存储在内存的数据以快照的方式写入二进制文件中,如默认dump.rdb中
2,保存900 1 

#900秒内如果超过1个Key被修改,则启动快照保存
3,保存300 10 

#300秒内如果超过10个Key被修改,则启动快照保存
4,保存60 10000 

#60秒内如果超过10000个重点被修改,则启动快照保存
 

仅附加文件(AOF)

1,使用AOF持久时,服务会将每个收到的写命令通过写函数追加到文件中(appendonly.aof)
2,AOF持久化存储方式参数说明
    appendonly yes  

           #开启AOF持久化存储方式 
    appendfsync always 

         #收到写命令后就立即写入磁盘,效率最差,效果最好
    appendfsync everysec

         #每秒写入磁盘一次,效率与效果居中
    appendfsync no 

         #完全依赖操作系统,效率最佳,效果没法保证

 

8,redis的性能测试

自带相关测试工具

实际测试同时执行100万的请求

 

【本文由中间件小哥收集整理自“民工哥的Linux的运维”】

感谢  中间件小哥 在 https://blog.youkuaiyun.com/middleware2018/article/details/80355418 的整理

### 使用 Redis 构建博客系统的功能设计与实现 构建一个基于 Redis 的博客系统可以显著提升性能和用户体验。以下是关于如何利用 Redis 实现博客系统的核心功能的设计与实现。 #### 1. 用户登录状态管理 为了提高用户的访问体验,可以通过 Redis 缓存用户会话信息来减少数据库的压力。每次用户成功登录后,将其令牌(Token)存储在 Redis 中,并设置过期时间以确保安全性。 ```java // 设置 Token 到 Redis 并指定有效期 jedis.setex("token:" + userId, expirationTimeInSeconds, token); ``` 此方法不仅减少了对关系型数据库的频繁读写操作,还提高了系统的响应速度[^1]。 #### 2. 博客文章缓存 对于高频率访问的文章内容,可以直接将这些数据加载到 Redis 中作为缓存层。当有新的请求到达时,优先从 Redis 获取数据;如果未命中,则回退至数据库并更新 Redis 缓存。 ```java String articleContent = jedis.get("article:" + articleId); if (articleContent == null) { // 查询数据库并将结果保存到 Redis } ``` 这种方式有效降低了数据库负载,同时加快了页面渲染的速度[^3]。 #### 3. 点赞与收藏功能 点赞和收藏属于典型的高频次交互行为,在这种场景下使用 Redis 可以极大优化性能。具体做法是以集合(Set)形式记录每一个博文被哪些用户喜欢或者标记为已收藏的状态。 ```python def like_article(user_id, article_id): redis.sadd(f'likes:{article_id}', user_id) def unlike_article(user_id, article_id): redis.srem(f'likes:{article_id}', user_id) # 统计某篇文章获得多少个赞 count_likes = redis.scard(f'likes:{article_id}') ``` 上述代码片段展示了如何借助 Redis Set 结构完成基本的点赞逻辑[^2]。 #### 4. 排行榜展示热门博主或文章 通过有序集合(ZSet),可以根据特定权重排序元素,非常适合用来制作每日/每周最热帖子榜单等功能模块。 ```bash ZADD hot_articles_score 90 "Article A" ZADD hot_articles_score 85 "Article B" ... ZRANGE hot_articles_score 0 -1 WITHSCORES DESC ``` 这里我们创建了一个名为 `hot_articles_score` 的 ZSet ,其中每个成员代表一篇文章及其对应的热度分数。最后按照降序排列获取前几名即可形成最终排名列表[^1]。 #### 5. 社交网络特性支持(如关注者动态推送等) 假设我们需要实现实时显示某个作者最新发布的几篇作品给他的粉丝看的功能,那么就可以考虑采用 Pub/Sub 模式配合 List 数据类型达成目标。 ```javascript // 发布新消息通知订阅该频道的所有客户端 redis.publish('author:' + authorId + ':updates', JSON.stringify(newPost)); // 添加最新的post id进入队列头部位置 redis.lpush(`timeline:${userId}`, postId); // 控制每条timeline最多保留N项历史纪录 redis.ltrim(`timeline:${userId}`, 0, maxPostsToKeep); ``` 以上伪码解释了怎样运用发布订阅机制以及链表结构共同作用于个人主页的时间轴呈现过程之中[^4]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值