redis学习日志一(简介,特点及使用场景)

Redis是一款高性能的键值对NoSQL数据库,支持多种数据结构并具备丰富的功能如键过期、发布订阅、事务处理等。其主要特点包括快速的内存操作、简单的稳定性、多样的客户端支持及强大的持久化能力。

一. Redis简介

          Redis是一种基于键值对的NoSQL数据库,与很多键值对数据库不同的是,Redis中的值可以由string,hash,list,set,zset,BitMaps(位图),HyperLogLog(是用来做基数统计的算法),GEO(地理信息定位)等多种数据结构和算法组成,所以Redis可以满足很多实用场景.Redis会把所有数据都放在内存中,所以它的读写性能非常惊人.Redis还可以将内存中的数据利用快照和日志的形式保存到硬盘上,断电时,内存中的数据不会"丢失".Redis还提供了键过期(可以实现缓存),发布订阅,事务,流水线(Pipeline),Lua脚本等附加功能.

二. Redis特点

          1.速度快 : Redis所有的数据都存放在内存中

                             Redis是C语言实现的,距离操作系统会更近,执行速度相对会更快

                             Redis是单线程架构,预防了多线程可能产生的竞争问题

                             Redis源代码精打细磨

           2.基于键值对的数据结构服务器 : 五种数据结构,同时在字符串的基础上演变出了位图(Bitmaps)和HyperLogLog两种数据结构.

           3.丰富的功能 : 键过期(可以实现缓存),发布订阅,事务,流水线(Pipeline,批处理,客户端一次将一批命令上传到Redis,减少网络的开销),Lua脚本

           4.简单稳定

           5.客户端语言多(支持java,PHP,Python,C,C++等)

           6.持久化 : RDB和AOF,可以用这两种策略将内存中的数据保存到硬盘

           7.主从复制 : Redis有复制功能(分布式Redis的基础)

           8.高可用和分布式

三. Redis使用场景

           1.缓存(几乎所有的大型网站都使用缓存机制,合理的使用缓存不仅可以加快数据的访问速度,而且能够有效降低后端数据源的压力)

           2.排行榜系统(热度排名,发布时间排名等)

           3.计数器功能(视频网站播放数,电商网站浏览数,为了保证数据的实时性,每一次播放和浏览都要做加1的操作,并且并发量很大对于传统关系型数据的性能是一种挑战,Redis天然支持计数功能而且性能非常好)

           4.社交网络(赞/踩,共同好友/喜好,推送,下拉刷新等)

           5.消息队列系统(Redis有发布订阅功能和阻塞队列的功能)

ps:本人初学redis,博客是结合付磊和张益军的<Redis开发与运维>,网上资料及个人工作所整理的,即作为个人笔记,也作为学习的分享.


                               

### Redis 数据类型及对应使用场景详解 Redis个高性能的键值数据库,支持多种数据类型,并且每种数据类型都有其特定的使用场景。以下是 Redis 的主要数据类型及其适用场景的详细说明: #### 1. 字符串(String) 字符串是 Redis 最基础的数据类型,可以存储字符串、整数或浮点数。 - **使用场景**: - 缓存:将频繁访问的数据存储在 Redis 中以提高访问速度[^3]。 - 计数器:通过 `INCR` 和 `DECR` 命令实现计数功能,例如统计网站访问量。 - 会话管理:存储用户的会话信息,如登录状态、购物车内容等。 - 分布式锁:利用字符串类型的原子操作实现分布式锁。 ```python # 示例代码:设置和获取字符串值 redis.set("key", "value") value = redis.get("key") ``` #### 2. 列表(List) 列表是个有序的字符串集合,支持从头部或尾部插入元素。 - **使用场景**: - 消息队列:生产者将消息推入队列,消费者从队列中取出消息处理。 - 最近浏览记录:存储用户最近浏览的商品或页面。 - 任务队列:用于异步任务处理,例如发送邮件或处理文件上传。 ```python # 示例代码:向列表添加元素并获取 redis.lpush("list_key", "item1") redis.lpush("list_key", "item2") items = redis.lrange("list_key", 0, -1) ``` #### 3. 集合(Set) 集合是个无序且不重复的字符串集合,支持高效的集合运算。 - **使用场景**: - 社交网络:存储用户的好友关系或关注列表。 - 去重:确保数据集中没有重复项。 - 集合运算:执行交集、并集、差集等操作,例如找出共同好友。 ```python # 示例代码:向集合添加元素并执行交集操作 redis.sadd("set1", "item1", "item2") redis.sadd("set2", "item2", "item3") intersection = redis.sinter("set1", "set2") ``` #### 4. 有序集合(Sorted Set) 有序集合是个带分数的字符串集合,元素按照分数排序。 - **使用场景**: - 排行榜:根据分数对用户进行排名,例如游戏积分排行榜。 - 时间轴:按时间顺序存储事件或日志。 - 限流:通过滑动窗口算法实现请求频率限制。 ```python # 示例代码:向有序集合添加元素并获取前 N 个元素 redis.zadd("sorted_set_key", {"member1": 10, "member2": 20}) top_members = redis.zrange("sorted_set_key", 0, 4, withscores=True) ``` #### 5. 哈希(Hash) 哈希是个键值对集合,适合存储对象属性。 - **使用场景**: - 用户信息存储:将用户的多个属性存储在个哈希中,减少内存占用。 - 商品信息:存储商品的详细信息,如价格、库存、描述等。 - 配置管理:存储系统的配置参数。 ```python # 示例代码:向哈希添加字段并获取 redis.hset("hash_key", "field1", "value1") redis.hset("hash_key", "field2", "value2") fields = redis.hgetall("hash_key") ``` #### 6. 扩展数据类型 除了上述核心数据类型外,Redis Stack 和 Redis Enterprise 提供了更多的扩展数据类型,例如 Bitmaps、HyperLogLog、Streams 等。 - **使用场景**: - Bitmaps:用于统计在线用户数量、签到系统等。 - HyperLogLog:用于去重统计,例如统计独立访客数。 - Streams:用于消息传递和事件日志记录。 --- ### 数据淘汰策略 在实际应用中,Redis 的数据淘汰策略也会影响数据类型的使用。常见的淘汰策略包括: - LRU(Least Recently Used):淘汰最近最少使用的数据[^4]。 - LFU(Least Frequently Used):淘汰最不常用的键。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值