感謝您的閱讀,本文由 楊斌的博客 版權全部。
如若轉載,請註明出處:楊斌的博客(https://y0ngb1n.github.io/a/b...)html
項目已託管於 GitHub:y0ngb1n/spring-boot-samples,歡迎 Star, Fork git
pom.xml
github
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> <groupId>commons-validator</groupId> <artifactId>commons-validator</artifactId> </dependency> <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> </dependency> </dependencies>
application.yml
web
spring: # Redis Config redis: url: 127.0.0.1 port: 6379 password: your_password logging: level: io.github.y0ngb1n.*: debug
/** * URL Shortener Resource * * @author yangbin */ @Slf4j @RestController @RequestMapping(path = "/v1") public class UrlShortenerController { @Autowired StringRedisTemplate redisTemplate; @GetMapping(path = "/{id}") public String getUrl(@PathVariable String id) { + String url = redisTemplate.opsForValue().get(id); log.debug("URL Retrieved: {}", url); return url; } @PostMapping public String create(@RequestBody String url) { UrlValidator urlValidator = new UrlValidator( new String[]{"http", "https"} ); if (urlValidator.isValid(url)) { - String id = Hashing.murmur3_32().hashString(url, StandardCharsets.UTF_8).toString(); log.debug("URL Id generated: {}", id); + redisTemplate.opsForValue().set(id, url); return id; } throw new RuntimeException("URL Invalid: " + url); } }
Step 0: 安裝並啓動 Redisredis
# on Windows scoop install redis redis-server # on Mac brew install redis redis-server
Step 1: 啓動 url-shortener
服務spring
$ mvn install ... [INFO] BUILD SUCCESS ... $ mvn spring-boot:run ... 2019-08-21 21:03:50.215 INFO 10244 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path '' 2019-08-21 21:03:50.219 INFO 10244 --- [ main] i.g.y.s.u.UrlShortenerApplication : Started UrlShortenerApplication in 6.01 seconds (JVM running for 12.165)
Step 2: 生成短鏈緩存
$ curl -X POST http://127.0.0.1:8080/v1 \ -H 'Content-Type: text/plain' \ -d https://y0ngb1n.github.io 515bbe2b
Step 3: 還原短鏈tomcat
$ curl -X GET http://127.0.0.1:8080/v1/515bbe2b https://y0ngb1n.github.io
查看日誌bash
... 2019-08-21 21:42:26.788 DEBUG 10244 --- [nio-8080-exec-2] i.g.y.s.u.c.UrlShortenerController : URL Id generated: 515bbe2b 2019-08-21 21:42:40.748 DEBUG 10244 --- [nio-8080-exec-3] i.g.y.s.u.c.UrlShortenerController : URL Retrieved: https://y0ngb1n.github.io
如何快速判斷某 URL 是否在一個 20 億的網址 URL 集合中?,by 張振偉app
黑名單
、URL 去重
、單詞拼寫檢查
、Key-Value 緩存系統的 Key 校驗
、ID 校驗,好比訂單系統查詢某個訂單 ID 是否存在,若是不存在就直接返回