• Redis


    一、基于Docker安装Redis

     (1)拉取镜像

    docker pull redis:6.2.6

    (2)创建并启动容器

    docker run -d --name redis -p 6379:6379 --restart always redis:6.2.6

    (3)进入redis客户端工具

    docker exec -it redis redis-cli

    二、Redis简介

    Redis是以Key-Value形式进行存储的NoSQL数据库。 Redis是使用C语言进行编写的。

    平时操作的数据都在内存中,效率特高,读的效率110000次/s,写81000次/s,所以多把Redis当做缓存工具使用(在一些框架中还把Redis当做临时数据存储工具)。缓存工具:把数据库中数据缓存到Redis中,由于Redis读写性能较好,访问Redis中数据,而不是频繁访问数据库中数据。

    Redis以slot(槽)作为数据存储单元,每个槽中可以存储N多个键值对。Redis中固定具有16384个槽。理论上可以实现一个槽是一个Redis。每个向Redis存储数据的key都会进行crc16算法得出一个值后对16384取余就是这个key存放的solt位置。  

    虽然槽的大小是不固定的,但是Redis一个键值对最大大小为512M(String 类型Value)同时通过Redis Sentinel(哨兵)提供高可用,通过Redis Cluster(集群)提供自动分区。  

     三、Redis常见命令

     (1)key

            del key  删除
            keys *    查看所有key
            exists key 判断key是否存在
            type key 查看key的类型
            ttl key 查看key的剩余过期时间,单位秒。永久数据返回-1

    (2)String类型value值操作命令

            set key value : 设置值。如果值存在覆盖。
            get key : 查询key的value值
            setex key seconds value: 设置key并给定过期时间。如果key存在覆盖。
            incr key: 对key的值加一
            incrby key 数值: 对key的值增加或减少

    (3)Hash类型value值操作命令

            hset key field value:给key添加一个属性值
            hmset key field value  field value : 给key添加多个属性值

            hget key field: 获取某个属性的值
            hmget key field field:获取多个属性的值
            hgetall key : 取出所有属性值

            hkeys key: 获取所有属性名
            hvals key: 获取所有属性值

            hdel key field field: 删除多个属性
            hexists key field: 判断属性是否存在
            hlen key :获取里面有多少个属性

    (4)list类型value值操作命令

            lpush key value: 向列表最左端插入
            rpush key value: 向列表最右端插入
            linsert key before|after 值  新值: 向值的前面或后面插入新值
            lrange key 起始脚标  结束脚标: 查询列表一个区间的值
            lrange key 0 -1: 查询全部

            lrem key count value:删除count个value

            llen key: 长度

    (5)set类型value值操作命令 

            sadd key value value: 新增多个值。值是不能重复,没有顺序。
            smembers key : 查询全部
            scard key: 长度

    (6)sorted set类型value值操作命令

            zadd key score value score value:插入多个值,每个值必须绑定一个数值。
            zrange key 0 -1:升序查询
            zrem key value:删除
            zrevrange key 0 -1:降序查询

    (7)stream类型value值操作命令

            xadd key id field value: 插入值。

            id可以是*自动生成,也可以是具体值,但是具体值必须大于目前存在的id的最大值。


            xrange key - +:查询全部。

    四、使用Spring Boot整合Spring Data Radis

    (1)导入依赖


          org.springframework.boot
          spring-boot-starter-data-redis

    (2)配置redis地址

    spring.redis.host=ip地址

    (3)新建配置类

    1. package com.bjsxt.config;
    2. import org.springframework.context.annotation.Bean;
    3. import org.springframework.data.redis.connection.RedisConnectionFactory;
    4. import org.springframework.data.redis.core.RedisTemplate;
    5. import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
    6. import org.springframework.data.redis.serializer.StringRedisSerializer;
    7. import org.springframework.stereotype.Component;
    8. @Component
    9. public class RedisConfig {
    10. @Bean
    11. public RedisTemplate redisTemplate(RedisConnectionFactory factory) {
    12. RedisTemplate stringObjectRedisTemplate = new RedisTemplate<>();
    13. //配置key使用的序列化器
    14. stringObjectRedisTemplate.setKeySerializer(new StringRedisSerializer());
    15. //配置value使用的序列化器
    16. stringObjectRedisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
    17. //注入redis工程类
    18. stringObjectRedisTemplate.setConnectionFactory(factory);
    19. return stringObjectRedisTemplate;
    20. }
    21. }

    (4)使用

    1. package com.bjsxt.service.impl;
    2. import com.bjsxt.mapper.UserMapper;
    3. import com.bjsxt.pojo.User;
    4. import com.bjsxt.service.UserService;
    5. import org.springframework.beans.factory.annotation.Autowired;
    6. import org.springframework.data.redis.core.RedisTemplate;
    7. import org.springframework.stereotype.Service;
    8. @Service
    9. public class UserServiceImpl implements UserService {
    10. @Autowired
    11. private RedisTemplate redisTemplate;
    12. @Autowired
    13. private UserMapper userMapper;
    14. @Override
    15. public User selectById(int id) {
    16. //从redis中获取
    17. User user = (User) redisTemplate.opsForValue().get("user");
    18. if(user!=null && user.getId()==id){
    19. return user;
    20. }
    21. User user1 = userMapper.selectById(id);
    22. //保存到redis中
    23. redisTemplate.opsForValue().set("user",user1);
    24. return user1;
    25. }
    26. }

    (5)方法

    只要是Spring Data 的子项目被Spring Boot整合后都会有一个XXXXTemplate示实例。把Redis不同值得类型放到一个opsForXXX方法中。

    1. opsForValue : String值(最常用),如果存储Java对象或Java中集合时就需要使用序列化器,将对象序列化成JSON字符串。

    2. opsForList : 列表List

    3. opsForHash: 哈希表Hash

    4. opsForZSet: 有序集合Sorted Set

    5. opsForSet : 集合

    五、Spring Data Redis 序列化器介绍

    (1)JdkSerializationRedisSerializer

    是RedisTemplate类默认的序列化方式。JdkSerializationRedisSerializer使用JDK自带的序列化方式。

    (2)OxmSerializer

    以字符串格式的xml存储。解析起来也比较复杂,效率也比较低。

    (3)StringRedisSerializer

    只能对String类型序列化操作。

    (4)GenericToStringSerializer

    需要调用者给传递一个对象到字符串互转的Converter(转换器),使用比较麻烦。

    (5)Jackson2JsonRedisSerializer

    该序列化器可以将对象自动转换为Json的形式存储,效率高且对调用者友好。

    (6)GenericJackson2JsonRedisSerializer

    与Jackson2JsonRedisSerializer功能相似。底层依然使用Jackson工具包。相比Jackson2JsonRedisSerializer多了_class列,列里面存储类(新增时类型)的全限定路径,从Redis取出时根据_class类型进行转换,解决了泛型问题。

  • 相关阅读:
    opencv 的腐蚀效果(3)
    单阶段目标检测与双阶段目标检测的联系与区别
    夯实网络安全基石,筑牢网络安全防线
    【Qt】常用控件或属性(1)
    JdbcTemplate环境准备_java培训
    【nginx】代理配置
    VK1056B/C计算器,跑步机,电子秤LCD驱动方案,段码液晶显示芯片IC技术资料
    解决iView中InpuNuber限定小数位时,输入光标经常后移的问题
    HarmonyOS简介
    QT - 简易画板
  • 原文地址:https://blog.csdn.net/weixin_53455615/article/details/127762694