您现在的位置是:主页 > news > wordpress 简易主题/镇江交叉口优化
wordpress 简易主题/镇江交叉口优化
admin2025/6/21 19:59:38【news】
简介wordpress 简易主题,镇江交叉口优化,陕西疫情最新数据消息,node.js可以做网站么文章目录演示工具版本项目结构Maven 依赖使用 Lettuce 配置使用 Jedis 配置ListOperationsSetOperationsHashOperationsStringRedisTemplateRedisTemplateSpring Boot Main 类运行应用程序参考文献源码下载本页将介绍Spring Boot Data Redis的例子。 Redis是一个开源的内存数据…
文章目录
- 演示工具版本
- 项目结构
- Maven 依赖
- 使用 Lettuce 配置
- 使用 Jedis 配置
- ListOperations
- SetOperations
- HashOperations
- StringRedisTemplate
- RedisTemplate
- Spring Boot Main 类
- 运行应用程序
- 参考文献
- 源码下载
本页将介绍Spring Boot Data
Redis
的例子。
Redis
是一个开源的内存数据结构存储,可用作数据库、缓存和消息代理。
Redis
支持数据结构,如字符串、哈希值、列表、集合等。
Redis
是一个NoSQL
存储,使用键/值来存储数据。
Spring Boot
为Redis
的依赖提供了spring-boot-starter-data-redis
。
Redis
连接使用LettuceConnectionFactory
或JedisConnectionFactory
获得。
Lettuce
和Jedis
是Java Redis
客户端。
Spring Boot 2.0
默认使用Lettuce
。
Spring Data
提供了RedisTemplate
作为中心类来与Redis
存储中的数据进行交互。
为了与字符串数据交互,我们可以使用RedisTemplate
的以字符串为中心的扩展StringRedisTemplate
。
Spring Data
提供了ListOperations
、SetOperations
、HashOperations
等来对Redis
数据进行操作,我们可以直接在Spring
应用程序中注入这些操作。
演示工具版本
- Java 9
- Spring 5.0.7.RELEASE
- Spring Boot 2.0.3.RELEASE
- Maven 3.5.2
- Eclipse Oxygen
项目结构
Maven 依赖
Spring
提供了spring-boot-starter-data-redis
来解决Redis
的依赖关系。
它为Lettuce
和Jedis
客户端库提供基本的自动配置。
默认情况下,Spring Boot 2.0
使用Lettuce
。为了获得池化连接工厂,我们需要提供commons-pool2
依赖。
找到Maven
文件。
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.concretepage</groupId><artifactId>spring-boot-app</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><name>spring-boot-app</name><description>Spring Boot Application</description><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.3.RELEASE</version><relativePath/></parent><properties><java.version>9</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency> <dependency><groupId>org.apache.commons</groupId><artifactId>commons-pool2</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><optional>true</optional></dependency></dependencies> <build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
</project>
使用 Lettuce 配置
Spring Boot 2.0
启动器spring-boot-starter-data-redis
默认解决了Lettuce
。
Spring
提供LettuceConnectionFactory
来获取连接。
要获得池化连接工厂,我们需要在类路径上提供commons-pool2
。
要使用Lettuce
,我们需要以下Maven
依赖项。
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency><groupId>org.apache.commons</groupId><artifactId>commons-pool2</artifactId>
</dependency>
为了配置Lettuce
池,我们需要使用spring.redis.*
前缀与Lettuce
池连接属性。
找到Lettuce
池的样本配置。
application.properties
spring.redis.host=localhost
spring.redis.port=6379
spring.redis.password= spring.redis.lettuce.pool.max-active=7
spring.redis.lettuce.pool.max-idle=7
spring.redis.lettuce.pool.min-idle=2
spring.redis.lettuce.pool.max-wait=-1ms
spring.redis.lettuce.shutdown-timeout=200ms
我们可以覆盖默认的Redis
主机、端口和密码配置。如果我们想无限期地阻塞,请使用max-wait
这个负值。
使用 Jedis 配置
默认情况下,Spring Boot 2.0
启动程序spring-boot-starter-data-redis
使用Lettuce
。
要使用Jedis
,我们需要排除Lettuce
的依赖,并包含Jedis
。
找到使用Jedis
的Maven
依赖项。
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId><exclusions><exclusion><groupId>io.lettuce</groupId><artifactId>lettuce-core</artifactId></exclusion></exclusions>
</dependency>
<dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId>
</dependency>
jedis
的依赖将自动解决类路径上的commons-pool2
。
为了配置Jedis
池,我们需要使用spring.redis.*
前缀与Jedis
池连接属性。找到Jedis
池的样本配置。
application.properties
spring.redis.host=localhost
spring.redis.port=6379
spring.redis.password= spring.redis.jedis.pool.max-active=7
spring.redis.jedis.pool.max-idle=7
spring.redis.jedis.pool.min-idle=2
spring.redis.jedis.pool.max-wait=-1ms
ListOperations
ListOperations
用于Redis
列表的具体操作。找到它的一些方法。
leftPush(K key, V value): 为键上列表添加值到最前。
rightPush(K key, V value): 为键上列表添加值到最后。
leftPop(K key): 删除并返回存储在key处的列表中的第一个元素。
rightPop(K key): 删除并返回存储在key处的列表中的最后一个元素。
remove(K key, long count, Object value): 从存储在键处的列表中删除第一个给定数量 (count
)的值。
index(K key, long index): 从键的列表中获取索引处的元素。
size(K key): 获取存储在键处的列表的大小。
现在找到ListOperations
的例子。在这里,我们正在执行创建、读取和删除操作。
FriendDAO.java
package com.concretepage.dao;
import javax.annotation.Resource;
import org.springframework.data.redis.core.ListOperations;
import org.springframework.stereotype.Repository;
import com.concretepage.Person;@Repository
public class FriendDAO {private static final String KEY = "friendsKey";@Resource(name="redisTemplate")private ListOperations<String, Person> opsForList; public void addFriend(Person person) {opsForList.leftPush(KEY, person);}public long getNumberOfFriends() {return opsForList.size(KEY);}public Person getFriendAtIndex(Integer index) {return opsForList.index(KEY, index);}public void removeFriend(Person p) {opsForList.remove(KEY, 1, p);}
}
Person.java
package com.concretepage;
import java.io.Serializable;
public class Person implements Serializable {private static final long serialVersionUID = 1L;private int id;private String name;private int age;public Person() { }public Person(int id, String name, int age) {this.id = id;this.name = name;this.age = age;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String toString() {return id +" - " + name + " - " + age;}@Overridepublic boolean equals(final Object obj) {if (obj == null) {return false;}final Person person = (Person) obj;if (this == person) {return true;} else {return (this.name.equals(person.name) && this.age == person.age);} }@Overridepublic int hashCode() {int hashno = 7;hashno = 13 * hashno + (name == null ? 0 : name.hashCode());return hashno;}
}
SetOperations
SetOperations
执行Redis
集合的特定操作。找到它的一些方法。
add(K key, V… values): 将值添加到键的Set
中。
members(K key): 获取键的Set
中所有的元素。
size(K key): 获取键的Set
中元素个数。
remove(K key, Object… values): 从键的Set
中移除给定的值,并返回移除元素的数量。
现在找到SetOperations
的例子。这里我们将执行创建、读取和删除操作。
FamilyDAO.java
package com.concretepage.dao;
import java.util.Set;
import javax.annotation.Resource;
import org.springframework.data.redis.core.SetOperations;
import org.springframework.stereotype.Repository;
import com.concretepage.Person;@Repository
public class FamilyDAO {private static final String KEY = "myFamilyKey";@Resource(name="redisTemplate")private SetOperations<String, Person> setOps; public void addFamilyMembers(Person... persons) {setOps.add(KEY, persons); }public Set<Person> getFamilyMembers() {return setOps.members(KEY);}public long getNumberOfFamilyMembers() {return setOps.size(KEY);}public long removeFamilyMembers(Person... persons) {return setOps.remove(KEY, (Object[])persons);}
}
HashOperations
HashOperations
执行Redis Map
的特定操作,在hash
上工作。找到它的一些方法。
putIfAbsent(H key, HK hashKey, HV value): 只在hashKey
不存在的情况下设置hashKey
的值。
put(H key, HK hashKey, HV value): 设置hashKey
的值。
get(H key, Object hashKey): 从key
的hashKey
取值。
size(H key): 读取键值处的哈希值数量。
entries(H key): 获取存储在key处的所有哈希值。
delete(H key, Object… hashKeys): 删除给定key
上的hashKey
值。
找到具有创建、读取、更新和删除(CRUD
)操作的HashOperations
的例子。
EmployeeDAO.java
package com.concretepage.dao;
import java.util.Map;
import javax.annotation.Resource;
import org.springframework.data.redis.core.HashOperations;
import org.springframework.stereotype.Repository;
import com.concretepage.Person;@Repository
public class EmployeeDAO {private static final String KEY = "employeesKey";@Resource(name="redisTemplate")private HashOperations<String, Integer, Person> hashOps; public void addEmployee(Person person) {hashOps.putIfAbsent(KEY, person.getId(), person);}public void updateEmployee(Person person) {hashOps.put(KEY, person.getId(), person);} public Person getEmployee(Integer id) {return hashOps.get(KEY, id);}public long getNumberOfEmployees() {return hashOps.size(KEY);}public Map<Integer, Person> getAllEmployees() {return hashOps.entries(KEY);}public long deleteEmployees(Integer... ids) {return hashOps.delete(KEY, (Object)ids);}
}
StringRedisTemplate
StringRedisTemplate
是RedisTemplate
的以字符串为重点的扩展。
大多数时候,我们用字符串进行Redis
操作,因此Spring Data
提供了一个专门的模板,即StringRedisTemplate
。
这里我们将讨论StringRedisTemplate
的OPPSForValue()
方法,它将返回ValueOperations
。查找一些ValueOperations
方法。
setIfAbsent(K key, V value): 存在键则设置,不存在则新增。
set(K key, V value): 设置键的值。
get(Object key): 读取键的值。
现在找到使用StringRedisTemplate
的CRUD
操作的例子。
UserDAO.java
package com.concretepage.dao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Repository;@Repository
public class UserDAO {private static final String KEY = "userKey";@Autowiredprivate StringRedisTemplate stringRedisTemplate;public void addUserName(String uname) {stringRedisTemplate.opsForValue().setIfAbsent(KEY, uname);}public void updateUserName(String uname) {stringRedisTemplate.opsForValue().set(KEY, uname);} public String getUserName() {return stringRedisTemplate.opsForValue().get(KEY);}public void deleteUser() {stringRedisTemplate.delete(KEY);}
}
RedisTemplate
RedisTemplate
是与Redis
存储的数据交互的中心类。
它在给定对象和存储在Redis
中的二进制数据之间执行自动序列化和反序列化。
为了在我们的Spring Boot
应用程序中注入RedisTemplate
,我们需要在JavaConfig
中创建RedisTemplate
Bean
,如下所示。
RedisConfig.java
package com.concretepage;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import com.concretepage.Person;@Configuration
@ComponentScan("com.concretepage")
public class RedisConfig {@Beanpublic RedisConnectionFactory redisConnectionFactory() {LettuceConnectionFactory connectionFactory = new LettuceConnectionFactory();return connectionFactory;}@Beanpublic RedisTemplate<String, Person> redisTemplate() {RedisTemplate<String, Person> redisTemplate = new RedisTemplate<>();redisTemplate.setConnectionFactory(redisConnectionFactory());return redisTemplate;}
}
现在我们可以在我们的DAO
中注入RedisTemplate
,并可以按以下方式使用它。
FriendDAO.java
package com.concretepage.dao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Repository;
import com.concretepage.Person;@Repository
public class FriendDAO {private static final String KEY = "friendsKey";@Autowiredprivate RedisTemplate<String, Person> redisTemplate;public void addFriend(Person person) {redisTemplate.opsForList().leftPush(KEY, person);}public long getNumberOfFriends() {return redisTemplate.opsForList().size(KEY);}public Person getFriendAtIndex(Integer index) {return redisTemplate.opsForList().index(KEY, index);}public void removeFriend(Person p) {redisTemplate.opsForList().remove(KEY, 1, p);}
}
Spring Boot Main 类
在这里,我们正在创建Spring Boot
主类来执行应用程序,并将测试我们的DAO
类。
SpringBootAppStarter.java
package com.concretepage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import com.concretepage.dao.EmployeeDAO;
import com.concretepage.dao.FamilyDAO;
import com.concretepage.dao.FriendDAO;
import com.concretepage.dao.UserDAO;@SpringBootApplication
public class SpringBootAppStarter implements CommandLineRunner {@Autowiredprivate FriendDAO friendDAO;@Autowired private FamilyDAO familyDAO;@Autowired private EmployeeDAO empDAO;@Autowired private UserDAO userDAO;public static void main(String[] args) throws Exception {SpringApplication.run(SpringBootAppStarter.class, args);}@Overridepublic void run(String... args) throws Exception {System.out.println("--Example of ListOperations--");Person p1 = new Person(1, "Mahesh", 30);friendDAO.addFriend(p1);Person p2 = new Person(2, "Krishna", 35);friendDAO.addFriend(p2);System.out.println("Number of friends: " + friendDAO.getNumberOfFriends());System.out.println(friendDAO.getFriendAtIndex(1));friendDAO.removeFriend(p2);System.out.println(friendDAO.getFriendAtIndex(1)); //It will return null, because value is deleted. System.out.println("--Example of SetOperations--");Person p11 = new Person(101, "Ram", 30);Person p12 = new Person(102, "Lakshman", 25);Person p13 = new Person(103, "Bharat", 35);familyDAO.addFamilyMembers(p11, p12, p13);System.out.println("Number of Family members: " + familyDAO.getNumberOfFamilyMembers());System.out.println(familyDAO.getFamilyMembers());System.out.println("No. of Removed Family Members: " + familyDAO.removeFamilyMembers(p11, p12));System.out.println(familyDAO.getFamilyMembers());System.out.println("--Example of HashOperations--");Person emp1 = new Person(11, "Ravan", 45);Person emp2 = new Person(12, "Kumbhkarn", 35);Person emp3 = new Person(13, "Vibhisan", 25);empDAO.addEmployee(emp1);empDAO.addEmployee(emp2);empDAO.addEmployee(emp3);System.out.println("No. of Employees: "+ empDAO.getNumberOfEmployees());System.out.println(empDAO.getAllEmployees());emp2.setAge(20);empDAO.updateEmployee(emp2);System.out.println(empDAO.getEmployee(12));System.out.println("--Example of StringRedisTemplate--");userDAO.addUserName("sriram");System.out.println(userDAO.getUserName());userDAO.updateUserName("srikrishna");System.out.println(userDAO.getUserName());userDAO.deleteUser();System.out.println(userDAO.getUserName()); //It will return null, because value is deleted. }
}
运行应用程序
要测试我们的演示应用程序,请找到下面的步骤。
1. 使用链接安装并启动Redis
。
2. 如果你使用的是Windows
操作系统,你可以先安装Cygwin
,然后在其中安装Redis
。
3. Redis
将在6379
端口的localhost
上启动。
4. 下载项目的源代码。使用命令提示符进入项目的根文件夹,运行命令。
mvn spring-boot:run
参考文献
【1】Spring Boot Reference Guide
【2】Spring Data Redis Example
【3】Spring Boot Redis
源码下载
链接:https://pan.baidu.com/s/1Ewz7GASel5UQ3O7rlBHshQ
提取码:mao4