目录
[4.2:Spring Data Redis使用方式](#4.2:Spring Data Redis使用方式)
一:Redis入门
1.1:Redis简介
Redis是一个基于内存的Key-Value结构数据库。
Redis与SQL不同的是,SQL是以二维表存储数据,Redis以键值对存储数据。
优点:
1:基于内存存储,读写性能高
2:适合存储热点数据(热点商品,资讯,新闻)-->特点:访问量大的数据。
1.2:Redis下载与安装
1.2.1:Windows版的Redis下载与安装
将其下载好的window版的Redis进行下载后,解压缩,会得到下面的目录。
1.3:Redis服务启动与安装
1.3.1在解压后的文件中输入cmd
1.3.2:在cmd中输入命令
redis-server.exe redis.windows.conf
1.3.3:启动成功
1.3.4:连接服务端
重复1 2 两个步骤,重新开启一个cmd命令行,输入
redis-cli.exe
当出现底下这个代码时:则代表连接到服务端
连接到别的Redis服务
1.3.5:停止Redis服务
二:Redis数据类型
2.1:简单介绍5种数据类型
2.2:5种数据类型的特点
***字符串:**普通字符串,Redis最简单的数据类型。
***哈希:**也叫散列,类似于Java中HashMap结构,常用来存储Java中的对象。
***列表:**按照插入顺序排序,可以有重复的元素,类似于Java中的LinkedList。
***集合:**无序集合,类似于Java中的HashSet
***有序集合:**每个元素会关联一个分数,根据分数升序,无重复元素
三:Redis常用命令
3.1:字符串操作命令
|-------------------------|----------------------------------------|
| SET key value | 设置指定key的值 |
| Get key | 获取指定key的值 |
| SETEX key seconds value | 设置指定key的值,并将key的过期时间设为seconds秒(常用在验证码) |
| SETNX key value | 只有存在key不存在时,设置key的值 |
代码演示:
OK
> get name
jack
> get abc
null
> setex code 30 1234
OK
> get code
1234
> get code
null
3.2:哈希操作命令
|----------------------|----------------------------|
| HSET key field value | 将哈希表key中的字段fileld的值设为value |
| HGTE key field | 获取存储在哈希表种指定字段的值 |
| HDEL key field | 删除存储在哈希表种的指定字段 |
| HKEYS key | 获取哈希表中的字段 |
| HVALS key | 获取哈希表中所有值 |
> Hset 100 name xiaoming
1
> hset 100 age 22
1
> Hget 100 name
xiaoming
> Hget 100 age
22
> Hdel 100 name
1
> Hset 100 name zhangsan
1
> HKEYS key
> HKEYS 100
age
name
> HVA
ERR unknown command 'hva'
> HVALS 100
22
zhangsan
3.3:列表操作命令
|----------------------------|---------------|
| LPUSH key value1[value2] | 将一个或多个插入到列表头部 |
| LRIGHT key start stop | 获取列表指定范围内的元素 |
| RPOP key | 移除并获取列表最后一个元素 |
| LIEN key | 获取列表长度 |
> lpush mylist a b c
3
0代表从列表的第一个元素开始,-1代表列表的最后一个元素
> lrange mylist 0 -1
d
c
b
a
rpop命令删除列表的最后一个元素。rpop key
> rpop mylist
a
> Llen mylist
3
3.4:集合操作命令 (无序,不可重复)
|--------------------------|--------------|
| sadd key member1 member2 | 向集合添加一个或多个成员 |
| smembers key | 返回集合中的所有成员 |
| scard key | 返回集合中的成员数 |
| sinter key1 key2 | 返回给定集合中的交集 |
| sunion key1 key2 | 返回所有给定集合的并集 |
| srem key member1 member2 | 删除集合中一个或多个集合 |
添加集合 set1 set2
> sadd set1 1 2 3 4 5
5
> sadd set2 1 2 3 4 10
5
查询当前集合的成员
> smembers set1
1
2
3
4
5
查询当前集合的成员的个数
> scard set1
5
求交集
> sinter set1 set2
1
2
3
4
求并集
> sunion set1 set2
1
2
3
4
5
10
删除集合中的元素
> srem set1 1
1
3.5:有序集合操作命令 (有序)
|----------------------------------------|----------------|
| zadd key score1 member1 score2 member2 | 向有序集合添加一个或多个成员 |
| zrange key start stop【withscores】 | 通过索引返回集合中的成员 |
| zincrby key increment member | 分数+increament |
| zrem key member | 删除集合中的元素 |
在有序集合中添加元素:按刚开始所赋予的分数进行排序,按照升序进行排序
> zadd zset1 10.0 a 10.5 b
2
> zadd zset1 10.2 c
1
> zrange zset1 0 -1 withscores
a
10
c
10.199999999999999
b
10.5
给集合中的某一个元素增加score值
> zincrby zset1 5.0 a
15
删除某一个元素
> zrem zset1 a
1
3.6:通用命令
|--------------|-------------------|
| keys pattern | 查询所有符合给定模式的key |
| exists key | 检查给定key是否存在 |
| type key | 返回key所储存的值的类型 |
| del key | 该命令用于在key存在是删除key |
查看所有的key值
> keys *
set1
key1
person
zset1
name
set2
100
mylist
查看key的类型
> type 100
hash
判断key存不存在
> EXISTS 100
1
删除key值
> del 100
1
四:在Java中操作Redis
4.1:Redis的Java客户端
1:Jedis
2:Lettuce:基于多线程实现的redis
3:Spring Data Redis:将jedis和Lettuce进行高度封装。
4.2:Spring Data Redis使用方式
操作步骤
4.2.1:导入Spring Data Redis 的maven坐标
XML<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> <version>2.7.3</version> </dependency>
4.2.2:配置Redis数据源:可以配置database(默认是0-15个库)
XMLspring: redis: host: localhost port: 6379
4.2.3:编写配置类,创建RedisTemplate对象
java@Configuration @Slf4j public class RedisConfiguration { //返回的是一个RedisTemplate对象,并且添加redis连接的工厂 @Bean public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){ log.info("开始创建redis模板对象"); RedisTemplate redisTemplate = new RedisTemplate(); //设置redis的连接工厂对象 redisTemplate.setConnectionFactory(redisConnectionFactory); //设置redis的序列化器 redisTemplate.setKeySerializer(new StringRedisSerializer()); return redisTemplate; } }
生成测试类:
java@SpringBootTest class RedisConfigurationTest { @Autowired private RedisTemplate redisTemplate; @Test void redisTemplate() { System.out.println(redisTemplate); //操作字符串 ValueOperations valueOperations = redisTemplate.opsForValue(); //操作哈希 HashOperations hashOperations = redisTemplate.opsForHash(); //操作链表 ListOperations listOperations = redisTemplate.opsForList(); //操作无序集合 SetOperations setOperations = redisTemplate.opsForSet(); //操作有序集合 ZSetOperations zSetOperations = redisTemplate.opsForZSet(); } }
4:通过RedisTemplate对象操作Redis
4.3:5种类型操作方式
4.3.1:字符串指令在Java中的使用
在测试类中使用:
java
@Test
public void testString(){
//set get setex setnx
ValueOperations valueOperations = redisTemplate.opsForValue();
valueOperations.set("city","北京");
String city =(String) valueOperations.get("city");
System.out.println(city);
valueOperations.set("code","1234",3, TimeUnit.MINUTES);
//setNx
valueOperations.setIfAbsent("lock",1);
valueOperations.setIfAbsent("lock",1);
}
4.3.2:哈希指令在Java中的使用
java
@Test
public void testHash(){
//hset
HashOperations hashOperations = redisTemplate.opsForHash();
hashOperations.put("Person","name","张三");
hashOperations.put("Person","age",20);
//hget
String name = (String)hashOperations.get("Person", "name");
//删除hash中对应的key
Set person = hashOperations.keys("Person");
System.out.println(person);
List person1 = hashOperations.values("Person");
System.out.println(person1);
hashOperations.delete("Person","age");
}
4.3.3:列表指令在Java中的使用
java
@Test
public void testList(){
ListOperations listOperations = redisTemplate.opsForList();
//lput
listOperations.leftPushAll("mylist","a","b","c");
listOperations.leftPush("mylist","d");
//lrange
List mylist = listOperations.range("mylist", 0, -1);
System.out.println(mylist);
//rpop
listOperations.rightPop("mylist");
//llen
Long mylist1 = listOperations.size("mylist");
System.out.println(mylist1);
}
4.3.4:无序集合指令在java中的使用
java
@Test
public void testSet(){
SetOperations setOperations = redisTemplate.opsForSet();
//sadd
setOperations.add("set1","a","b","c","d");
setOperations.add("set2","a","b","c","y");
//smember 获取集合中的所有成员
Set set1 = setOperations.members("set1");
System.out.println(set1);
//ssize 获取集合中成员的个数
Long set11 = setOperations.size("set1");
System.out.println(set11);
//求两个集合中的交集
Set intersect = setOperations.intersect("set1", "set2");
System.out.println(intersect);
//求两个集合的并集
Set union = setOperations.union("set1", "set2");
System.out.println(union);
//删除集合中的元素
setOperations.remove("set1","a");
}
运行结果:
4.3.5:有序集合在Java中的使用
java
@Test
void testZset(){
ZSetOperations zSetOperations = redisTemplate.opsForZSet();
//zadd
zSetOperations.add("zset1","a",10.0);
zSetOperations.add("zset1","b",10.1);
zSetOperations.add("zset1","c",10.2);
//zrange
zSetOperations.range("zset1",0,-1);
//zincrby
zSetOperations.incrementScore("zset1","c",10);
//zream
zSetOperations.remove("zset1","a");
}
4.3.6:通用命令
java
@Test
void testCommon(){
//判断有没有包含某个字符的key值
Set keys = redisTemplate.keys("*");
System.out.println(keys);
//hasKey判断有没有key
Boolean zset11 = redisTemplate.hasKey("zset1");
System.out.println(zset11);
DataType zset1 = redisTemplate.type("zset1");
System.out.println(zset1);
redisTemplate.delete("mylist");
}