关于加强网站建设的意见,全球首个完全响应式网站自助建设平台在中国诞生,厦门网站制作方案,响应式网页代码在我之前的项目中#xff0c;使用Redis是我们团队自己封装了一个Redis操作类#xff0c;但是这只是在Spring提供的RedisTemplate上做了一层封装而已#xff0c;当时使用不是很熟练#xff0c;都是一边在网上查资料#xff0c;一边使用#xff1b;这篇文章会介绍两种使用方…在我之前的项目中使用Redis是我们团队自己封装了一个Redis操作类但是这只是在Spring提供的RedisTemplate上做了一层封装而已当时使用不是很熟练都是一边在网上查资料一边使用这篇文章会介绍两种使用方式一种是Jedis而另外一种是RedisTemplateJedisJedis 是 Redis 的 Java 客户端专为性能和易用性而设计。要使用Jedis首先需要导入依赖dependencygroupIdredis.clients/groupIdartifactIdjedis/artifactIdversion4.3.0/version
/dependency字符串使用代码 Jedis jedis new Jedis(127.0.0.1, 6379);// jedis.auth(xxx); // 输入密码没有密码可以不设置// 添加一个元素jedis.set(mystr, redis);// 获取元素String myStr jedis.get(mystr);System.out.println(myStr); // 输出redis// 添加多个元素(key,value,key2,value2)jedis.mset(db, redis, lang, java);// 获取多个元素ListString mlist jedis.mget(db, lang);System.out.println(mlist); // 输出[redis, java]// 给元素追加字符串jedis.append(db, ,mysql);// 打印追加的字符串System.out.println(jedis.get(db)); // 输出redis,mysql// 当 key 不存在时赋值键值Long setnx jedis.setnx(db, db2);// 因为 db 元素已经存在所以会返回 0 条修改System.out.println(setnx); // 输出0// 字符串截取String range jedis.getrange(db, 0, 2);System.out.println(range); // 输出red// 添加键值并设置过期时间(单位毫秒)String setex jedis.setex(db, 1000, redis);System.out.println(setex); // 输出ok// 查询键值的过期时间Long ttl jedis.ttl(db);System.out.println(ttl); // 输出1000hash类型使用示例Jedis jedis new Jedis(127.0.0.1, 6379);// 把 Key 值定义为变量final String REDISKEY myhash;// 插入单个元素jedis.hset(REDISKEY, key1, value1);// 查询单个元素MapString, String singleMap jedis.hgetAll(REDISKEY);System.out.println(singleMap.get(key1)); // 输出value1// 查询所有元素MapString, String allMap jedis.hgetAll(REDISKEY);System.out.println(allMap.get(k2)); // 输出val2System.out.println(allMap); // 输出{key1value1, k1val1, k2val2, k39.2, k4v4...}// 删除单个元素Long delResult jedis.hdel(REDISKEY, key1);System.out.println(删除结果 delResult); // 输出删除结果1// 查询单个元素System.out.println(jedis.hget(REDISKEY, key1)); // 输出返回 null列表的使用示例public static void main(String[] args) {Jedis jedis new Jedis(127.0.0.1, 6379);// 声明 Redis keyfinal String REDISKEY list;// 在头部插入一个或多个元素Long lpushResult jedis.lpush(REDISKEY, Java, Sql);System.out.println(lpushResult); // 输出2// 获取第 0 个元素的值String idValue jedis.lindex(REDISKEY, 0);System.out.println(idValue); // 输出Sql// 查询指定区间的元素ListString list jedis.lrange(REDISKEY, 0, -1);System.out.println(list); // 输出[Sql, Java]// 在元素 Java 前面添加 MySQL 元素jedis.linsert(REDISKEY, ListPosition.BEFORE, Java, MySQL);System.out.println(jedis.lrange(REDISKEY, 0, -1)); // 输出[Sql, MySQL, Java]jedis.close();}除了这些简单的使用方式外Jedis还支持连接池的形式使用以及可以用哨兵模式和集群模式有关详细使用方式可以从官网获取:Jedis官网https://github.com/redis/jedis
spring data redis : https://docs.spring.io/spring-data/redis/docs/current/reference/html/RedisTemplateRedisTemplate应该是我们接触比较多的它提供了多种数据类型操作的API以及自动化连接池管理所以它很受青睐。导入依赖dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-redis/artifactId/dependency配置连接相关 RedisTemplate是一个高度封装的类封装了许多数据类型的操作同时还提供了连接池自动化关联。redis:#数据库索引database: 0host: 172.16.10.165port: 10111password: 123456# cluster:# nodes:# - 172.16.10.165:6390# - 172.16.10.165:6391# - 172.16.10.165:6392# - 172.16.10.165:6393# - 172.16.10.165:6394jedis:pool:#最大连接数max-active: 100#最大阻塞等待时间(负数表示没限制)max-wait: 6000ms#最大空闲max-idle: 8#最小空闲min-idle: 1time-between-eviction-runs: 2000ms#连接超时时间timeout: 10000ms简单使用示例基于spring boot Resource
private RedisTemplate redisTemplate;GetMapping(/world)
public void hello(){redisTemplate.opsForValue().set(aaa,redisTemplate);Object hello redisTemplate.opsForValue().get(aaa);System.out.println(hello.toString());
}但是直接使用会有一个问题可以看到在redis中我们存入的值并不是我们预想的这是因为序列化问题导致的框架对于数据的存储是基于字节的序列化默认情况下RedisTemplate默认使用的是java本地的序列化与反序列化但是一般都不会去使用默认的序列化方式因为可读性比较差所以一般在工程中会使用其它的序列化方式怎么使用导入jackson依赖dependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-databind/artifactIdversion2.11.4/version
/dependency配置序列化方式import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;Configuration
public class RedisAutoConfig {public RedisAutoConfig() {}Beanpublic RedisTemplate redisTemplate(RedisConnectionFactory connectionFactory) {RedisTemplateString, Object redisTemplate new RedisTemplate();redisTemplate.setConnectionFactory(connectionFactory);redisTemplate.setKeySerializer(new StringRedisSerializer());Jackson2JsonRedisSerializer jackson2JsonRedisSerializer new Jackson2JsonRedisSerializer(Object.class);ObjectMapper objectMapper new ObjectMapper();objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);jackson2JsonRedisSerializer.setObjectMapper(objectMapper);redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);redisTemplate.setHashKeySerializer(jackson2JsonRedisSerializer);redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);return redisTemplate;}
}RedisTemplate API:RedisTemplate提供了多种数据类型操作的API我下面列举了几种常用的操作方法//list类型
//向redis的某个key下面的list列表里面插入一个list列表不会去重。
ListOrgRelationInfo remainOrgNodes new ArrayList();
redisTemplate.opsForList().leftPushAll(CACHE_KEY, remainOrgNodes);
//从redis中取出某一个key下面的list列表 0表示从列表的第0个元素开始取-1表示直取到倒数第一个元素也就是整个列表的所有元素都取出来。
ListOrgRelationInfo lastRemainOrgNodeList redisTemplate.opsForList().range(CACHE_NAME CACHE_REMAIN_KEY_PREFIX, 0, -1);
//Hash类型
// 向redis中某个key下面插入keyhash的Map。
MapLong, UserRelationInfo value new HashMap();
userHashRedisTemplate.opsForHash().putAll(KEY, value );
//从redis中某个key下面删除掉某个hashkey所在的value。
userHashRedisTemplate.opsForHash().delete(key, sourceOrgId);
//从redis中某个key下面得到这个key对应的hashkey的value值。前一个key只能是String类型hashKey可以声明为自己需要的类型。
userHashRedisTemplate.opsForHash().get(Key hashKey);
//从redis中得到某个key下面的所有的hashkey和hashvalue值。
MapObject, Object userOrgMap userHashRedisTemplate.opsForHash().entries(getUserNodeCacheKey(syncUserNode.getSourceId()));
//set类型
//向redis的某个key下面的set列表里面插入一个元素回去重且无序。
userRoleSetRedisTemplate.opsForSet().add(KEY, cloudtOrgRoleInfo);
//从redis的某个key下面得到set集合的所有元素返回的也是一个Set集合。
cloudtOrgRoleSet userRoleSetRedisTemplate.opsForSet().members(KEY);
//从redis的某个key下面的set集合中删除掉一个元素。
userRoleSetRedisTemplate.opsForSet().remove( KEY, subDeleteOrgRoleUserArray[i]);