精华内容
下载资源
问答
  • 2019-12-26 14:34:30
    public class MiaoshaController implements InitializingBean {
    
        /**
         *  系统初始化 要做的事情
         * @throws Exception
         */
        @Override
        public void afterPropertiesSet() throws Exception {
    
            List<GoodsVO> goodsList = goodsService.listGoodsVO();
            if (goodsList == null){
                return;
            }
            for (GoodsVO goods : goodsList){
                redisService.set(GoodsKey.getMiaoshaGoodsStock, "" + goods.getId(), goods.getStockCount());
            }
    
        }
    

    在afterPropertiesSet() 中进行初始化数据的操作。

    更多相关内容
  • SpringBoot集成Redis缓存并实现初始化用户数据到Redis缓存1、springboot集成Redis缓存1.引入依赖2.添加配置3.测试是否成功2、实现初始化用户数据到Redis缓存1.listener监听类2.实体表中需要序列化3.findById示例4....

    1、springboot集成Redis缓存

    1.引入依赖

    在 pom.xml 中引入依赖(这里没有添加版本号是因为加了spring-boot-starter-parent,可以省略一些常用依赖的版本号)

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

    2.添加配置

    在 application.properties 中添加如下配置

    ### Redis缓存配置
    ### 默认Redis数据库为db0
    spring.redis.database=0
    ### 服务器地址,localhost
    spring.redis.host=localhost
    ### 链接端口,默认为6379
    spring.redis.port=6379
    ### Redis密码默认为空
    spring.redis.password=
    

    3.测试是否成功

    在测试类中加入如下代码,运行

        @Test
        public void testRedis(){
            //增
            redisTemplate.opsForValue().set("name","Test");
            String name = (String)redisTemplate.opsForValue().get("name");
            System.out.println(name);
        }
    

    运行截图:
    在这里插入图片描述
    成功!

    2、实现初始化用户数据到Redis缓存

    之所以要把数据放到缓存中,是因为用户的数据属于变动不大的数据,适合放到缓存中,在应用需要获取用户数据时,可以直接到Redis获取,提高数据访问速度

    1.listener监听类

    package com.example.demojpa.listener;
    
    import com.example.demojpa.model.PhoneType;
    import com.example.demojpa.service.PhoneTypeService;
    import org.springframework.data.redis.core.RedisTemplate;
    
    import javax.annotation.Resource;
    import javax.servlet.ServletContextEvent;
    import javax.servlet.ServletContextListener;
    import javax.servlet.annotation.WebListener;
    import java.util.List;
    
    /*
    * 监听器
    * ye
    * 2020.10.26
    * */
    
    @WebListener
    public class RedisListener implements ServletContextListener {
        @Resource
        private RedisTemplate redisTemplate;
    
        @Resource
        private PhoneTypeService phoneTypeService;
        private static final String ALL_USER = "ALL_USER_LIST";
    
        @Override
        public void contextInitialized(ServletContextEvent servletContextEvent){
            //查询数据库所有用户
            List<PhoneType> phoneListenerList = phoneTypeService.findAll();
            System.out.println(phoneListenerList);
            //清除缓存中的用户数据
            redisTemplate.delete(ALL_USER);
            //将数据存放到Redis缓存中
            redisTemplate.opsForList().leftPushAll(ALL_USER,phoneListenerList);
    
            //真实项目中需要注解掉,查询所有的用户数据
            List<PhoneType> queryPhoneTypeList = redisTemplate.opsForList().range(ALL_USER,0,-1);
            System.out.println("缓存中目前的用户数:" + queryPhoneTypeList.size() + "人");
    
            System.out.println("ServletContext 上下文初始化");
        }
    
        @Override
        public void contextDestroyed(ServletContextEvent servletContextEvent){
            System.out.println("ServletContext 上下文销毁");
        }
    }
    
    

    2.实体表中需要序列化

    因为RedisTemplate默认使用jdkSerializationRedisSerializer,而StringRedisTemplate默认使用StringRedisSerializer。所以实体类需要实现序列化接口Serializable。代码如下:

    @Entity
    @Table(name="phone_type")
    public class PhoneType implements Serializable {
       //省略代码
    }
    

    3.findById示例

    我们首先是查找Redis缓存中的数据,有就返回,没有就查找数据库中的数据,有就更新缓存并返回数据,没有就返回没有。

    具体方法如下:

        @Override
        public PhoneType findById(String id) {
            //step.1 查询Redis缓存中的所有数据
            List<PhoneType> phoneTypeList = redisTemplate.opsForList().range(ALL_USER,0,-1);
            if (phoneTypeList != null&&phoneTypeList.size() >0){
                for (PhoneType phoneType:phoneTypeList
                ) {
                    if (phoneType.getType_id().equals(id)){
                        return phoneType;
                    }
                }
            }
    
            //step.2 查询数据库中的数据
            PhoneType phoneType = phoneTypeRepository.findById(id).get();
            if (phoneType != null){
                //step.3 将数据插入到Redis缓存中
                redisTemplate.opsForList().leftPush(ALL_USER,phoneType);
            }
    
            return phoneType;
        }
    

    4.测试

        @Test
        public void testFindById_redis(){
            Long redisUserSize = 0L;
            //查询id = 2 的数据,该数据存在于Redis缓存中
            PhoneType phoneType = phoneTypeService.findById("2");
            redisUserSize = redisTemplate.opsForList().size("ALL_USER_LIST");
            System.out.println("目前缓存中的用户数量为:" + redisUserSize);
            System.out.println("----> id: " + phoneType.getType_id() + "   name: " + phoneType.getType_name());
    
        }
    
    

    在这里插入图片描述
    成功!

    展开全文
  • 我们之前的做法都是经常查询基础,其实这些数据没有经常操作增改删等的话,我们可以查询一次就好然后放到redis变好。这时就有人有疑问了,那如果喔改动了,岂不是用不...有的人说为啥启动就要加载初始化数据呢,我登...

           我们之前的做法都是经常查询基础,其实这些数据没有经常操作增改删等的话,我们可以查询一次就好然后放到redis变好。这时就有人有疑问了,那如果喔改动了,岂不是用不到了新的了。如果是这样的话你设置一个时效性。比如你设置时效性为每天12点或者一周、一个月等等清除redis,根据你自己需求而定,然后重新加载新的到redis中。首先你载入redis做个判断,避免重复加载。你先判断能不能拿到从redis中,如果不能拿到则查询放入redis中,否则不需要查询数据库。有的人说为啥启动就要加载初始化数据呢,我登陆后加载不好么,之前喔也是这么做,后面喔才发现这个会业务代码,更快,这些不经常操作的数据,我们一开始加载的话,就不会我们操作业务去操作,从而也可以说提高了点性能吧为了业务代码。话不多说上代码,目前提供两种方法。

    一、启动类实现 CommandLineRunner 

    
    @SpringBootApplication
    public class   Zkt5gBuAdminApplication implements CommandLineRunner {
    
        public static void main(String[] args) {
            SpringApplication.run(Zkt5gBuAdminApplication.class, args);
        }
    
        @Override
        public void run(String... args) throws Exception {
            initData()
        }
    
        @Autowired
        private XXXXService XXXService;
    
        
        private void  initData(){
            XXXService.xxxfuncation();
        } 
    }
    

    二、用注解形式进行加载 @PostConstruct ,先创建一个类 RedisInitDataRunner 

    @Configuration
    public class RedisInitDataRunner {
    
        @Autowired
        private xxxService xxxService;
        /**
         * 创建线程池,默认10个线程
         */
        public static final ExecutorService pool = Executors.newFixedThreadPool(10);
    
        /**
         * 初始化数据
         */
        @PostConstruct
        public void initData() {
            pool.execute(new Runnable() {
                @Override
                public void run() {
                    xxxService.xxxfuncation();
                }
            });
        }
    }

    写的不是很好有不好的地方欢迎指出。谢谢,也希望能够帮得到需要帮助的人

    展开全文
  • 小技巧:Redis批量初始化数据

    千次阅读 2018-07-12 20:08:49
    由于工作中经常要手动初始化一些数据到redis中,或者从redis中删除一些数据,故而百度查了下,使用Redis-Cli进行脚本执行,利用管道操作,可以实现,mark下。...

    由于工作中经常要手动初始化一些数据到redis中,或者从redis中删除一些数据,故而百度查了下,使用Redis-Cli进行脚本执行,利用管道操作,可以实现,mark下。

    1、redis_key.txt(数据脚本),文本使用dos2unix命令进行转换文本格式,文本数据换行必须是CRLF结尾,不然执行会报错(通过文本编辑器显示出所有字符能看到CRLF,redis-cli中只支持doc格式的换行符\r\n


    2、shell.sh(执行脚本),redis-cli连接账号指定redis server的host,port,password


    展开全文
  • 1、相关数据结构 1.1 服务器:struct redisServer 1.2 数据库:struct redisDb 1.3 redis命令:struct redisCommand ... 2.3 初始化服务器数据结构(initServer函数) 2.4 还原数据库状态(loadDataFromDisk...
  • linux 初始化 redis 脚本

    2018-10-28 13:37:38
    使用脚本初始化减少手动操作,具体看脚本内容。
  • Spring Boot项目启动时将需要数据添加到redis缓存 在项目中不可避免的会存在像字典、部门这样使用频率很大的数据,如果每次都从数据库中查取数据,势必会增加项目的负担,所以很多开源的后台管理系统都集成了redis。...
  • 实现InitializingBean接口的afterPropertiesSet方法,当启动时将所有需要缓存的数据缓存到redis中 @Controller @RequestMapping("/test") public class TestController implements InitializingBean { @Autowired ...
  • 1.我这边写了一个序列的接口 public class FstSerializer { private static final Logger logger = LoggerFactory.getLogger(FstSerializer.class); private static FSTConfiguration conf = ...
  • 一、概述 ...redis保持空数据即可。 关于Docker-compose的安装,请参考连接: https://www.cnblogs.com/xiao987334176/p/12377113.html 二、封装mysql 本文使用的mysql 5.7版本,基础镜像为官方的mys...
  • redis集群创建初始化

    2021-05-06 15:29:41
    集群创建完毕之后,需要运行如下命令进行初始化redis-cli --cluster create 10.233.82.142:6379 10.233.126.176:6379 10.233.95.131:6379 10.233.110.122:6379 10.233.65.142:6379 10.233.76.50:6379 --cluster-...
  • 在安装完redis以后,需要初始化一下redis,但是报了下图所示的错误。 解决步骤: 因为我使用的redis版本是最新的版本,配置文件有一些内容没办法使用了,需要将如下的部分注释掉。 注释掉以后,就可以继续执行初始...
  • Redis服务端初始化流程

    千次阅读 2021-05-16 09:09:58
    Redis 4.0.1 Redis服务端有个入口,其入口如下: server.c -> main(int argc, char **argv) 服务端启动初始化流程分为如下5个步骤: 1 初始化服务器全局状态 -- 初始化 redisServer结构体对应的数据,如db数据库、...
  • **项目中,经常碰见需要在项目初始化时完成从mysql的数据写入缓存如redis中的操作,例如ssm架构项目中,需要某个类实现一个initializeBean的接口,在这个类里面完成初始化的操作,将mysql的数据到redis或其他...
  • redis 服务器初始化

    千次阅读 2016-11-21 15:53:38
    从启动 Redis 服务器,服务器可以接受外来客户端的网络连接这段时间, Redis 需要执行一系列初始化操作。 整个初始化过程可以分为以下六个步骤: 初始化服务器全局状态。 载入配置文件。 创建 daemon 进程。 ...
  • redis启动初始化过程

    千次阅读 2018-08-11 22:11:48
    redis的执行入口函数(redis.c): 2064 /* =================================== Main! ================================ */ 2065 2066 int main(int argc, char **argv) { 2067 initServerConfig(); 2068 initS....
  • 1.Spring boot - data-redis与jedis关系 jedis 是redis的java客户端,通过它可以对redis进行操作。与之功能相似的还包括:Lettuce等 spring-data-redis 它依赖jedis或Lettuce,实际上是对jedis这些客户端的封装...
  • 1.Gatewayworker中,进行redis初始化 在Gatewayworker中,进行redis初始化,需要在Events::onWorkerStart中进行。 Events::onWorkerStart是每个进程生命周期内都只会触发一次,所以适合进行初始化的操作,包括...
  • Redis
  • redis集群实现(一)集群架构与初始化

    千次阅读 2016-10-27 08:38:00
    redis是一个高可用、高性能、高可扩展性的基于内存也支持持久存储的kv存储数据库,redis相比较于之前的kv存储memcached而言,不但支持的value类型大大增加,并且还支持数据的持久,弥补了memcached的不能持久...
  • // (把普通pojo实例化到spring容器中,相当于配置文件中的 <bean id="" class=""/>就是当我们的类不属于各种归类的时候(不属于@Controller、@Services等的时候),我们就可以使用@Component来标注这个类。 @...
  • Redis初识:2.通过初始化脚本启动Redis

    千次阅读 2017-04-10 15:41:18
    在启动方式上直接执行redis编译好的服务器端程序...如果要部署测试或生产环境,肯定需要修改一些默认的配置,这是这种启动方式就有些不适用了。 当然redis除了直接执行服务器程序启动,同样支持使用脚本文件启动。
  • 简述:启动项目后, 加载数据库公共配置数据到redis中 [已集成: springboot + mybatis + redis] import org.springframework.data.redis.core.RedisTemplate; import org.springframework.jdbc.core.JdbcTemplate; ...
  • spring boot集成redis,配置比较简单,网上存在不同的配置。为什么有不同的配置文件? spring boot是如何加载redis的呢? 为了搞清楚背后的机制,阅读源码一探究竟。 1: spring boot 集成redis 为什么存在不同的...
  • redis安装见:https://blog.csdn.net/sky_jiangcheng/article/details/80194839 ...通过初始化脚本启动RedisRedis源代码目录的utils文件夹中有一个名为redis_init_script的初始化脚本文件。需要配置...
  • Bean instantiation via constructor ... nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [redis.clients.jedis.JedisCluster]: Constructor threw excepti...
  • springboot项目启动时,加载字典信息,放置到redis缓存中 @Component public class InitParameter implements ApplicationRunner { @Autowired private ZdxxService zdxxService; @Autowired private ...
  • 最近想着将字典数据到redis里,并且能够尽量实现多场景便捷读取。 本文主要基于以下几点去设计: 1、数据归类,最好能像数据库中表结构一样归类 2、能够边界的查询出某个字典表LIST 3、能够便捷的根据字典表...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 94,374
精华内容 37,749
关键字:

初始化数据到redis