- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章java 用redisTemplate 的 Operations存取list集合操作由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
@RestController
@RequestMapping
(
"/test"
)
@Slf4j
public
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"
);
}
//存储
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;
}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
|
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
);
|
REmote DIctionary Server(Redis) 是一个由 Salvatore Sanfilippo 写的 key-value 存储系统,是跨平台的非关系型数据库.
Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库,并提供多种语言的 API.
Redis 通常被称为数据结构服务器,因为值(value)可以是字符串(String)、哈希(Hash)、列表(list)、集合(sets)和有序集合(sorted sets)等类型.
spring 封装了 RedisTemplate 对象来进行对redis的各种操作,它支持所有的 redis 原生的 api.
两者的关系是StringRedisTemplate继承RedisTemplate.
两者的数据是不共通的;也就是说StringRedisTemplate只能管理StringRedisTemplate里面的数据,RedisTemplate只能管理RedisTemplate中的数据.
SDR默认采用的序列化策略有两种,一种是String的序列化策略,一种是JDK的序列化策略.
StringRedisTemplate默认采用的是String的序列化策略,保存的key和value都是采用此策略序列化保存的.
RedisTemplate默认采用的是JDK的序列化策略,保存的key和value都是采用此策略序列化保存的.
set void set(K key, V value),
使用:redisTemplate.opsForValue().set("name","tom"),
结果:redisTemplate.opsForValue().get("name") 输出结果为tom 。
set void set(K key, V value, long timeout, TimeUnit unit),
使用:redisTemplate.opsForValue().set("name","tom",10, TimeUnit.SECONDS),
结果:redisTemplate.opsForValue().get("name")由于设置的是10秒失效,十秒之内查询有结果,十秒之后返回为null 。
首先需要导入相关的依赖 。
1
2
3
4
|
<
dependency
>
<
groupId
>org.springframework.boot</
groupId
>
<
artifactId
>spring-boot-starter-data-redis</
artifactId
>
</
dependency
>
|
序列化,序列化是为了方便数据传输 。
第一种 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
@Service
public
class
TokenServiceTask {
public
static
final
String ONLINE_OPERRATOR =
""
;
/**
* redis序列化存储
*
* @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();
}
}
|
第二种 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
@Configuration
@EnableCaching
//启用缓存,这个注解很重要;
public
class
RedisCacheConfig
extends
CachingConfigurerSupport {
/**
* 缓存管理器.
* @param redisTemplate
* @return
*/
@Bean
public
CacheManager cacheManager(RedisTemplate<?,?> redisTemplate) {
CacheManager cacheManager =
new
RedisCacheManager(redisTemplate);
return
cacheManager;
}
/**
* redis模板操作类,类似于jdbcTemplate的一个类;
*
* 虽然CacheManager也能获取到Cache对象,但是操作起来没有那么灵活;
*
* 这里在扩展下:RedisTemplate这个类不见得很好操作,我们可以在进行扩展一个我们
*
* 自己的缓存类,比如:RedisStorage类;
*
* @param factory : 通过Spring进行注入,参数在application.properties进行配置;
* @return
*/
@Bean
public
RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory) {
RedisTemplate<String,String> redisTemplate =
new
RedisTemplate<String, String>();
redisTemplate.setConnectionFactory(factory);
//key序列化方式;(不然会出现乱码;),但是如果方法上有Long等非String类型的话,会报类型转换错误;
//所以在没有自己定义key生成策略的时候,以下这个代码建议不要这么写,可以不配置或者自己实现ObjectRedisSerializer
//或者JdkSerializationRedisSerializer序列化方式;
RedisSerializer<String> redisSerializer =
new
StringRedisSerializer();
//Long类型不可以会出现异常信息;
redisTemplate.setKeySerializer(redisSerializer);
redisTemplate.setHashKeySerializer(redisSerializer);
return
redisTemplate;
}
}
|
接下来上操作 。
1
2
3
4
5
6
|
public
void
test01() {
redisTemplate.opsForValue().set(
"chenlianghongtest"
,
"chenlianghong"
,
30
, TimeUnit.SECONDS);
String test = redisTemplate.opsForValue().get(
"chenlianghongtest"
);
System.out.println(test);
logger.info(
"牛啊牛啊"
);
}
|
以上为个人经验,希望能给大家一个参考,也希望大家多多支持我.
原文链接:https://blog.csdn.net/qq_31024823/article/details/81233752 。
最后此篇关于java 用redisTemplate 的 Operations存取list集合操作的文章就讲到这里了,如果你想了解更多关于java 用redisTemplate 的 Operations存取list集合操作的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我想使用 R 预定义这样的列表 DATA<-list( list(list(),list(),list()), list(list(),list(),list()), list(list(),l
如何将一个列表添加到另一个列表,返回一个列表的列表? foo :: [a] -> [a] -> [[a]] 例如,我想要的结果是: foo [1,2] [3,4] 将是 [[1,2], [3,4]]。
我还没有在这里找到类似问题的解决方案,所以我会寻求你的帮助。 有 2 个列表,其中之一是列表列表: categories = ['APPLE', 'ORANGE', 'BANANA'] test_re
这个问题不同于Converting list of lists / nested lists to list of lists without nesting (这会产生一组非常具体的响应,但无法解决
原始列表转换为 List正好。为什么原始列表的列表不能转换为 List 的列表? { // works List raw = null; List wild = raw; } {
在下面的代码中,get()被调用并将其结果分配给类型为 List> 的变量. get()返回 List>并在类型参数为 T 的实例上调用设置为 ? ,所以它应该适合。 import java.util
原始列表转换为 List正好。为什么原始列表的列表不能转换为 List 的列表? { // works List raw = null; List wild = raw; } {
在insufficiently-polymorphic 作者说: def foo[A](fst: List[A], snd: List[A]): List[A] There are fewer way
我有下面的代码有效。 class ListManipulate(val list: List, val blockCount: Int) { val result: MutableList>
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 5 年前。 Improve this ques
在 scala (2.9) 中转换列表列表的最佳方法是什么? 我有一个 list : List[List[A]] 我想转换成 List[A] 如何递归地实现这一点?或者还有其他更好的办法吗? 最佳答案
我编写了这个函数来确定给定元素是否存储在元组列表的列表中,但目前它只搜索第一个列表。我将如何搜索其余列表? fun findItem (name : command, ((x,y)::firstlis
我创建了一个类名 objectA,它有 4 个变量:约会时间;字符串文本;变量 1,变量 2 我需要创建一个 ObjectA() 列表。然后首先按时间对它们进行分组,其次按 var1,然后按 var2
我有一套说法 char={'J','A'} 和列表的列表 content = [[1,'J', 2], [2, 'K', 3], [2, 'A', 3], [3,'A', 9], [5, 'J', 9
我有以下列表 List >>> titles = new ArrayList >>> ();我想访问它的元素,但我不知道该怎么做.. 该列表有 1 个元素,它又包含 3 个元素,这 3 个元素中的
转换 List[List[Long]] 的最佳方法是什么?到 List[List[Int]]在斯卡拉? 例如,给定以下类型列表 List[List[Long]] val l: List[List[Lo
我有一个来自 Filereader (String) 的 List-List,如何将其转换为 List-List (Double):我必须返回一个包含 line-Array 的第一个 Values 的
我收集了List> 。我需要将其转换为List> 。这是我尝试过的, List> dataOne = GetDataOne(); var dataTwo = dataOne.Select(x => x
这个问题在这里已经有了答案: Cannot convert from List to List> (3 个答案) 关闭 7 年前。 我没有得到这段代码以任何方式编译: List a = new Ar
这个问题在这里已经有了答案: Cannot convert from List to List> (3 个答案) 关闭 7 年前。 我没有得到这段代码以任何方式编译: List a = new Ar
我是一名优秀的程序员,十分优秀!