常用Redis命令整理

启动redis服务端

1
redis-server.exe redis.windows.conf

启动redis客户端

1
2
3
4
5
redis-cli.exe
后接参数
-h 路由
-p 端口
-a 密码

Redis数据类型

  1. string

  2. hash

  3. list

  4. set 集合

  5. sorted set/zset 有序集合:集合中的每个元素关联一个分数(score),根据分数升序排列

String命令

  • SET key value #设置指定key的值
  • GET key #获取指定key的值
  • SETEX key seconds value #设置指定key的值,并将key 的过期时间设为seconds秒
  • SETNX key value #只有在key不存在时设置key的值

hash命令

  • HSET key field value #将哈希表key中的字段field的值设为value
  • HGET key field #获取存储在哈希表中指定字段的值
  • HDEL key field #删除存储在哈希表中的指定字段
  • HKEYS key #获取哈希表中的所有字段
  • HVALS key #获取哈希表中的所有值

1

list命令

  • LPUSH key value1 [value2] #将一个或多个值插入到列表头部(左边)
  • LRANGE key start stop #获取列表指定范围内的元素
  • RPOP key #移除并获取列表最后一个元素(右边)
  • LLEN key # 获取列表长度

set操作命令

  • SADD key member1 [member2] #向集合添加一个或多个成员
  • SMEMBERS key #返回集合中的所有成员
  • SCARD key #获取集合的成员数
  • SINTER key1 [key2] #返回给定所有集合的交集
  • SUNION key1 [key2] #返回所有给定集合的并集
  • SREM key member1 [member2] #删除集合中一个或多个成员

zset 命令

  • ZADD key score1 member1 [score2 member2] #向有序集合添加一个或多个成员
  • ZRANGE key start stop [WITHSCORES] #通过索引区间返回有序集合中指定区间内的成员
  • ZINCRBY key increment member #有序集合中对指定成员的分数加上增量
  • incrementZREM key member [member …] #移除有序集合中的一个或多个成员

通用命令

  • KEYS pattern #查找所有符合给定模式( pattern)的 key
  • EXISTS key #检查给定 key 是否存在
  • TYPE key #返回 key 所储存的值的类型
  • DEL key #该命令用于在 key 存在是删除 key

在Java中操作Redis

以使用Spring Data Redis为例

  1. 导入Spring Data Redis的maven坐标
  2. 配置Redis数据源
  3. 编写配置类,创建RedisTemplate对象
  4. 通过RedisTemplate对象操作Redis
  • SpringData是Spring中数据操作的模块,包含对各种数据库的集成,其中对Redis的集成模块就叫做SpringDataRedis
  • 官网地址:https://spring.io/projects/spring-data-redis
    • 提供了对不同Redis客户端的整合(Lettuce和Jedis)
    • 提供了RedisTemplate统一API来操作Redis
    • 支持Redis的发布订阅模型
    • 支持Redis哨兵和Redis集群
    • 支持基于Lettuce的响应式编程
    • 支持基于JDK、JSON、字符串、Spring对象的数据序列化及反序列化
    • 支持基于Redis的JDKCollection实现
  • SpringDataRedis中提供了RedisTemplate工具类,其中封装了各种对Redis的操作。并且将不同数据类型的操作API封装到了不同的类型中:
API 返回值类型 说明
redisTemplate.opsForValue() ValueOperations 操作String类型数据
redisTemplate.opsForHash() HashOperations 操作Hash类型数据
redisTemplate.opsForList() ListOperations 操作List类型数据
redisTemplate.opsForSet() SetOperations 操作Set类型数据
redisTemplate.opsForzSet() ZSetOperations 操作SortedSet类型数据
redisTemplate 通用的命令

1.导入Spring Data Redis的maven坐标

SpringBoot已经提供了对SpringDataRedis的支持,使用起来非常简单

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<!--redis依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!--common-pool-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
<!--Jackson依赖-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>

2.配置redis

1
2
3
4
5
6
7
8
9
10
11
spring:
redis:
host: 101.42.225.160
port: 6379
password: root
lettuce:
pool:
max-active: 8
max-idle: 8
min-idle: 0
max-wait: 100ms

3.注入RedisTemplate

因为有了SpringBoot的自动装配,我们可以拿来就用

1
2
3
java
@Autowired
private RedisTemplate redisTemplate;

for example:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
package com.sky.test;

import com.sky.SkyApplication;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.*;

import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit;


@SpringBootTest(classes = SkyApplication.class)
public class SpringDataRedisTest {

@Autowired
private RedisTemplate redisTemplate;

@Test
public void testRedisTemplate() {
System.out.println(redisTemplate);
//创建一个ValueOperations对象,通过这个对象来操作字符串类型
ValueOperations valueOperations = redisTemplate.opsForValue();
//其他类型数据同理
HashOperations hashOperations = redisTemplate.opsForHash();
ListOperations listOperations = redisTemplate.opsForList();
SetOperations setOperations = redisTemplate.opsForSet();
ZSetOperations zSetOperations = redisTemplate.opsForZSet();
}

/**
* 操作字符串类型
*/
@Test
public void testString() {
//set get setex setnx
//set
redisTemplate.opsForValue().set("city","北京");
//get
String city = (String) redisTemplate.opsForValue().get("city");
System.out.println(city);
//setex
redisTemplate.opsForValue().set("code","1212",3, TimeUnit.MINUTES);
redisTemplate.opsForValue().setIfAbsent("lock","1");
redisTemplate.opsForValue().setIfAbsent("lock","2");
}

@Test
public void testHash() {
//hset hget hdel hkeys hvals
HashOperations hashOperations = redisTemplate.opsForHash();

hashOperations.put("100","name","tom");
hashOperations.put("100","age","20");

String name = (String) hashOperations.get("100", "name");
System.out.println(name);

Set keys = hashOperations.keys("100");
System.out.println(keys);

List value =hashOperations.values("100");
System.out.println(value);

hashOperations.delete("100","age");
}

}

常见用法:

使用RedisTemplate

Spring Boot提供了RedisTemplate来方便地操作数据。在代码中注入RedisTemplate并使用它来进行CRUD操作:

Redis常用的数据类型:

  • String

  • Hash

  • List

  • Set

  • zSet

  • Sorted set

RedisTemplate 常用 API

String

查询
  1. 判断是否又key所对应的值

    1
    redisTemplete.hasKey(key);
  2. 取出key值所对应的值

    1
    redisTemplete.opsForVAlue().get(key);
  3. 删除key所对应的值

    1
    redisTemplete.delete(key);

黑马点评

短信功能实现(基于Session实现登录流程)

  1. 发送验证码
    用户在提交手机号后,会校验手机号是否合法,如果不合法,则要求用户重新输入手机号
    如果手机号合法,后台此时生成对应的验证码,同时将验证码进行保存,然后再通过短信的方式将验证码发送给用户
  2. 短信验证码登录、注册
    用户将验证码和手机号进行输入,后台从session中拿到当前验证码,然后和用户输入的验证码进行校验,如果不一致,则无法通过校验,如果一致,则后台根据手机号查询用户,如果用户不存在,则为用户创建账号信息,保存到数据库,无论是否存在,都会将用户信息保存到session中,方便后续获得当前登录信息
  3. 校验登录状态
    用户在请求的时候,会从cookie中携带JsessionId到后台,后台通过JsessionId从session中拿到用户信息,如果没有session信息,则进行拦截,如果有session信息,则将用户信息保存到threadLocal中,并放行

40