RedisTemplate访问Redis数据结构(一)——String
当对String数据结构进行操作时,推荐直接使用spring-data-redis提供的StringRedisTemplate,其配置如下
<bean id="stringRedisTemplate" class="org.springframework.data.redis.core.StringRedisTemplate">
<property name="connectionFactory" ref="jedisConnFactory" />
<property name="keySerializer">
<bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />
</property>
<property name="valueSerializer">
<bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />
</property>
<property name="hashKeySerializer">
<bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />
</property>
<property name="hashValueSerializer">
<bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />
</property>
</bean>
RedisTemplate使用ValueOperations对String类型进行基本操作。首先初始化spring工厂获得redisTemplate和opsForValue
private RedisTemplate<String,String> stringTemplate;
private ValueOperations<String, String> opsForValue; @SuppressWarnings("unchecked")
@Before
public void before(){
//初始化
@SuppressWarnings("resource")
ApplicationContext context = new ClassPathXmlApplicationContext("/applicationContext.xml");
stringTemplate = (RedisTemplate<String,String>)context.getBean("stringRedisTemplate");
opsForValue = stringTemplate.opsForValue();
}
下面使用Junit4测试工具进行演示,各位同学可以直接粘贴源代码自行测试使用,前提是你已经安装和配置好redis哦。
V get(Object key);
@Test
public void testSet(){
//删除健(每次测试前我都会对当前测试的键进行删除,防止影响测试结果)
stringTemplate.delete("liu1");
opsForValue.set("liu1", "liu1");
System.out.println(opsForValue.get("liu1"));//liu1
}
void set(K key, V value, long timeout, TimeUnit unit);
@Test
public void testSetTimeOut() throws InterruptedException{
stringTemplate.delete("liu2");
//加了失效机制
opsForValue.set("liu2", "liu2", 10, TimeUnit.SECONDS);
Thread.sleep(5000);
System.out.println(opsForValue.get("liu2"));//liu2
Thread.sleep(5000);
System.out.println(opsForValue.get("liu2"));//null
}
Boolean setIfAbsent(K key, V value);
@Test
public void testSetIfAbsent(){
stringTemplate.delete("liu4");
stringTemplate.delete("liu5");
opsForValue.set("liu4", "liu4");
System.out.println(opsForValue.setIfAbsent("liu4", "liu4"));//false
System.out.println(opsForValue.setIfAbsent("liu5", "liu5"));//true
}
void multiSet(Map < ? extends K, ? extends V > map);
List multiGet(Collection < K > keys);
Boolean multiSetIfAbsent(Map< ? extends K, ? extends V > map);
@Test
public void testMultiSetAndGet (){
stringTemplate.delete("liu6");
stringTemplate.delete("liu7");
stringTemplate.delete("liu8");
stringTemplate.delete("liu9");
Map<String,String> param = new HashMap<String,String>();
param.put("liu6", "liu6");
param.put("liu7", "liu7");
param.put("liu8", "liu8");
//为多个键分别设置它们的值
opsForValue.multiSet(param);
List<String> keys = new ArrayList<String>();
keys.add("liu6");
keys.add("liu7");
keys.add("liu8");
//为多个键分别取出它们的值
List<String> results = opsForValue.multiGet(keys);
for (String result : results) {
System.out.println(result);
/*
liu6
liu7
liu8
*/
}
param.clear();
param.put("liu8", "hahaha");
param.put("liu9", "liu9");
//为多个键分别设置它们的值,如果存在则返回false,不存在返回true
System.out.println(opsForValue.multiSetIfAbsent(param));//false
System.out.println(opsForValue.get("liu8"));//liu8
}
V getAndSet(K key, V value);
@Test
public void testGetAndSet(){
stringTemplate.delete("liu9");
opsForValue.set("liu9", "liu9");
//设置键的字符串值并返回其旧值
System.out.println(opsForValue.getAndSet("liu9", "haha"));//liu9
System.out.println(opsForValue.get("liu9"));//haha
}
Long increment(K key, long delta);
Double increment(K key, double delta);
@Test
public void testIncrement(){
stringTemplate.delete("liu10");
opsForValue.set("liu10", "6");
//值增长,支持整形和浮点型
System.out.println(opsForValue.increment("liu10", 1));//
System.out.println(opsForValue.increment("liu10", 1.1));//8.1
opsForValue.set("liu10", "liu10");
opsForValue.increment("liu10", 1);//redis.clients.jedis.exceptions.JedisDataException: ERR value is not an integer or out of range
}
Integer append(K key, String value);
@Test
public void testAppend(){
stringTemplate.delete("liu11");
stringTemplate.delete("liu12");
//如果key已经存在并且是一个字符串,则该命令将该值追加到字符串的末尾。如果键不存在,则它被创建并设置为空字符串,因此APPEND在这种特殊情况下将类似于SET。
opsForValue.append("liu11", "liu11");
System.out.println(opsForValue.get("liu11"));//liu11
opsForValue.set("liu12", "liu12");
opsForValue.append("liu12", "haha");
System.out.println(opsForValue.get("liu12"));//liu12haha
}
String get(K key, long start, long end);
@Test
public void testGetPart(){
stringTemplate.delete("liu13");
opsForValue.set("liu13", "liu13");
//截取key所对应的value字符串
System.out.println(opsForValue.get("liu13", 0, 2));//liu
}
void set(K key, V value);
@Test
public void testSize(){
stringTemplate.delete("liu14");
opsForValue.set("liu14", "liu14");
//返回key所对应的value值得长度
System.out.println(opsForValue.size("liu14"));//
}
Boolean setBit(K key, long offset, boolean value);
@Test
public void testSetBit(){
stringTemplate.delete("liu15");
//true为1,false为0
opsForValue.set("liu15", "liu15");
//对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)
//key键对应的值value对应的ASCII码,在offset的位置(从左向右数)变为value
System.out.println(opsForValue.setBit("liu15", 13, true));//false
System.out.println(opsForValue.get("liu15"));//lmu15
for(int i = 0 ; i<"liu15".length()*8;i++){
if(opsForValue.getBit("liu15", i)){
System.out.print(1);
}else{
System.out.print(0);
}
//
}
}
转载自:https://blog.csdn.net/weixin_37490221/article/details/78134521
RedisTemplate访问Redis数据结构(一)——String的更多相关文章
- RedisTemplate访问Redis数据结构
https://www.jianshu.com/p/7bf5dc61ca06 Redis 数据结构简介 Redis 可以存储键与5种不同数据结构类型之间的映射,这5种数据结构类型分别为String(字 ...
- RedisTemplate访问Redis数据结构(介绍和常用命令)
Redis 数据结构简介 Redis 可以存储键与5种不同数据结构类型之间的映射,这5种数据结构类型分别为String(字符串).List(列表).Set(集合).Hash(散列)和 Zset(有序集 ...
- 如何使用RedisTemplate访问Redis数据结构之字符串操作
Redis 数据结构简介 Redis 可以存储键与5种不同数据结构类型之间的映射,这5种数据结构类型分别为String(字符串).List(列表).Set(集合).Hash(散列)和 Zset(有序集 ...
- 如何使用RedisTemplate访问Redis数据结构
RedisTemplate介绍 spring封装了RedisTemplate对象来进行对redis的各种操作,它支持所有的 redis 原生的api. RedisTemplate在spring代码中的 ...
- Redis(九):使用RedisTemplate访问Redis数据结构API大全
RedisTemplate介绍 spring封装了RedisTemplate对象来进行对redis的各种操作,它支持所有的 redis 原生的api. RedisTemplate在spring代码中的 ...
- 如何使用RedisTemplate访问Redis数据结构之list
Redis的List数据结构 这边我们把RedisTemplate序列化方式改回之前的 Jackson2JsonRedisSerializer<Object> jackson2JsonRe ...
- RedisTemplate访问Redis数据结构(前言)
Redis五种基本数据结构 redis提供键值对的形式对数据进行存储.支持五种数据类型:String(字符串),List(链表),Hash(散列),Set(无序集合),ZSet(有序集合).下面是网上 ...
- 如何使用RedisTemplate访问Redis数据结构之Zset
Redis的ZSet数据结构 Redis 有序集合和无序集合一样也是string类型元素的集合,且不允许重复的成员. 不同的是每个元素都会关联一个double类型的分数.redis正是通过分数来为集合 ...
- RedisTemplate访问Redis数据结构(五)——ZSet
Redis 有序集合和无序集合一样也是string类型元素的集合,且不允许重复的成员.不同的是每个元素都会关联一个double类型的分数.有序集合的成员是唯一的,但分数(score)却可以重复.red ...
随机推荐
- 【Linux开发】Linux磁盘管理
第八章 Linux磁盘管理 [查看磁盘或者目录的容量 df 和 du] df 查看已挂载磁盘的总容量.使用容量.剩余容量等,可以不加任何参数,默认是按k为单位显示的:df常用参数有 –i -h -k ...
- 实验报告5&第七周课程总结
实验四 类的继承 实验目的 理解抽象类与接口的使用: 了解包的作用,掌握包的设计方法. 实验要求 掌握使用抽象类的方法. 掌握使用系统接口的技术和创建自定义接口的方法. 了解 Java 系统包的结构. ...
- 【7.24校内交流赛】T3【qbxt】复读警告
数据范围:N,key<=1000; 首先看题目背景,显然不是DP就是图论,但是这显然不是个图论,因此这就是个DP: 接下来考虑怎么DP 我们定义dp[i][j]表示现在dp到了第i个数,当前i个 ...
- P2672跳石头
这是2015noip的一道二分答案的题目,看了题解才会,, 题目给出石头的位置并且让你踩着石头往前跳,最多删掉m个石头还可以顺利通过,求解最短跳跃距离的最大值. 那么二分什么呢:mid为跳跃的长度.那 ...
- Comet OJ C1076 [Contest #4]求和
题目 首先我们可以通过经典容斥转化为计算\([1,x]\)的答案. 现在我们考虑一个数的个位对答案的贡献. 每做一次操作都会让个位加上十位然后取模,直到只有个位为止. 我们发现这个过程中,个位数前的系 ...
- [BZOJ 3992] [SDOI 2015] 序列统计(DP+原根+NTT)
[BZOJ 3992] [SDOI 2015] 序列统计(DP+原根+NTT) 题面 小C有一个集合S,里面的元素都是小于质数M的非负整数.他用程序编写了一个数列生成器,可以生成一个长度为N的数列,数 ...
- mac下安装php zookeeper扩展
安装步骤 php-zookeeper依赖libzookeeper,所以需要先安装libzookeeper 安装libzookeeper cd /usr/local/src/ wget http://m ...
- Ajax请求后台数据
一.前期准备 安装好XAMPP软件,并运行起来.本文代码是基于XAMPP开发环境,XAMPP是完全免费且易于安装的Apache发行版,其中包含MariaDB.PHP和Perl.XAMPP开放源码包的设 ...
- how to install protobuff python
当前环境: operate system: Ubuntu 14.04.1 LTS protoc --version: libprotoc 2.5.0 protocol-buffers versi ...
- MySQL索引优化(索引两表优化案例)
建表SQL CREATE TABLE IF NOT EXISTS `class` ( `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `card` INT ...