Redis(Remote Dictionary Server)是一个开源的内存数据结构存储,用作数据库、缓存和消息代理。它由 Salvatore Sanfilippo 在 2009 年创建,使用 ANSI C 编写,支持多种编程语言的客户端。Redis 提供了丰富的数据结构,包括:
- 字符串(Strings):最基本的数据类型,可以存储文本或二进制数据。
- 哈希(Hashes):适合存储对象。
- 列表(Lists):链表结构,可以用作队列、栈等。
- 集合(Sets):无序集合,支持集合操作(如交集、并集)。
- 有序集合(Sorted Sets):带权重的有序集合。
- 位图(Bitmaps):处理位的数组。
- 超日志(HyperLogLogs):用于基数估计算法。
- 地理空间索引(Geospatial):存储地理空间信息和运行半径查询。
- 流(Streams):用于日志和消息流数据。
Redis 的高性能来自于其内存操作和单线程模型,确保了数据操作的原子性和一致性。
Redis 的灵活性和高性能使其适用于多种应用场景:
- 缓存:
- 目的:减少数据库负载,加快数据访问速度。
- 示例:缓存用户会话数据、热门商品数据、计算结果等。
- 消息队列:
- 目的:实现异步处理和任务队列。
- 示例:任务调度、日志收集、实时消息推送等。
- 排行榜/计数器:
- 目的:高效地进行计数和排序操作。
- 示例:网站访问量统计、游戏排行榜、点赞数统计等。
- 会话存储:
- 目的:存储用户会话数据,实现分布式会话管理。
- 示例:电商网站用户购物车数据、社交媒体用户会话数据等。
- 实时分析:
- 目的:进行实时数据分析和处理。
- 示例:实时监控、实时日志分析、实时流数据处理等。
- 发布/订阅系统:
- 目的:实现消息的发布和订阅机制。
- 示例:实时聊天系统、通知推送系统等。
- 地理空间数据:
- 目的:存储和处理地理空间数据。
- 示例:附近商家查询、定位服务等。
在不同操作系统上安装 Redis 的方法有所不同。以下是一些常见的安装方法:
Ubuntu/Debian:
sudo apt update
sudo apt install redis-serverCentOS/RHEL:
sudo yum update
sudo yum install redismacOS (使用 Homebrew):
brew update
brew install redisWindows:
下载地址:https://github.com/dmajkic/redis/downloads
下载到的Redis支持32bit和64bit。根据自己实际情况选择,将64bit的内容cp到自定义盘符安装目录取名redis。 如 C:\redis
打开一个cmd窗口 使用cd命令切换目录到 C:\redis 运行 redis-server.exe redis.conf 。
如果想方便的话,可以把redis的路径加到系统的环境变量里,这样就省得再输路径了,后面的那个redis.conf可以省略,如果省略,会启用默认的。输入之后,会显示如下界面:
这时候另启一个cmd窗口,原来的不要关闭,不然就无法访问服务端了。
启动 Redis 服务器:
redis-server连接 Redis 客户端:
redis-cli停止 Redis 服务器:
redis-cli shutdownRedis Insight
- PING: 检测服务器是否在运行。如果服务器正常运行,将返回 "PONG"。
PING- ECHO: 回显输入的字符串。
ECHO "Hello, Redis!"- SELECT: 选择数据库(默认 0)。Redis 默认有 16 个数据库(编号从 0 到 15)。
SELECT 1- FLUSHDB: 清空当前数据库中的所有键。
FLUSHDB- FLUSHALL: 清空所有数据库中的所有键。
FLUSHALL- DEL: 删除一个或多个键。
DEL key1 key2- EXISTS: 检查一个键是否存在。
EXISTS key- EXPIRE: 设置键的过期时间(以秒为单位)。
EXPIRE key 10- TTL: 获取键的剩余过期时间。返回值为剩余的过期时间(秒),如果键不存在或没有设置过期时间,则返回 -2 或 -1。
TTL key- TYPE: 获取键的存储类型。
TYPE key- SET: 设置键的值。
SET key value- GET: 获取键的值。
GET key- INCR: 将键的整数值加 1。
INCR key- DECR: 将键的整数值减 1。
DECR key- MSET: 同时设置多个键值对。
MSET key1 value1 key2 value2- MGET: 获取多个键的值。
MGET key1 key2- SETNX: 只有在键不存在时,才设置键的值。NX 代表 "SET if Not eXists"。
SETNX key value- SETEX: 设置键的值,并设置过期时间(以秒为单位)。
SETEX key seconds value- GETSET: 将键的值设置为新的值,并返回旧的值。
GETSET key new_value- HSET: 设置哈希字段的值。
HSET key field value- HGET: 获取哈希字段的值。
HGET key field- HGETALL: 获取哈希表中所有字段和值。
HGETALL key- HDEL: 删除一个或多个哈希字段。
HDEL key field1 field2- HEXISTS: 检查哈希字段是否存在。
HEXISTS key field- HINCRBY: 为哈希表中的字段值加上指定增量。
HINCRBY key field increment- HSETNX: 只有在字段不存在时,才设置哈希字段的值。NX 代表 "SET if Not eXists"。
HSETNX key field value- LPUSH: 在列表头部插入一个或多个值。
LPUSH key value1 value2- RPUSH: 在列表尾部插入一个或多个值。
RPUSH key value1 value2- LPOP: 移除并返回列表的头元素。
LPOP key- RPOP: 移除并返回列表的尾元素。
RPOP key- LRANGE: 获取列表中指定范围的元素。索引从 0 开始,负索引表示从列表末尾开始计数。
LRANGE key start stop- LLEN: 获取列表的长度。
LLEN key- LREM: 根据参数 count 的值,移除列表中与参数 value 相等的元素。
LREM key count value- SADD: 向集合添加一个或多个成员。
SADD key member1 member2- SREM: 移除集合中的一个或多个成员。
SREM key member1 member2- SMEMBERS: 返回集合中的所有成员。
SMEMBERS key- SISMEMBER: 检查某个值是否是集合的成员。
SISMEMBER key member- SCARD: 获取集合中的成员数。
SCARD key- SUNION: 返回给定所有集合的并集。
SUNION key1 key2- SINTER: 返回给定所有集合的交集。
SINTER key1 key2- SDIFF: 返回第一个集合与其他集合之间的差集。
SDIFF key1 key2- ZADD: 向有序集合添加一个或多个成员,或者更新已存在成员的分数。
ZADD key score1 member1 score2 member2- ZRANGE: 返回有序集合中指定区间内的成员。默认按照分数从小到大排序。
ZRANGE key start stop- ZREM: 移除有序集合中的一个或多个成员。
ZREM key member1 member2- ZSCORE: 返回有序集合中指定成员的分数。
ZSCORE key member- ZRANGEBYSCORE: 返回有序集合中指定分数区间内的成员。
ZRANGEBYSCORE key min max- ZCOUNT: 返回有序集合中指定分数区间内的成员数量。
ZCOUNT key min max- PUBLISH: 将信息发送到指定的频道。
PUBLISH channel message- SUBSCRIBE: 订阅一个或多个频道。
SUBSCRIBE channel1 channel2- UNSUBSCRIBE: 退订一个或多个频道。
UNSUBSCRIBE channel1 channel2Redis 支持 RDB 和 AOF 两种持久化方式:
- RDB:生成二进制快照的方式进行持久化。
- AOF:将每个写操作记录到日志文件中进行持久化。
下面是一个使用 Java 与 Redis 进行交互的简单示例。这个示例使用了 Jedis,这是一个流行的 Redis Java 客户端。
首先,在你的项目中添加 Jedis 依赖。如果你使用的是 Maven,可以在 pom.xml 文件中添加以下内容:
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>4.3.1</version>
</dependency>
如果你使用的是 Gradle,可以在 build.gradle 文件中添加以下内容:
implementation 'redis.clients:jedis:4.3.1'以下是一个使用 Jedis 与 Redis 进行交互的 Java 示例代码:
import redis.clients.jedis.Jedis;
public class RedisExample {
public static void main(String[] args) {
// 连接到本地的 Redis 服务器
Jedis jedis = new Jedis("localhost", 6379);
// 设置一个键值对
jedis.set("foo", "bar");
// 获取键的值
String value = jedis.get("foo");
System.out.println("The value of 'foo' is: " + value);
// 关闭连接
jedis.close();
}
}- 确保 Redis 服务器正在运行。你可以通过命令
redis-server启动 Redis 服务器。 - 编译并运行上述 Java 代码。确保你的项目中已经包含了 Jedis 依赖。
- 连接 Redis:使用
new Jedis("localhost", 6379)创建一个 Jedis 实例,并连接到运行在本地默认端口 6379 的 Redis 服务器。 - 设置键值对:使用
jedis.set("foo", "bar")将键 "foo" 的值设置为 "bar"。 - 获取键的值:使用
jedis.get("foo")获取键 "foo" 的值,并输出到控制台。 - 关闭连接:使用
jedis.close()关闭 Jedis 连接。
通过这种方式,你可以使用 Java 与 Redis 进行交互,完成数据存储和读取操作。如果你需要更多高级功能,比如事务、发布/订阅等,可以参考 Jedis 的文档和示例。
