Remotezugriff aktivieren:
Suchen Sie die Datei redis.conf in Redis und bearbeiten Sie sie (im Installationspfad)
vim ./redis.conf
1 127.0.0.1 binden und auskommentieren
Standardmäßig kann auf 127.0.0.1 nur lokal zugegriffen werden, kommentieren Sie es für den IP-Zugriff aus
2. Ändern Sie den Attributwert für den geschützten Modus in „Nein“
Kommentar Nach dem Deaktivieren des Schutzmodus und der Deaktivierung des Schutzmodus kann auf die IP zugegriffen werden
3. Ändern Sie das Daemonize-Attribut und ändern Sie No in Yes.
Setzen Sie Daemonize auf Yes, um das zu starten Hintergrundbetrieb
4. 6379-Port öffnen
/sbin/iptables -I INPUT -p tcp --dport 6379 -j ACCEPT
ist standardmäßig nicht für die Öffentlichkeit zugänglich 6379
5. Redis starten
redis-server /myconf/redis.conf
redis-server ist standardmäßig im /usr/local/bin-Pfad und redis.conf befindet sich in redis Unter dem Installationspfad
6. Testverbindung
redis-cli -h 192.168.126.129 -p 6379
redis-cli -h redis server IP -p 6379 - ein Passwort (lassen Sie es nicht leer, wenn das Redis-Passwort nicht festgelegt ist, sonst wird ein Fehler gemeldet)
Java-Code schreiben:
Struktur des Projektquellcodes
Eine Benutzertabelle
Code:
pom. XML-Datei (Sie können sie entsprechend Ihren eigenen Anforderungen hinzufügen oder ändern)
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- mybatis 与 spring boot 2.x的整合包 --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.2</version> </dependency> <!--mysql JDBC驱动 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.39</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-cache</artifactId> </dependency> </dependencies>
Das Folgende ist die Springboot-Konfigurationsdatei application.yml. Konfigurieren Sie Redis (es sind Kommentare und Erklärungen enthalten)
server: port: 8081 #数据库连接 spring: datasource: url: jdbc:mysql://localhost:3306/mytest_springboot_cache?useUnicode=true driver-class-name: com.mysql.jdbc.Driver username: root password: lzh ## Redis 配置 redis: ## Redis数据库索引(默认为0) database: 0 ## Redis服务器地址 host: 192.168.126.129 ## Redis服务器连接端口 port: 6379 ## Redis服务器连接密码(默认为空) password: jedis: pool: ## 连接池最大连接数(使用负值表示没有限制) #spring.redis.pool.max-active=8 max-active: 8 ## 连接池最大阻塞等待时间(使用负值表示没有限制) #spring.redis.pool.max-wait=-1 max-wait: -1 ## 连接池中的最大空闲连接 #spring.redis.pool.max-idle=8 max-idle: 8 ## 连接池中的最小空闲连接 #spring.redis.pool.min-idle=0 min-idle: 0 ## 连接超时时间(毫秒) timeout: 1200 #将themilef的默认缓存禁用,热加载生效 thymeleaf: cache: false #mybatis的下划线转驼峰配置 configuration: map-underscore-to-camel-case: true #另外一种打印语句的方式 log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql时的语句 logging: level: com: acong: dao: debug file: d:/logs/bsbdj.log
Dann gibt es noch die Entity-Klasse, die relativ einfach ist, deshalb werde ich nicht auf Details eingehen
package com.lzh.springbootstudytest.bean; import java.io.Serializable; /** * @author lzh * create 2019-09-18-22:32 */ public class User implements Serializable { private static final long serialVersionUID = 1L; private int uid; private String userName; private String passWord; private int salary; public int getUid() { return uid; } public void setUid(int uid) { this.uid = uid; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getPassWord() { return passWord; } public void setPassWord(String passWord) { this.passWord = passWord; } public int getSalary() { return salary; } public void setSalary(int salary) { this.salary = salary; } public User(int uid, String userName, String passWord, int salary) { super(); this.uid = uid; this.userName = userName; this.passWord = passWord; this.salary = salary; } public User() { super(); } }
Dies ist die Controller-Klasse, die zum Offenlegen des Schnittstellenzugriffs verwendet wird
package com.lzh.springbootstudytest.controller; import com.lzh.springbootstudytest.bean.User; import com.lzh.springbootstudytest.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.util.HashMap; import java.util.List; import java.util.Map; /** * @author lzh * create 2019-09-18-22:36 */ @RestController public class TestController { @Autowired private UserService userService; @RequestMapping("/queryAll") public List<User> queryAll(){ List<User> lists = userService.queryAll(); return lists; } @RequestMapping("/findUserById") public Map<String, Object> findUserById(@RequestParam int id){ User user = userService.findUserById(id); Map<String, Object> result = new HashMap<>(); result.put("uid", user.getUid()); result.put("uname", user.getUserName()); result.put("pass", user.getPassWord()); result.put("salary", user.getSalary()); return result; } @RequestMapping("/updateUser") public String updateUser(){ User user = new User(); user.setUid(1); user.setUserName("cat"); user.setPassWord("miaomiao"); user.setSalary(4000); int result = userService.updateUser(user); if(result != 0){ return "update user success"; } return "fail"; } @RequestMapping("/deleteUserById") public String deleteUserById(@RequestParam int id){ int result = userService.deleteUserById(id); if(result != 0){ return "delete success"; } return "delete fail"; } }
Redistemplate-Serialisierung konfigurieren
package com.lzh.springbootstudytest.config; import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.PropertyAccessor; import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.cache.CacheManager; import org.springframework.cache.annotation.CachingConfigurerSupport; import org.springframework.cache.annotation.EnableCaching; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.cache.RedisCacheConfiguration; import org.springframework.data.redis.cache.RedisCacheManager; import org.springframework.data.redis.cache.RedisCacheWriter; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.core.*; import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; import org.springframework.data.redis.serializer.StringRedisSerializer; import java.time.Duration; /** * @author lzh * create 2019-09-24-15:07 */ @Configuration @EnableCaching public class RedisConfig extends CachingConfigurerSupport { /** * 选择redis作为默认缓存工具 * @param redisConnectionFactory * @return */ /*@Bean //springboot 1.xx public CacheManager cacheManager(RedisTemplate redisTemplate) { RedisCacheManager rcm = new RedisCacheManager(redisTemplate); return rcm; }*/ @Bean public CacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) { RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig() .entryTtl(Duration.ofHours(1)); // 设置缓存有效期一小时 return RedisCacheManager .builder(RedisCacheWriter.nonLockingRedisCacheWriter(redisConnectionFactory)) .cacheDefaults(redisCacheConfiguration).build(); } /** * retemplate相关配置 * @param factory * @return */ @Bean public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) { RedisTemplate<String, Object> template = new RedisTemplate<>(); // 配置连接工厂 template.setConnectionFactory(factory); //使用Jackson2JsonRedisSerializer来序列化和反序列化redis的value值(默认使用JDK的序列化方式) Jackson2JsonRedisSerializer jacksonSeial = new Jackson2JsonRedisSerializer(Object.class); ObjectMapper om = new ObjectMapper(); // 指定要序列化的域,field,get和set,以及修饰符范围,ANY是都有包括private和public om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); // 指定序列化输入的类型,类必须是非final修饰的,final修饰的类,比如String,Integer等会跑出异常 om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); jacksonSeial.setObjectMapper(om); // 值采用json序列化 template.setValueSerializer(jacksonSeial); //使用StringRedisSerializer来序列化和反序列化redis的key值 template.setKeySerializer(new StringRedisSerializer()); // 设置hash key 和value序列化模式 template.setHashKeySerializer(new StringRedisSerializer()); template.setHashValueSerializer(jacksonSeial); template.afterPropertiesSet(); return template; } /** * 对hash类型的数据操作 * * @param redisTemplate * @return */ @Bean public HashOperations<String, String, Object> hashOperations(RedisTemplate<String, Object> redisTemplate) { return redisTemplate.opsForHash(); } /** * 对redis字符串类型数据操作 * * @param redisTemplate * @return */ @Bean public ValueOperations<String, Object> valueOperations(RedisTemplate<String, Object> redisTemplate) { return redisTemplate.opsForValue(); } /** * 对链表类型的数据操作 * * @param redisTemplate * @return */ @Bean public ListOperations<String, Object> listOperations(RedisTemplate<String, Object> redisTemplate) { return redisTemplate.opsForList(); } /** * 对无序集合类型的数据操作 * * @param redisTemplate * @return */ @Bean public SetOperations<String, Object> setOperations(RedisTemplate<String, Object> redisTemplate) { return redisTemplate.opsForSet(); } /** * 对有序集合类型的数据操作 * * @param redisTemplate * @return */ @Bean public ZSetOperations<String, Object> zSetOperations(RedisTemplate<String, Object> redisTemplate) { return redisTemplate.opsForZSet(); } }
Dann gibt es die Mapper-Persistenzschicht Dao. Es ist bequemer, sie hauptsächlich mit Anmerkungen zu schreiben. Sie können hier auch die XML-Konfigurationsdatei von mybatis verwenden, um SQL-Anweisungen zu schreiben Wir verwenden hauptsächlich Redis-Vorlagen zum Schreiben von
package com.lzh.springbootstudytest.mapper; import com.lzh.springbootstudytest.bean.User; import org.apache.ibatis.annotations.*; import java.util.List; /** * @author lzh * create 2019-09-18-22:32 */ @Mapper public interface UserDao { @Select("select * from user") List<User> queryAll(); @Select("select * from user where uid = #{id}") User findUserById(int id); @Update("UPDATE USER SET username = CASE WHEN (#{userName} != NULL) AND (#{userName} != '') THEN #{userName},PASSWORD = CASE WHEN (#{passWord} != NULL) AND (#{passWord} != '') THEN #{passWord},salary = CASE WHEN (#{salary} != 0) THEN #{salary} WHERE uid = #{uid}") int updateUser(@Param("user") User user); @Delete("delete from user where uid = #{id}") int deleteUserById(int id); }
Hier verwenden wir RedisTemplate hauptsächlich zum Betreiben von Remote-Redis. Jedes Mal, wenn wir auf die vom Controller bereitgestellte Schnittstelle zugreifen, stellen wir zunächst fest, ob die Daten im Redis-Cache vorhanden sind Nicht vorhanden, wir beginnen damit, die Daten aus der Datenbank zu lesen und im Redis-Cache zu speichern. Beim nächsten Zugriff werden sie direkt aus dem Cache übernommen.
Dadurch entfällt die Notwendigkeit, jedes Mal SQL-Anweisungen auszuführen, was die Zugriffsgeschwindigkeit verbessern kann. Wenn Sie jedoch Daten im Cache speichern, legen Sie den Schlüssel und den Wert fest und löschen Sie sie mit einer Zeitüberschreitung. Achten Sie darauf, die Zeitüberschreitung zum Löschen des Caches nicht zu lange festzulegen, da dies sonst zu einer Belastung des Servers führt.
Führen Sie die Spring Boot-Startup-Klasse aus und besuchen Sie http://localhost:8081/findUserById?id=1
Besuchen Sie http://localhost erneut: 8081/findUserById?id=1 dient zum Abrufen der gespeicherten Daten aus dem Cache
Für weitere Redis-Kenntnisse lesen Sie bitte das
Redis-Gate-TutorialDas obige ist der detaillierte Inhalt vonWie SpringBoot den Redis-Cache integriert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!