redis简介:
- Redis是一个高性能的key-value数据库。
- Redis对数据的操作都是原子性的(数据的操作是不可分割的)
|数据类型 操作 | string | hash | list | set | zset |
---|---|---|---|---|---|
赋值 | SET key value | HSET key field value | LPUSH key v1 RPUSH key v2 v3 | SADD key v1 v2 v2 | ZADD key score1 member1 [score2 member2] |
取值 | GET key value | HGET key field | LRANGE key 0 1 | SMEMBERS key | RANGE key start stop [WITHSCORES] |
取多个值 | MGET k1 k2 | HGET key f1 f2 HGETALL car | LRANGE key 0 3 | null | null |
删除 | DEL key | HDEL key field | ~~ | SREM key v2 v3 | ZREM scoreboard key |
redis数据类型以及方法:
String(字符串)
常用命令:set, get,setex, incr, incrby, desr, keys, append, strlen
-
赋值和取值
SET name “启明” GET name
-
设置时间
SETEX key seconds value // 键 多长时间后失效 值 SETEX name 30 “启明” // name “启明” 30秒后失效(get获取不到了就)
-
递增/递减 数字
INCR num //若键值不是整数时,则会提示错误。 INCRBY num 2 //增加指定整数 INCRBY num 2.7 //增加指定浮点数 DESR num //递减数字
-
其他
keys list* //列出匹配的key APPEND name "dai" //追加值 STRLEN name //获取字符串长度 MSET name tyson gender male //同时设置多个值 MGET name gender //同时获取多个值 GETBIT name 0 //获取0索引处二进制位的值 FLUSHDB //删除当前数据库所有的key FLUSHALL //删除所有数据库中的key
-
scan命令
- 后续补充
hash(哈希)
常用命令:hset, hget, hmset, hmget, hgetall, hdel, hkeys, hvals
- 在value里面又分为field和value。比较适合存储对象,包括属性和值。
- 赋值和取值
获取哈希表中全部field 获取哈希表中全部value HSET car price 500 //格式:HSET key field value HSET car color blue HGET car price // 获取值 HMSET car price 500 color blue //设置多个字段的值 HMGET car price color // 获取多个字段的值 HGETALL car // 获取多个字段的值
list(列表)
常用命令:lpush, rpush, lpop, rpop, lrange, lrem
set(集合)
zset(sorted set 有序集合)
java中操作redis
- Redis的Java客户端:Jedis、Lettuce、Redisson、Spring Data Redis。(所有的方法和Redis是一一对应的)
- SpringData Redis是Spring的一部分,对Redis底层开发包进行了高度封装。在Spring项目中,可以使用Spring Data Redis来简化操作
1.导入Spring Data Redis的maven坐标
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
```
2.配置Redis数据源
```yml
spring:
redis:
host: localhost
port: 6379
database: 0
3.编写配置类,创建RedisTemplate对象
-
config包下创建RedisConfiguration类,写入如下代码:
@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()); return redisTemplate; } }
4.通过RedisTemplate对象操作Redis
- 通过依赖注入RedisTemplate
@Autowired private RedisTemplate redisTemplate; // 方法里:赋值取值 redisTemplate.opsForValue().set(key,value); redisTemplate.opsForValue().get(KEY);
Spring Cache
- SpringCache是Spring提供的缓存框架,提供了基于注解的缓存功能。
- SpringCache提供了一层抽象,底层可以切换不同的缓存实现(只需要导入不同的Jar包即可),如EHCache,Caffeine,Redis。
关键注解:
- @EnableCaching:需要在Spring Boot项目的启动类上使用,来开启缓存支持
- @Cacheable:方法执行前先检查缓存中是否存在数据。如果存在,则直接返回缓存中的结果,不再执行实际的方法。如果不存在,则执行实际方法并将结果保存
- 例:@Cacheable(value = “userCache”, key = “#user.id”)
- 例:@Cacheable(cacheNames = “userCache”, key = “#reslt.id”)
- 这里cacheNames或者value指定了缓存的名称,
- key则定义了缓存的key,通常使用方法参数或返回结果来生成
- @CachePut:将方法返回值放回缓存中这意味着每次方法执行后,其结果都会被更新到缓存中。
- 例:跟上边一样
- @CacheEvict:将一条或多条数据删除
- 例:@CacheEvict(cacheNames = “keyCache”,allEntries = true)
- 删除缓存名称为keyCache的所有数据
- 例:@CacheEvict(cacheNames = “keyCache”,key=“#id”)
- 删除key为id的数据
- key的形式 keyCache::10
- 例:@CacheEvict(cacheNames = “keyCache”,allEntries = true)
项目中使用:
- 需要的依赖:
// 这个是redis的 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> // 这个是cache需要的 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-cache</artifactId> </dependency>
- yml里配置参数
redis: host: 121.43.167.61 port: 6379 database: 1
- 在启动类上加@EnableCaching
- 方法上添加响应的注解