1.redis简介
redis是一个基于内存的key-kalue结构的数据库(mysql是数据文件存在磁盘上的,通过二维表存储数据)
- 一个key-value就是一条数据
- 读写性能更高
- 适合存储热点数据(热点商品、资讯、新闻 短时间内大量访问的数据)
- 企业应用广泛
中文官网:https://www.redis.net.cn/
1.2redis下载
redis属于绿色软件,可以直接解压后使用
2.redis中的数据类型
2.1五种最常用的数据类型
2.2数据类型的特点 
3.redis中的常用命令
1.字符串操作命令
2.哈希操作命令
3.列表操作命令
4.集合操作命令
5.有序集合操作命令
6.通用命令
7.在java中操作Redis
第一种Jedis比较贴近与redis
lettuce性能比较优秀
sdr封装了
7.1如何使用Spring Data Redis
3.如何在Java中使用redis
3.1引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
3.2填写信息
在yml文件中填写相关信息
注意:一定在Spring之下!!!
spring:
profiles:
active: dev
main:
allow-circular-references: true
datasource:
druid:
driver-class-name: ${sky.datasource.driver-class-name}
url: jdbc:mysql://${sky.datasource.host}:${sky.datasource.port}/${sky.datasource.database}?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true
username: ${sky.datasource.username}
password: ${sky.datasource.password}
redis:
host: {$localhost}
port: {$port}
password: {$password}
database: {$database}
3.3创建redis配置类
这个类主要提供一个redis登陆的功能,通过IOC中的一个redis实体来使用redis
@Configuration
@Slf4j
public class RedisConfiguration {
@Bean
public RedisTemplate redisTemplate(RedisConnectionFactory RedisConnectionFactory){
log.info("开始创建redis模板对象..");
RedisTemplate redisTemplate=new RedisTemplate();
//设置redis链接工厂对象
redisTemplate.setConnectionFactory(RedisConnectionFactory);
//设置redis key的序列化器
redisTemplate.setKeySerializer(new StringRedisSerializer());
//设置redis Value的序列化器
// redisTemplate.setValueSerializer(new StringRedisSerializer());
return redisTemplate;
}
}
3.4调用函数
这里将test注解注释掉避免每次运行都要运行test
//@SpringBootTest
public class SpringDataRedisTest {
@Autowired
private RedisTemplate redisTemplate;
/**
* 测试IOC容中是否有对象
*/
@Test
public void restRedisTemplate(){
System.out.println(redisTemplate);
ValueOperations valueOperations = redisTemplate.opsForValue();
HashOperations hashOperations = redisTemplate.opsForHash();
ListOperations listOperations = redisTemplate.opsForList();
SetOperations setOperations = redisTemplate.opsForSet();
ZSetOperations zSetOperations = redisTemplate.opsForZSet();
}
/**
* 测试String类型命令
*/
@Test
public void testString(){
// set get setex setnx
//添加key-value
redisTemplate.opsForValue().set("city","beijng");
String city = (String)redisTemplate.opsForValue().get("city");
System.out.println(city);
//设置过期时常
redisTemplate.opsForValue().set("code","1234",10, TimeUnit.SECONDS );
//如果不存在才添加
redisTemplate.opsForValue().setIfAbsent("lock","1" );
redisTemplate.opsForValue().setIfAbsent("lock","2" );
}
/**
* 测试Hash类型数据
*/
@Test
public void testHash(){
//hset hget hdel hkeys hvals
//hset插入hash表中的数据
HashOperations hashOperations = redisTemplate.opsForHash();
hashOperations.put("300","name","tom");
hashOperations.put("300","age","20");
//get
String name = (String)hashOperations.get("300", "name");
//获取集合所有的keys
Set keys = hashOperations.keys("300");
System.out.println(keys);
//获取所有的values
List values = hashOperations.values("300");
System.out.println(values);
//hdel删除字段
hashOperations.delete("100", "name");
}
/**
* 测试列表类型数据
*/
@Test
public void testList(){
//lpush lrange rpop llen
ListOperations listOperations = redisTemplate.opsForList();
//lpush
listOperations.leftPushAll("mylist3","a","b","c");
listOperations.leftPush("mylist3","d");
List mylist3=listOperations.range("mylist3",0,-1);
System.out.println("第一次插入后:"+mylist3);
String pop =(String) listOperations.rightPop("mylist3");
System.out.println("被弹出的元素是:"+pop);
mylist3=listOperations.range("mylist3",0,-1);
System.out.println("第一次弹出后:"+mylist3);
Long size = listOperations.size("mylist3");
System.out.println(size);
}
/**
* 测试集合类型的数据
*/
@Test
public void testSet(){
SetOperations setOperations = redisTemplate.opsForSet();
setOperations.add("set1","a","b","c","f");
setOperations.add("set2","a","b","c","d");
Set set1 = setOperations.members("set1");
System.out.println("set1:"+set1);
Long set1Size = setOperations.size("set1");
System.out.println("set1:"+set1Size);
Set intersect = setOperations.intersect("key1", "key2");
System.out.println("intersect:"+intersect);
Set union = setOperations.union("key1", "key2");
System.out.println("union:"+union);
setOperations.remove("set1", "f");
Set set1_remove = setOperations.members("set1");
System.out.println("set1_remove:"+set1_remove);
}
/**
* 测试有序集合数据
*/
@Test
public void testZset(){
ZSetOperations zSetOperations = redisTemplate.opsForZSet();
zSetOperations.add("zset1","a",10);
zSetOperations.add("zset1","b",12);
zSetOperations.add("zset1","c",9);
Set zset1=zSetOperations.range("zset1",0,-1);
System.out.println("zset"+zset1);
zSetOperations.incrementScore("zset1","c",10);
zSetOperations.remove("zset","a","b");
}
/**
* 测试通用命令
*/
@Test
public void testNomal(){
Set keys = redisTemplate.keys("*");
System.out.println("keys="+keys);
boolean name= redisTemplate.hasKey("name");
System.out.println("name="+name);
Boolean set1 = redisTemplate.hasKey("set1");
for(Object key : keys){
DataType dataType= redisTemplate.type(key);
System.out.println(dataType);
}
redisTemplate.delete("mylist");
}
}