подключение данных доступа Использование Redis необходимо для Redis
1, соединен с Redis
Предоставление пружинных-данные Redis-2.1.0.RELEASE пакета подключения фабрика два Redis, для создания подключения сервера базы данных Redis:
JedisConnectionFactory
LettuceConnectionFactory
~~ специфические различия неясны, использование JedisConnectionFactory
RedisConnectionFactory конфигурации
@Bean общественного RedisConnectionFactory завод (RedisStandaloneConfiguration redisStandaloneConfiguration) { возвращение нового JedisConnectionFactory (redisStandaloneConfiguration); } @Bean общественного RedisStandaloneConfiguration redisStandaloneConfiguration) {( конфигурация RedisStandaloneConfiguration = новый RedisStandaloneConfiguration (); configuration.setHostName ( "локальный" ); // configuration.setPassword ( ""); configuration.setPort (6379 ); вернуть конфигурацию; }
2, 使用 RedisTemplate, StringRedisTemplate
1, на основе определенного типа RedisTemplate
Класс Student субъект определяет
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
общественный класс Student { общественный Student ( ИНТ идентификатор, имя String) { это .id = идентификатор; это .name = имя; } Общественности Student () { } частный Int идентификатор; частное имя строки; общественного ИНТ GetId () { возвращение идентификатор; } Общественного недействительными SETID ( INT ID) { это .id = ID; } Публичная строка GetName () { вернуть имя; } Общественная пустота SetName (имя String) { это .name = имя; } @Override общественные булевы Equals (Object о) { если ( это == о) вернуться верно ; если (о == NULL || GetClass () = o.getClass) (!) вернуться ложным ; Студент = (Student) о; Возвращение идентификатор == student.id && name.equals (student.name); } @Override общественного ИНТ хэш - код () { вернуть Objects.hash (идентификатор, имя); } @Override общественности Строка ToString () { возвращение супер .ToString (); } }
配置 RedisTemplate <String, Student>
@Bean общественного RedisTemplate <String, Student> studentRedisTemplate (RedisConnectionFactory сравни) { RedisTemplate <String, Student> Redis = новый RedisTemplate <> (); redis.setConnectionFactory (см); redis.setKeySerializer ( новый StringRedisSerializer ()); redis.setValueSerializer ( новый Jackson2JsonRedisSerializer <> (Student. класс )); вернуться Redis; }
Инъекции RedisTemplate <String, Student> и испытания
@Autowired частный RedisTemplate <String, Student> studentTemplate; @Test общественности недействительным testStudentTemplate () { Key String = "студент" ; studentTemplate.delete (ключ); Студент = новый Студент (0, "Аа" ); studentTemplate.opsForSet () добавить (ключ, студент). Set <Student> набор = studentTemplate.opsForSet () членов (ключ). Assert.assertTrue (комплект ! = NULL && set.contains (студент)); }
2, на основе типа объекта RedisTemplate
配置 RedisTemplate <String, Object>
@Bean общественного RedisTemplate <String, Object> redisTemplate (RedisConnectionFactory завод) { RedisTemplate <String, Object> Шаблон = новый RedisTemplate <String, Object> (); template.setConnectionFactory (завод); Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = новый Jackson2JsonRedisSerializer <> (Объект. Класс ); ObjectMapper ом = новый ObjectMapper (); om.setVisibility (PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); om.enableDefaultTyping (ObjectMapper.DefaultTyping.NON_FINAL); jackson2JsonRedisSerializer.setObjectMapper (ом); StringRedisSerializer StringRedisSerializer = новый новый StringRedisSerializer (); // ключ с использованием сериализации Строка template.setKeySerializer (stringRedisSerializer); // ключ хеш также используется строка сериализовать манер template.setHashKeySerializer (stringRedisSerializer); // значение , используя сериализацию Джексон template.setValueSerializer (jackson2JsonRedisSerializer); // хэш - значение использования сериализации Джексона template.setHashValueSerializer (jackson2JsonRedisSerializer); template.afterPropertiesSet (); возврат шаблона; }
Инъекции RedisTemplate <String, Object> и тестирование
@Autowired личное RedisTemplate <String, Object> objectRedisTemplate; @Test общественности недействительным testObjectTemplate () { Key String = "объект" ; objectRedisTemplate.delete (ключ); // 存取单个实例 Студент = новый студент (1, "Bb" ); objectRedisTemplate.opsForValue () набор (ключ, студент). Результат Object = objectRedisTemplate.opsForValue () получить (ключ). Assert.assertEquals (студент, результат); // 存取集合类 List <Student> Список = новый ArrayList <> (); для ( междунар я = 0; я <3; я ++ ) { list.add ( новый студент (я, "имя" + я)); } ObjectRedisTemplate.delete ( "список" ); . objectRedisTemplate.opsForList () leftPushAll ( "список" , список); Список <Объект> resultList = objectRedisTemplate.opsForList () Диапазон ( "список", 0, -1). // 取出来的数据外面包了一层Список если (resultList! = NULL && ((Список) resultList) .size ()> 0 && resultList.get (0) InstanceOf список) { resultList = (Список) resultList.get (0 ); Assert.assertEquals (список, resultList); } Иначе { Assert.fail (); } }
3, StringRedisTemplate
StringRedisTemplate 配置
@Bean общественного StringRedisTemplate stringRedisTemplate (RedisConnectionFactory ср) { StringRedisTemplate stringRedisTemplate = новый StringRedisTemplate (); stringRedisTemplate.setConnectionFactory (см); stringRedisTemplate.setKeySerializer ( новый StringRedisSerializer ()); stringRedisTemplate.setValueSerializer ( новый Jackson2JsonRedisSerializer <> (Object. класс )); вернуться stringRedisTemplate; }
И испытать инъекции StringRedisTemplate
@Test общественности недействительным testStringRedisTemplate () бросает исключение { Строка ключа = "stringRedisTemplate" ; stringRedisTemplate.delete (ключ); Студент = новый Студент (1, "Bb" ); ObjectMapper ObjectMapper = новый ObjectMapper (); Строка studentString = objectMapper.writeValueAsString (студент); // 写入,读取单个值 . StringRedisTemplate.opsForList () leftPush (ключ, studentString); Результат Строка = stringRedisTemplate.opsForList () leftPop (ключ). Assert.assertEquals (результат, studentString); Список <Student> studentList = новый ArrayList <> (); Карта <String, Student> studentMap = новый HashMap <> (); для ( междунар я = 0; я <5; я ++ ) { Student темп = новый студент (я, "имя" + я); studentList.add (температура); studentMap.put ( "" + я, темп); } // 存取ArrayList <Student> stringRedisTemplate.delete ( "studentList" ); . stringRedisTemplate.opsForValue () множество ( "studentList" , objectMapper.writeValueAsString (studentList)); Строка studentListString = stringRedisTemplate.opsForValue () получить ( "studentList". ); JavaType javaType1 = objectMapper.getTypeFactory () constructParametricType (ArrayList.. Класс , студент. Класс ); Список <Student> studentList1 = objectMapper.readValue (studentListString, javaType1); Assert.assertEquals (studentList, studentList1); // 存取Карта stringRedisTemplate.delete ( "studentMap" ); stringRedisTemplate.opsForValue (). комплект ("studentMap" , objectMapper.writeValueAsString (studentMap)); JavaType javaType2 = objectMapper.getTypeFactory () constructParametricType (HashMap.. Класс , String. Класс , студент. Класс ); Карта <String, Student> resultMap = objectMapper.readValue (stringRedisTemplate.opsForValue () получить ( "studentMap". ), JavaType2); Assert.assertEquals (studentMap.entrySet (), resultMap.entrySet ()); }