Redis 入门及实战

目录

1. Redis 基本概念

2. Redis 的优势

3. Redis 适用场景

4. Redis-3.2.6 安装(未整理)与测试

5. 使用 Redis 的 Java API 客户端——Jedis

6. 数据结构

6.1 String -- 字符串

6.1.1 String 使用概述

6.1.2 String 常用操作

6.1.3 String 使用案例

6.2 List -- 列表

6.2.1 List 使用概述

6.2.2 List 应用案例

6.3 Set -- 集合

6.3.1 Set 使用概述

6.3.2 Set 使用案例

6.4 ZSet -- 有序集合

6.4.1 ZSet 使用概述

6.4.2 ZSet 使用案例

6.5 Hash -- 哈希表

6.5.1 Hash 使用概述

6.5.2 Hash 案例

6.6 键值相关的命令

6.7 服务器相关命令

6.8 Redis 事务

7. Redis 的高可用

8. Redis 的持久化

8.1 RDB 持久化

8.2 AOF 持久化

8.3 总结


1. Redis 基本概念

Remote Dictionary Server(Redis) 是一个由 Salvatore Sanfilippo 写的开源的、高性能的、使用 ANSI C 语言编写的、遵守 BSD 协议、支持网络、可基于内存亦可持久化的日志型、Key-Value 存储系统,并提供多种语言的 API。

和 memcached 类似,Redis 常被称作是一款 Key-Value 内存存储系统或者内存数据库,同时由于它支持丰富的数据结构,又被称为一种数据结构服务器(Data Structure Server),因为其值(Value)可以是字符串(String)、哈希(Map)、列表(List)、集合(Set)和有序集合(Sorted Set)等类型。

 

Redis 与其他 Key-Value 缓存产品有如下三个特点:

1. Redis 支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用

2. Redis 不仅仅支持简单的 Key-Value 类型的数据,同时还提供 List, Set, ZSet, Hash 等数据结构的存储

3. Redis 支持数据的备份,即 Master-Slave 模式的数据备份

 

2. Redis 的优势

1. 性能极高:Redis 读的速度可达 110000 次/s,写的速度可达 81000 次/s

2. 丰富的数据类型:Redis 支持二进制案例的 String, List, Hash, Set 以及 Sorted Set 数据类型的操作

3. 原子操作:Redis 的所有操作都是原子性的,同时 Redis 还支持对几个操作合并后的原子性执行

4. 丰富的特性:Redis 还支持 Publish/Subscribe,通知 Key 过期,支持高可用集群等特性

5. 数据持久化机制:持久化机制有两种:1)RDB 方式:定期将内存数据 dump 到磁盘        2)AOF(Append Only File) 持久化机制:用记日志的方式记录每一条数据更新操作,一旦出现灾难事件,可以通过日志重放来恢复整个数据库

 

3. Redis 适用场景

1. TopN 需求:取最新的 N 个数据,如读取作家博客最新的 50 篇文章,通过 List 实现对按时间排序的数据的高效读取

2. 排行榜应用:以特定条件为排序标准,将其设成 Sorted Set 的 score,进而实现高效获取

3. 需要精准设定过期时间的应用:把 Sorted Set 的 score 值设置成过期时间的时间戳,那么就可以简单地通过过期时间排序,定时清除过期数据了

4. 计数器应用:Redis 的命令都是原子性的,可以轻松地利用 INCR, DECR 命令来构建计数器系统

5. 去除大量数据中的重复数据:将数据放入 Set 中,就能实现对重复数据的排除

6. 构建队列系统:使用 List 可以构建队列系统,使用 Sorted Set 甚至可以构建有优先级的队列系统

7. 实时系统、反垃圾系统:通过上面说到的 Set 功能,可以知道有一个终端用户是否进行了某个操作,可以找到其操作的集合并进行分析统计对比等

8. Publish/Subscribe 构建实时消息系统

9. 缓存(会话、商品列表、评论列表、经常查询的数据等)

 

以一个某技术社区为例:

记录帖子的点赞数、评论数和点击数(Hash)

记录用户的帖子 ID 列表 (排序),便于快速显示用户的帖子列表(ZSet)

记录帖子的标题、摘要、作者和封面信息,用于列表页展示(Hash)

记录帖子的点赞用户 ID 列表,评论 ID 列表,用于显示和去重计数(ZSet)

缓存近期热帖内容 (帖子内容空间占用比较大),减少数据库压力 (Hash)

记录帖子的相关文章 ID,根据内容推荐相关帖子(List)

如果帖子 ID 是整数自增的,可以使用 Redis 来分配帖子 ID(计数器)

收藏集和帖子之间的关系(ZSet)

记录热榜帖子 ID 列表,总热榜和分类热榜(ZSet)

缓存用户行为历史,进行恶意行为过滤(ZSet,Hash)

 

4. Redis-3.2.6 安装(未整理)与测试

官网:https://redis.io/ 下载安装包

假设安装已完成

启动 Redis Server

redis-server

后台启动

nohup redis-server 1>~/data/redis/redis_std.log 2>~/data/redis/redis_err.log &

启动客户端执行命令

redis-cli

检测 Redis 是否正常工作

PING

 

5. 使用 Redis 的 Java API 客户端——Jedis

1. 新建一个 Maven 工程,导入如下依赖:

<dependency> 
    <groupId>redis.clients</groupId> 
    <artiFactId>jedis</artiFactId> 
    <version>2.9.0</version> 
</dependency>

2. 编写一个测试类用来测试客户端是否可以访问服务器

package cn.gldwolf.jedis 

import redis.clients.jedis.Jedis; \

public class JedisClientDriver { 
    public static void main(String[] args) { 
        // 创建一个 Jedis 客户端对象 
        Jedis client = new Jedis("hdp01", 6379); 

        // 测试服务器是否连通 String response = client.ping(); 
        Sytstme.out.println(response); // 若能 ping 通,则会返回一个 PONG 
    } 
}

 

6. 数据结构

6.1 String -- 字符串

6.1.1 String 使用概述

String 是 Redis 最基本的类型,可以理解成与 Memcached 一模一样的类型,一个 Key 对应一个 Value.

String 类型是二进制安全的。意思是 Redis 的 String 可以包含任何数据,比如 jpg 图片或者序列化的对象。

String 类型是 Redis 最基本的数据类型,一个键最大能存储 512MB.

命令

介绍

SET key value

设置值

SETNX key value

如果 Key 存在,返回 0 且修改不生效

SETEX key seconds value

指定有效期为 seconds 秒

SETRANGE key offset value

将 Key 对应的 Value 第 n 位后面的字符替换成 value

MSET key value [key value ...]

一次设置多个值

MSETNX key value [key value ...]

类似 SETNX,设置多个值,如果 Key 存在,则返回 0 且修改不生效

GET key

获取 Key 对应的值

GETSET key value

设置 Key 的值,并返回 Key 的旧值

GETRANGE key start end

获取索引位置从 start 到 end 的 Key 对应值的字符串

MGET key [key ...]

一次获取多个 Key 对应的值,如果不存在,则返回 nil

INCR key

对 Key 的值作 +1 操作,如果 INCR 一个不存在的值,则对 Key 赋值为 1,如果 Key 对应值不是 Int 类型,则返回错误:-ERR value is not an integer or out of range

INCRBY key increment

加指定值 increment,Key 不存在的时候会设置 Key,并认为原来的 Value 为 0

DECR key

对 Key 的值作 -1 操作,DECR 一个不存在的 Key,则设置 Key 为 -1

DECRBY key decrement

减指定值

APPEND key value

将 value 追加到 Key 对应的值的末尾,返回新字符串的长度

STRLEN key

读取 Key 对应的 value 的长度

 

6.1.2 String 常用操作

1. 插入和读取一条 String 类型的数据

2. 对 String 类型数据进行增减(前提是这条数据的 Value 可以看作数字)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值