Redis

Redis

Redis是数据库

是nosql数据库

key-value形式存储数据

内存中存储

角色:==数据库,缓存==,消息中间件

基本数据类型:String、list、set、zset、hash

支持持久化:能保存数据到磁盘中

安装Redis

在redis目录下执行

redis-server.exe --service-install redis.windows.conf

常用指令

String

Set key value [10] 
存储基本的字符串,数字  set age 10
获取数据	get age
数字类型 自增  incr age  (i++)
			incrby age 10 (i+10)
		自减 decr  age (i--)
			decrby age 10  (i-10)
设置带过期时间的key   setex name 100 小明    setex key 秒  值

List

lpush v1,v2...  是在list的前面(头部,左边)增加值
rpush 			尾部,右边增加值
lpop booklist  删除 (左边,头部)第一个元素
llen booklist  list长度
lindex booklist 2  查询索引下的值
lset booklist 2 遮天		替换某个位置的值
lrange booklist 0 2		分页
  

Hash(map)

key 	feild	value
hset	key  feild value				单条添加
hmset   key  field1 value1 field2 value2	多条批量添加
hgetall bookmap		查询所有的
hget bookmap 1001	单条
hmget bookmap 1002 1004 1001	批量查询
hkeys bookmap	所有的key
hvals bookmap	所有的值
hdel bookmap 1001		删除某个feild值

Set

无序集合,成员唯一(不可重复)
sadd book1  添加数据
smembers book1  查询 key下的所有数据
sdiff book1 book2	查询的是第一个key中存在,第二个key中不存在的值
sdiffstore book3 book1 book2 查询book1中存在的值book2中不存在的值存入book3
sinter book1 book2	交集
sinterstore book4 book1 book2	查询book1和book2的交集并且存入book4
sunion book1 book2		并集
sunionstore book5 book1 book2	查询book1和book2的并集,存入book5

ZSet

key  score value
key  分数   值
zadd giftrank  100  小明  添加数据
zincrby giftrank 900 小明  key增加数据,如果之前没有值,添加,如果有值,score +900
zrank giftrank 小明		正序,获取小明的排名
zrevrank giftrank 小明	逆序,获取小明的排名
zrange giftrank 0 2			正序查询前三名
zrevrange giftrank 0 2		逆序查询前三名
zscore giftrank 小明			查询分数

其他指令

del book1  删除某个key
exists book2	判断key是否存在
expire book2 10	设置过期时间

SpringBoot整合Redis

整合

引入依赖

<!--redis:RedisAutoConfiguration-->
<dependency>
    <groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

配置文件

  redis:
    password: javasm
    host: 127.0.0.1
    port: 6379

缓存

    @Override
    public PnGoods getByIdFromRedis(Integer id) {
        //通过id 去redis查询数据,如果查到了,返回数据,如果查询不到,去数据库查询,然后把数据存入redis,再返回数据
        //通过key  从Redis中 获取数据
        String key = "goods:id:"+id;
        Object o = redisTemplate.opsForValue().get(key);
        if (o == null){
            //Redis中没有数据
            PnGoods goods = getById(id);
            if (goods!=null){
                redisTemplate.opsForValue().set(key,goods);
            }
            return goods;
        }
        //查询到了数据
        return (PnGoods) o;
    }

配置类

@Configuration
public class RedisConfig {

    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
        RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
        template.setConnectionFactory(factory);
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
        ObjectMapper om = new ObjectMapper();
        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        om.activateDefaultTyping(LaissezFaireSubTypeValidator.instance , ObjectMapper.DefaultTyping.NON_FINAL);
        jackson2JsonRedisSerializer.setObjectMapper(om);
        StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
        // key采用String的序列化方式
        template.setKeySerializer(stringRedisSerializer);
        // hash的key也采用String的序列化方式
        template.setHashKeySerializer(stringRedisSerializer);
        // value序列化方式采用jackson
        template.setValueSerializer(jackson2JsonRedisSerializer);
        // hash的value序列化方式采用jackson
        template.setHashValueSerializer(jackson2JsonRedisSerializer);
        template.afterPropertiesSet();
        return template;
    }
}
@Override
    public PnGoods getByIdFromRedis(Integer id) {
        //通过id 去redis查询数据,如果查到了,返回数据,如果查询不到,去数据库查询,然后把数据存入redis,再返回数据
        //通过key  从Redis中 获取数据
        String key = "goods:id:"+id;
        Object o = redisTemplate.opsForValue().get(key);
        if (o !=null){
            //查询到了数据
            return (PnGoods) o;
        }
        //Redis中没有数据
        PnGoods goods = getById(id);
        if (goods!=null){
            redisTemplate.opsForValue().set(key,goods);
            return goods;
        }
        //查询不到数据的时候,防止缓存穿透
        redisTemplate.opsForValue().set(key,new PnGoods(),30, TimeUnit.SECONDS);
        return null;
    }

缓存注解

1.启用redis注解识别
@EnableCaching //缓存注解识别
2.在service层的查询方法使用@Cacheable注解,表示执行方法前先查询缓存,缓存中没有再执行方法,并把方法返回值添加缓存。
3.在service层的更新与删除方法使用@CacheEvict注解,表示清除缓存中指定的key。
//执行方法时,先去缓存roles:1,缓存没有数据执行方法,把方法返回结果加入缓存
//@Cacheable(cacheNames = "userinfo",key="#id")
// UserModel getById(Integer uid);
@Cacheable(cacheNames = "roles",key = "#id")
public Role getById(String id) {
	return super.getById(id);
}

//执行update方法时。先执行方法,方法完成后删除缓存
@CacheEvict(cacheNames = "roles",key="#obj.id")
public boolean update(Role obj) {
	return super.update(obj);
}

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值