java 用redisTemplate 的 Operations存取list集合操作
@RestController@RequestMapping('/test')@Slf4jpublic class TestController { @Autowired private RedisTemplate redisTemplate; @ApiOperation('redis-savelist') @PostMapping('/redis/save/list') public void redisSaveList() {List<Person> list = getPersonList();//清空while (redisTemplate.opsForList().size('oowwoo') > 0){ redisTemplate.opsForList().leftPop('oowwoo');}//存儲(chǔ)redisTemplate.opsForList().rightPushAll('oowwoo', list); //取出List<Person> oowwoo = redisTemplate.opsForList().range('oowwoo', 0, -1);log.info('>>>>>>>>>>>>>>>list = {}', oowwoo.toString());Iterator<Person> it = oowwoo.iterator();while(it.hasNext()){ Person p = it.next(); log.info('person = {}', p.toString());} } private List<Person> getPersonList() {Person p1 = new Person();p1.setId(1L);p1.setName('張一');p1.setAge(11); Person p2 = new Person();p2.setId(2L);p2.setName('張二');p2.setAge(22); Person p3 = new Person();p3.setId(3L);p3.setName('張三');p3.setAge(33); List<Person> list = new ArrayList<>();list.add(p1);list.add(p2);list.add(p3);return list; }}二 、將list轉(zhuǎn)為json對(duì)象存取
import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.JSONObject; @Autowired private StringRedisTemplate stringRedisTemplate; //存List<Long> businessIdList = eeFreecarriageShopService.selectBusinessIdInPromotion(); stringRedisTemplate.opsForValue().set(RedisConstants.FREECARRIAGE_BUSINESSIDLIST, JSON.toJSON(businessIdList).toString()); //取String businessJsonArray = stringRedisTemplate.opsForValue().get(RedisConstants.FREECARRIAGE_BUSINESSIDLIST);List<Long> businessIdList = JSONObject.parseArray(businessJsonArray, Long.class);redis在java中的使用,基本存取操作(RedisTemplate)redis
REmote DIctionary Server(Redis) 是一個(gè)由 Salvatore Sanfilippo 寫(xiě)的 key-value 存儲(chǔ)系統(tǒng),是跨平臺(tái)的非關(guān)系型數(shù)據(jù)庫(kù)。
Redis 是一個(gè)開(kāi)源的使用 ANSI C 語(yǔ)言編寫(xiě)、遵守 BSD 協(xié)議、支持網(wǎng)絡(luò)、可基于內(nèi)存、分布式、可選持久性的鍵值對(duì)(Key-Value)存儲(chǔ)數(shù)據(jù)庫(kù),并提供多種語(yǔ)言的 API。
Redis 通常被稱為數(shù)據(jù)結(jié)構(gòu)服務(wù)器,因?yàn)橹担╲alue)可以是字符串(String)、哈希(Hash)、列表(list)、集合(sets)和有序集合(sorted sets)等類(lèi)型。
RedisTemplatespring 封裝了 RedisTemplate 對(duì)象來(lái)進(jìn)行對(duì)redis的各種操作,它支持所有的 redis 原生的 api。
StringRedisTemplate與RedisTemplate兩者的關(guān)系是StringRedisTemplate繼承RedisTemplate。
兩者的數(shù)據(jù)是不共通的;也就是說(shuō)StringRedisTemplate只能管理StringRedisTemplate里面的數(shù)據(jù),RedisTemplate只能管理RedisTemplate中的數(shù)據(jù)。
SDR默認(rèn)采用的序列化策略有兩種,一種是String的序列化策略,一種是JDK的序列化策略。
StringRedisTemplate默認(rèn)采用的是String的序列化策略,保存的key和value都是采用此策略序列化保存的。
RedisTemplate默認(rèn)采用的是JDK的序列化策略,保存的key和value都是采用此策略序列化保存的。
set void set(K key, V value);
使用:redisTemplate.opsForValue().set('name','tom');
結(jié)果:redisTemplate.opsForValue().get('name') 輸出結(jié)果為tom
set void set(K key, V value, long timeout, TimeUnit unit);
使用:redisTemplate.opsForValue().set('name','tom',10, TimeUnit.SECONDS);
結(jié)果:redisTemplate.opsForValue().get('name')由于設(shè)置的是10秒失效,十秒之內(nèi)查詢有結(jié)果,十秒之后返回為null
這里只討論對(duì)string數(shù)據(jù)的使用,附上一個(gè)小demo首先需要導(dǎo)入相關(guān)的依賴
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId></dependency>
序列化,序列化是為了方便數(shù)據(jù)傳輸
這里提供兩種序列化封裝操作:第一種
@Servicepublic class TokenServiceTask { public static final String ONLINE_OPERRATOR = ''; /** * redis序列化存儲(chǔ) * * @param redisTemplate */ @SuppressWarnings({'rawtypes', 'unchecked'}) @Autowired(required = false) public void setRedisTemplate(RedisTemplate redisTemplate) {RedisSerializer stringSerializer = new StringRedisSerializer();redisTemplate.setKeySerializer(stringSerializer);redisTemplate.setValueSerializer(stringSerializer);redisTemplate.setHashKeySerializer(stringSerializer);redisTemplate.setHashValueSerializer(stringSerializer);this.redisTemplate = redisTemplate; } @Resource private RedisTemplate<String, String> redisTemplate; public void setToken(String key, String token) {ValueOperations<String, String> value = redisTemplate.opsForValue();value.set(ONLINE_OPERRATOR + key, token); } public void setTokenWithTime(String key, String token, long number, TimeUnit timeUnit) {ValueOperations<String, String> value = redisTemplate.opsForValue();value.set(ONLINE_OPERRATOR + key, token, number, timeUnit); } public void freshTime(String key) {redisTemplate.expire(key, 1800, TimeUnit.SECONDS); } public String getToken(String key) {return redisTemplate.boundValueOps(key).get(); }}
第二種
@Configuration@EnableCaching //啟用緩存,這個(gè)注解很重要;public class RedisCacheConfig extends CachingConfigurerSupport { /** * 緩存管理器. * @param redisTemplate * @return */ @Bean public CacheManager cacheManager(RedisTemplate<?,?> redisTemplate) {CacheManager cacheManager = new RedisCacheManager(redisTemplate);return cacheManager; } /** * redis模板操作類(lèi),類(lèi)似于jdbcTemplate的一個(gè)類(lèi); * * 雖然CacheManager也能獲取到Cache對(duì)象,但是操作起來(lái)沒(méi)有那么靈活; * * 這里在擴(kuò)展下:RedisTemplate這個(gè)類(lèi)不見(jiàn)得很好操作,我們可以在進(jìn)行擴(kuò)展一個(gè)我們 * * 自己的緩存類(lèi),比如:RedisStorage類(lèi); * * @param factory : 通過(guò)Spring進(jìn)行注入,參數(shù)在application.properties進(jìn)行配置; * @return */ @Bean public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory) {RedisTemplate<String,String> redisTemplate = new RedisTemplate<String, String>();redisTemplate.setConnectionFactory(factory);//key序列化方式;(不然會(huì)出現(xiàn)亂碼;),但是如果方法上有Long等非String類(lèi)型的話,會(huì)報(bào)類(lèi)型轉(zhuǎn)換錯(cuò)誤;//所以在沒(méi)有自己定義key生成策略的時(shí)候,以下這個(gè)代碼建議不要這么寫(xiě),可以不配置或者自己實(shí)現(xiàn)ObjectRedisSerializer//或者JdkSerializationRedisSerializer序列化方式;RedisSerializer<String> redisSerializer = new StringRedisSerializer();//Long類(lèi)型不可以會(huì)出現(xiàn)異常信息;redisTemplate.setKeySerializer(redisSerializer);redisTemplate.setHashKeySerializer(redisSerializer);return redisTemplate; }}
接下來(lái)上操作
public void test01() {redisTemplate.opsForValue().set('chenlianghongtest','chenlianghong',30, TimeUnit.SECONDS);String test = redisTemplate.opsForValue().get('chenlianghongtest');System.out.println(test);logger.info('牛啊牛啊'); }
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. 淺談XML Schema中的elementFormDefault屬性2. jsp學(xué)習(xí)之scriptlet的使用方法詳解3. ASP.NET MVC獲取多級(jí)類(lèi)別組合下的產(chǎn)品4. ASP.NET MVC實(shí)現(xiàn)橫向展示購(gòu)物車(chē)5. ThinkPHP5 通過(guò)ajax插入圖片并實(shí)時(shí)顯示(完整代碼)6. Docker 容器健康檢查機(jī)制7. python b站視頻下載的五種版本8. ASP.NET MVC使用Session會(huì)話保持表單狀態(tài)9. python實(shí)現(xiàn)PolynomialFeatures多項(xiàng)式的方法10. 解決python使用list()時(shí)總是報(bào)錯(cuò)的問(wèn)題
