日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

redis缓存原理与实现_SpringBoot整合Redis缓存,手把手教你一步一步实现

發(fā)布時間:2023/12/2 javascript 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 redis缓存原理与实现_SpringBoot整合Redis缓存,手把手教你一步一步实现 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

推薦學習

  • 分布式大全:反向代理/Redis/中間件/MySQL/消息,挑戰(zhàn)阿里P7必備
  • 都是“Redis惹的禍”,害我差點掛在美團三面,真是“虛驚一場”
  • 微服務(wù)架構(gòu)之春招總結(jié):SpringCloud、Docker、Dubbo與SpringBoot

一、基本概況

為什么使用緩存

緩存是在內(nèi)存中存儲的數(shù)據(jù)備份,當數(shù)據(jù)沒有發(fā)生本質(zhì)變化時

就可以直接從內(nèi)存中查詢數(shù)據(jù),而不用去數(shù)據(jù)庫查詢(在磁盤中)

CPU讀取內(nèi)存的速度要比讀取磁盤快,可以提高效率

Redis緩存

Remote Dictionnary Server(遠程數(shù)據(jù)服務(wù)),是一款內(nèi)存高速緩存數(shù)據(jù)庫。

五種常用數(shù)據(jù)類型: String(字符串)、List(列表)、Set(集合)、Hash(散列)、ZSet(有序集合)

可持久化:一邊運行,一邊向硬盤備份一份,防止斷電等偶然情況,導致內(nèi)存中數(shù)據(jù)丟失

二、搭建Redis環(huán)境

1.下載Redis

2.設(shè)置Redis開機自啟

在解壓好的文件夾下輸入cmd命令

window下安裝Redis服務(wù)

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

檢查安裝是否成功
搜索服務(wù)

點擊設(shè)置為開機自啟

三、新建SpringBoot項目

新建好項目的童鞋可以自動跳過

添加web依賴

選擇數(shù)據(jù)庫依賴

選擇項目位置,點擊finish

四、使用StringRedisTemplate操作Redis

1.pom.xml文件引入坐標

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

2.在appliaction.properties配置redis數(shù)據(jù)庫連接信息

#redis配置#Redis服務(wù)器地址spring.redis.host=127.0.0.1#Redis服務(wù)器連接端口spring.redis.port=6379#Redis數(shù)據(jù)庫索引(默認為0)spring.redis.database=0

3.在SpringbootdemoApplicationTests中測試操作Redis

@SpringBootTestclass SpringbootdemoApplicationTests { @Autowired StringRedisTemplate stringRedisTemplate; //操作key-value都是字符串,最常用 @Test public void test01(){ //字符串操作 stringRedisTemplate.opsForValue().append("msg","coder"); //列表操作 stringRedisTemplate.opsForList().leftPush("mylist","1"); stringRedisTemplate.opsForList().leftPush("mylist","2"); }}

對于Redis的五大常用數(shù)據(jù)類型都提供了方法

String(字符串)、List(列表)、Set(集合)、Hash(散列)、ZSet(有序集合)

stringRedisTemplate.opsForValue();[String(字符串)]

stringRedisTemplate.opsForList();[List(列表)]

stringRedisTemplate.opsForSet();[Set(集合)]

stringRedisTemplate.opsForHash();[Hash(散列)]

stringRedisTemplate.opsForZSet();[ZSet(有序集合)]

使用RedisDesktopManager可視化工具查看結(jié)果

StringTemplate類中方法存取的key-value值是String類型,RedisTemplate中key-value值是Object類型,RedisTemplate是StringTemplate父類

下面就用RedisTemplate實現(xiàn)從MySQL數(shù)據(jù)庫取出數(shù)據(jù)放到Redis緩存

五、使用RedisTemplate操作Redis

1.項目目錄結(jié)構(gòu)

2.建立與數(shù)據(jù)庫相關(guān)的類

建表的sql腳本

CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(32) NOT NULL COMMENT '用戶名稱', `birthday` datetime DEFAULT NULL COMMENT '生日', `sex` char(1) DEFAULT NULL COMMENT '性別', `address` varchar(256) DEFAULT NULL COMMENT '地址', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=49 DEFAULT CHARSET=utf8;

application.properties配置文件

  • MySQL及Redis連接的相關(guān)配置
#MySQL的配置spring.datasource.url= jdbc:mysql://localhost:3306/selfproj?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghaispring.datasource.username=rootspring.datasource.password=123456spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver#設(shè)置訪問端口號server.port = 8099#redis配置#Redis服務(wù)器地址spring.redis.host=127.0.0.1#Redis服務(wù)器連接端口spring.redis.port=6379#Redis數(shù)據(jù)庫索引(默認為0)spring.redis.database=0

User類

  • 采用ORM思想,屬性和數(shù)據(jù)庫字段對應(yīng)
package com.thinkcoder.bean;import java.io.Serializable;import java.util.Date;/** * @ClassName User * @Author Think-Coder * @Data 2020/5/27 10:35 * @Version 1.0 */public class User implements Serializable { private Integer id; private String username; private Date birthday; private String sex; private String address;//getter和setter方法 public Integer getId() {return id;} public void setId(Integer id) {this.id = id;} public String getUsername() {return username;} public void setUsername(String username) {this.username = username;} public Date getBirthday() {return birthday;} public void setBirthday(Date birthday) {this.birthday = birthday;} public String getSex() {return sex;} public void setSex(String sex) {this.sex = sex;} public String getAddress() {return address;} public void setAddress(String address) {this.address = address;}//重寫toString方法 @Override public String toString() { return "User{" + "id=" + id + ", username='" + username + ''' + ", birthday=" + birthday + ", sex='" + sex + ''' + ", address='" + address + ''' + '}'; }}

UserMapper類

  • 使用注解方法操作數(shù)據(jù)庫
@Mapperpublic interface UserMapper { @Select("SELECT * FROM user WHERE id = #{id}") User findById(int id);}

3.MyRedisConfig

自定義序列化類,將存儲在Redis的對象序列化為json格式,不會產(chǎn)生亂碼

@Configuration@EnableAutoConfigurationpublic class MyRedisConfig { @Bean public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){ RedisTemplate template = new RedisTemplate<>(); template.setConnectionFactory(redisConnectionFactory); Jackson2JsonRedisSerializer ser = new Jackson2JsonRedisSerializer<>(User.class); template.setDefaultSerializer(ser); return template; }}

4.工具類RedisUtil類

//工具類中使用Autowired注解需要加上Compoent@Componentpublic class RedisUtil { @Autowired RedisTemplate redisTemplate; //key-value是對象的 //判斷是否存在key public boolean hasKey(String key){ return redisTemplate.hasKey(key); } //從redis中獲取值 public Object get(String key){ return redisTemplate.opsForValue().get(key); } //向redis插入值 public boolean set(final String key,Object value){ boolean result = false; try{ redisTemplate.opsForValue().set(key,value); result = true; }catch (Exception e){ e.printStackTrace(); } return result; }}

5.sevice包代碼

IUserService

@Servicepublic interface IUserService {//根據(jù)id查用戶信息 User findById(int id);}

UserService實現(xiàn)類

@Servicepublic class UserServiceImpl implements IUserService { User user; @Autowired UserMapper userMapper; @Autowired private RedisUtil redisUtil; @Override public User findById(int id) { String key = "user"+id; if(redisUtil.hasKey(key)) { user = (User)redisUtil.get(key); System.out.println("查詢的是緩存"); }else{ user = userMapper.findById(id); System.out.println("查詢的是數(shù)據(jù)庫"); System.out.println(redisUtil.set(key,user) ? "插入成功" : "插入失敗"); } return user; }}

6.UserController類

@RestControllerpublic class UserController { @Autowired IUserService userService; @GetMapping("/user/{id}") public User findById(@PathVariable("id") Integer id){ User user = userService.findById(id); return user; }}

7.測試

打開瀏覽器輸入下方url

查看控制臺輸出

Redis Desktop Manager顯示結(jié)果

六、總結(jié)

整體來說,操作Redis是兩個類,RedisTemplate類和StringTemplate類,為父子關(guān)系,提供的方法正好對應(yīng)操作Redis數(shù)據(jù)類型的指令,所以要把數(shù)據(jù)類型及常用的指令練熟。

在實際業(yè)務(wù)中Redis的應(yīng)用不止這些,繼續(xù)探索吧

作者:Think—Coder

原文鏈接:https://blog.csdn.net/shang_0122/article/details/106363769

總結(jié)

以上是生活随笔為你收集整理的redis缓存原理与实现_SpringBoot整合Redis缓存,手把手教你一步一步实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。