Redis 是 Remote Dictionary Server 的缩写,是一个开源的、基于内存的键值存储数据库。它不仅支持简单的键值对,还支持丰富的数据结构,如字符串、哈希、列表、集合、位图、HyperLogLogs等。同时,Redis 也支持持久化,能够将内存中的数据异步保存到磁盘上,是内存数据库中最具代表性的产品之一。

与传统数据库相比,Redis 的主要优势在于速度极快,它将数据存储在内存中,而不是硬盘,这使得数据读写操作的速度比传统数据库快了数百倍,适合需要快速响应的场景。

1.Redis的简介

Redis是一个基于内存的key-value结构数据库

  • 基于内存存储,读写性能高
  • 适合存储热点数据(热点商品,咨讯,新闻)

官方网站
https://redis.io

安装好之后,启动redis
redis-server.exe

2.Redis的常用的数据类型

  • 字符串string 普通字符串
  • 哈希hash 散列,类似于Java的HashMap结构
  • 列表list 按照插入顺序排序,可以有重复元素
  • 集合set 无序集合,没有重复元素,类似Java的HashMap
  • 有序集合sorted set / zset 每个元素关联一个分数,根据分数升序排序,没有重复元素

3.Redis常用的操作

1.string操作

SET key value 设置指定key的值

GET key 获取指定key的值

SETEX key seconds value 设置指定key的值,并将key的过期时间设置为seconds秒

SETNX key value 只有key不存在时才设置

DEL key

2.哈希操作

HSET key field value 设置指定字段的值

HGET key field 获取指定字段的值

HDEL key field 删除指定字段

HKEYS key 获取哈希表的所有的字段

HVALS key 获取哈希表的所有的值

3.列表操作命令

HPUSH key value1 [value2] 将一个或者多个值插入到列表头部

LRANGE key start stop 获取列表指定范围内的元素

RPOP key 移除并获取列表最后一个元素

LLEN key 获取列表长度

4.集合操作命令

SADD key member1 [member2] 添加成员

SMEMBERS key 返回所有成员

SCARD key 获取集合的成员数

SINTER key1 [key2] 返回集合的交集

SUNION key1 [key1] 返回集合的并集

SREM key member1 [member2] 删除集合中一个或多个成员

5.有序集合

ZADD key score1 member1 [score2 member2] 添加成员

SRANGE key start stop [WITHSCORES] 通过索引区间返回有序集合中指定区间内的成员,加上WITHSCORES会返回分数

ZINCRBY key increment member 有序集合中对指定成员的分数加上增量increment

SREM key member1 [member2 …] 删除集合中一个或多个成员

6.通用操作

keys pattern 查找符合给定模式的key

exists key 检查是否存在key

type key 返回key的类型

del key 删除key

4.在Java中操作Redis

1.基本模版

1.导入坐标

1
2
3
4
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

2.配置redis数据源

1
2
3
4
5
6
spring:
redis:
host: localhost
port: 6379
password:
database: 0

3.新建配置类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
@Configuration
@Slf4j
public class RedisConfiguration {

public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){
log.info("开始创建redis模版对象");
RedisTemplate redisTemplate = new RedisTemplate();
//设置redis的连接工厂对象
redisTemplate.setConnectionFactory(redisConnectionFactory);
//设置redis的key的序列化器
redisTemplate.setKeySerializer(new StringRedisSerializer());
return redisTemplate;
}
}

4.获取操作对象

1
2
3
4
5
ValueOperations valueOperations = redisTemplate.opsForValue();
ListOperations listOperations = redisTemplate.opsForList();
HashOperations hashOperations = redisTemplate.opsForHash();
ZSetOperations zSetOperations = redisTemplate.opsForZSet();
SetOperations setOperations = redisTemplate.opsForSet();

2.操作string

1
2
3
4
5
6
7
@Test
public void test1() {
redisTemplate.opsForValue().set("city","纽约");
System.out.println(redisTemplate.opsForValue().get("city"));
redisTemplate.opsForValue().set("token","123", 3, TimeUnit.MINUTES);
redisTemplate.opsForValue().setIfAbsent("city","华盛顿");
}

3.操作hash

1
2
3
4
5
6
7
8
HashOperations hashOperations = redisTemplate.opsForHash();
hashOperations.put("100","name","tom");
hashOperations.put("200","age","20");
String name = (String)hashOperations.get("100","name");
System.out.println(name);
hashOperations.delete("100","name");
Set keys = hashOperations.keys("100");
List values = hashOperations.values("100");

4.操作list

1
2
3
4
5
6
7
8
9
10
11
@Test
public void test3(){
ListOperations listOperations = redisTemplate.opsForList();
listOperations.leftPushAll("200","age","20");
listOperations.leftPush("200","name");

listOperations.range("200",1,2);

Long size = listOperations.size("200");
System.out.println(size);
}

5.操作集合

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@Test
public void test4(){
SetOperations setOperations = redisTemplate.opsForSet();
setOperations.add("200","age","20");

Set members = setOperations.members("200");
System.out.println(members);

Set intersect = setOperations.intersect("key1", "key2");
System.out.println(intersect);

Set union = setOperations.union("key1", "key2");
System.out.println(union);

setOperations.remove("200","age","20");
}

6.操作有序集合

1
2
3
4
5
6
7
8
9
10
11
12
@Test
public void test5(){
ZSetOperations zSetOperations = redisTemplate.opsForZSet();
zSetOperations.add("key1","a",10);

Set key1 = zSetOperations.range("key1", 0, -1);
key1.forEach(System.out::println);

zSetOperations.incrementScore("key1","a",9);

zSetOperations.remove("key1","a");
}

7.通用操作

1
2
3
4
5
6
7
8
9
10
11
12
@Test
public void test6(){
Set keys = redisTemplate.keys("key1");
keys.forEach(System.out::println);

Boolean key11 = redisTemplate.hasKey("key1");

DataType key1 = redisTemplate.type("key1");


redisTemplate.delete("key1");
}