Redis 入门指南
目录
Redis 入门指南
Redis 基本概念
Redis 常用命令
字符串String操作命令:
哈希Hash操作命令:
列表list操作命令
集合set操作命令:
有序集合sorted set 操作命令
通用命令
在Java中操作 Redis
1.Jedis
2.Spring Data Redis
总结
其中键值型,是指Redis中存储的数据都是以key、value对的形式存储,而value的形式多种多样,可以是字符串、数值、甚至json:
Redis(Remote Dictionary Server)是一个开源的内存数据存储系统,也被称为数据结构服务器。它提供了一个键值存储数据库,并支持多种数据结构,例如字符串、哈希、列表、集合和有序集合等。本文将介绍Redis的基本概念、常用命令以及如何在Java中操作Redis。
Redis是一个开源的内存中的数据结构存储系统,它可以用作:数据库、缓存和消息中间件
官网:https://redis.io
下载地址
Windows版下载地址:https://github.com/microsoftarchive/redis/releases
Linux版下载地址:https://download.redis.io/releases/
[root@localhost local]# tar -zxvf redis-4.0.0.tar.gz
Redis 基本概念
键值对
Redis是以键值对的形式存储数据的。每个键都是唯一的,并且可以关联多种不同类型的值。键和值都可以是字符串,但值也可以是其他数据结构,如哈希、列表、集合和有序集合。
数据结构
Redis支持多种数据结构,包括:
- 字符串(string):存储字符串值。
- 哈希(hash):存储键值对的散列。
- 列表(list):按插入顺序存储的字符串元素列表。
- 集合(set):无序、独立且不重复的字符串元素的集合。
- 有序集合(sorted set):与集合类似,但每个元素都关联一个分数,使其可以按分数进行排序。
持久化
Redis可以将数据持久化到磁盘,以便在重启后恢复数据。它提供了两种持久化方式:快照(snapshotting)和日志(append-only file)。
Redis 常用命令
以下是Redis的一些常用命令:
字符串String操作命令:
SET key value
:设置键值对。GET key
:获取键对应的值。SETEX key [seconds] value: 设置指定key的值,并将key的过期时间设为senconds秒
SETNX key value:只有在key不存在时设置key的值
DEL key
:删除键值对。
哈希Hash操作命令:
HSET key field value
:在哈希表key中设置字段field的值设为value。HGET key field
:获取存储在哈希表中指定字段的值。-
HDEL key field :删除存储在哈希表中的指定字段
-
HKEYS key :获取哈希表中所有字段(field区)
-
HVALS key :获取哈希表中所有值(value区)
-
HGETALL key :获取在哈希表中指定key的所有字段和值
列表list操作命令
集合成员是不唯一的,可重复
LPUSH key value
:将值插入列表的左侧。RPUSH key value
:将值插入列表的右侧。LPOP key
:从列表的左侧弹出值。RPOP key
:从列表的右侧弹出值。LLEN key : 获取列表长度
BRPOP key1 [key2] timeout : 移出并获取列表的最后一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止
lrange mylist 0 -1,其中,lrange
是 Redis 的命令之一,用于获取指定 List 中指定范围的元素。mylist
是 List 的名称,0
表示起始索引,-1
表示结束索引。在 Redis 中,List 的索引从 0 开始,正数表示从左到右的索引,负数表示从右到左的索引。所以lrange mylist 0 -1
表示获取 List mylist
中从第一个元素到最后一个元素的范围。
集合set操作命令:
集合成员是唯一的,无序的
SADD key member
:向集合中添加成员。SMEMBERS key
:获取集合中的所有成员。SCARD key : 获取集合的成员数
SINTER key1 [key2] :返回给定所有集合的交集
SUNION key1 [key2] : 返回给定所有集合的并集
SDIFF key1 [key2] :返回给定所有集合的差集 key1-key2
SREM key member1 [member2] : 移除集合中的一个或多个成员
有序集合sorted set 操作命令
- 更多命令可以参考Redis中文网:https://www.redis.net.cn
通用命令
- KEYS pattern: 查找所有符合给定模式(pattern)的key
- EXISTS key : 检查给定key是否存在
- TYPE key : 返回key所存储的值的类型
- TTL key : 返回给定key的剩余生存时间(TTL,time to live) ,以秒为单位
- DEL key : 该命令用于在key存在是删除key
在Java中操作 Redis
在Java中操作Redis,有以下三种常用的库:Jedis、Lettuce和Redisson。
1.Jedis
导入maven依赖
<dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>3.6.0</version>
</dependency>
要在Java中操作Redis,我们可以使用Jedis客户端库。以下是一个简单的Java代码示例,展示了如何连接到Redis服务器并执行一些基本操作:
import redis.clients.jedis.Jedis;
public class JedisExample {public static void main(String[] args) {//1. 创建Jedis实例,指定Redis服务器的主机和端口Jedis jedis = new Jedis("localhost", 6379);// 连接Redis服务器jedis.connect();// 执行操作...jedis.set("username","ziyoujian");String value = jedis.get("username");System.out.println(value);// 关闭连接jedis.close();}
}
执行操作:通过Jedis实例,可以执行各种Redis的操作,如字符串操作、列表操作、集合操作、哈希操作和有序集合操作。
以下是一些基本操作的示例:
- 字符串操作:
// 存储字符串
jedis.set("key", "value");
// 获取字符串
String value = jedis.get("key");
- 列表操作:
// 添加元素到列表的开头 jedis.lpush("list", "value1", "value2"); // 获取列表范围内的元素 List<String> values = jedis.lrange("list", 0, -1);
- 集合操作:
// 添加元素到集合 jedis.sadd("set", "value1", "value2"); // 获取集合中的所有元素 Set<String> values = jedis.smembers("set");
- 哈希操作:
// 存储哈希的字段和值 jedis.hset("hash", "field1", "value1"); // 获取哈希字段的值 String value = jedis.hget("hash", "field1");
- 有序集合操作:
// 添加带有分数的元素到有序集合 jedis.zadd("sortedSet", 1.0, "value1"); jedis.zadd("sortedSet", 2.0, "value2"); // 获取有序集合范围内的元素 Set<String> values = jedis.zrange("sortedSet", 0, -1);
需要根据具体的业务需求选择合适的操作。 以上是使用Jedis操作Redis的入门步骤和示例。你可以根据自己的需求和具体情况进行进一步学习和实践。
2.Spring Data Redis
1.导入Spring Data Redis库:首先,需要在你的Java项目中导入Spring Data Redis库。你可以使用构建工具如Maven或Gradle,在项目的pom.xml
文件中添加以下依赖:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2. 配置Redis连接信息:在Spring Boot项目中,你可以在application.properties
或application.yml
文件中配置Redis的连接信息。示例配置如下
spring.redis.host=localhost
spring.redis.port=6379
下面是一个在单元测试中使用Spring Data Redis的示例:当你在使用RedisTemplate时,可以通过指定泛型来避免显式设置序列化器。默认情况下,Spring Data Redis会根据指定的泛型自动选择合适的序列化器。
@SpringBootTest
public class RedisExampleTest {@Autowiredprivate RedisTemplate<String, String> redisTemplate;@Testpublic void testRedisOperations() {// 存储字符串redisTemplate.opsForValue().set("key", "value");// 获取字符串String value = redisTemplate.opsForValue().get("key");assertEquals("value", value);}
}
在这个示例中,我们使用了@SpringBootTest
注解来启动Spring Boot应用程序的上下文。通过@Autowired
注解,我们将RedisTemplate注入到测试类中。 在testRedisOperations()
方法中,我们进行了两个操作:
- 使用
opsForValue().set()
方法将键值对存储到Redis中。 - 使用
opsForValue().get()
方法从Redis中获取存储的值,并使用assertEquals()
方法进行断言验证。 你可以根据需要在单元测试中执行其他Redis操作,如列表、集合、哈希和有序集合的操作,以及其他自定义操作。 请确保在单元测试之前已经正确配置了Redis连接信息,如在application.properties
或application.yml
配置文件中添加了合适的Redis连接配置。 这个示例可以帮助你了解如何在单元测试中使用Spring Data Redis进行操作,并验证结果是否符合预期。你可以根据需要扩展和修改这个示例来适应你的具体需求。
以下是一些基本操作的示例:
- 字符串操作:
// 存储字符串
redisTemplate.opsForValue().set("key", "value");
// 获取字符串
String value = redisTemplate.opsForValue().get("key");
- 列表操作
// 添加元素到列表的尾部 redisTemplate.opsForList().rightPush("list", "value1"); redisTemplate.opsForList().rightPush("list", "value2"); // 获取列表范围内的元素 List<String> values = redisTemplate.opsForList().range("list", 0, -1);
- 集合操作:
// 添加元素到集合 redisTemplate.opsForSet().add("set", "value1", "value2"); // 获取集合中的所有元素 Set<String> values = redisTemplate.opsForSet().members("set");
- 哈希操作:
// 存储哈希的字段和值 redisTemplate.opsForHash().put("hash", "field1", "value1"); // 获取哈希字段的值 String value = (String) redisTemplate.opsForHash().get("hash", "field1");
- 有序集合操作:
// 添加带有分数的元素到有序集合 redisTemplate.opsForZSet().add("sortedSet", "value1", 1.0); redisTemplate.opsForZSet().add("sortedSet", "value2", 2.0); // 获取有序集合范围内的元素 Set<String> values = redisTemplate.opsForZSet().range("sortedSet", 0, -1);
总结
我们可以使用Java来执行各种Redis操作,包括设置和获取键值对、操作哈希、列表、集合和有序集合等。 这就是关于Redis的入门指南,介绍了基本概念、常用命令以及在Java中操作Redis的示例。希望对你理解和使用Redis有所帮助!