pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
application.yml
spring:
redis:
host: localhost
port: 6379
password: 123456
database: 1
String
@Autowired
private StringRedisTemplate stringRedisTemplate;
public void string() {
//增加
stringRedisTemplate.opsForValue().set("str:str1", "0123456789");
stringRedisTemplate.opsForValue().set("str:str2", "ABCDEFGHI", 2, TimeUnit.SECONDS);
//偏移量修改value
stringRedisTemplate.opsForValue().set("str:str1", "ABCDEFGHI", 2);
//增加不存在的key
System.out.println(stringRedisTemplate.opsForValue().setIfAbsent("str:str1", "multi1"));
//批量增加
Map<String, String> maps = new HashMap<String, String>();
maps.put("multi1", "multi1");
maps.put("multi2", "multi2");
stringRedisTemplate.opsForValue().multiSet(maps);
//批量增加不存在的key(只要存在一个,增加无效)
stringRedisTemplate.opsForValue().multiSetIfAbsent(maps);
//获取旧值,存储新值
System.out.println(stringRedisTemplate.opsForValue().getAndSet("str:str1", "ABCDEFGHI"));
//批量查询
List<String> keys = new ArrayList<String>();
keys.add("multi1");
keys.add("multi2");
System.out.println(stringRedisTemplate.opsForValue().multiGet(keys));
//支持存储Long和Double
stringRedisTemplate.opsForValue().increment("str:str4", 2);
//value追加,不存在相当于set
stringRedisTemplate.opsForValue().append("str:str5", "a");
//value长度
System.out.println(stringRedisTemplate.opsForValue().size("str:str4"));
//将value转换为ascii码,并修改指定位置(true:1)
stringRedisTemplate.opsForValue().setBit("str:str5", 6, true);
//查看ascii码指定位置状态
System.out.println(stringRedisTemplate.opsForValue().getBit("str:str5", 7));
//查询
System.out.println(stringRedisTemplate.opsForValue().get("str:str2"));//ABCDEFGHI
System.out.println(stringRedisTemplate.opsForValue().get("str:str1", 0, 2));//ABC
}
Hash
@Autowired
private RedisTemplate<String, String> redisTemplate;
public void hash() {
//增加
redisTemplate.opsForHash().put("map:map1", "name", "周立谱");
Map<String, String> map = new HashMap();
map.put("age", "24");
redisTemplate.opsForHash().putAll("map:map1", map);
//删除
System.out.println(redisTemplate.opsForHash().delete("map:map1", "key1"));
//查询key是否存在
System.out.println(redisTemplate.opsForHash().hasKey("map:map1", "key1"));
//查询value
System.out.println(redisTemplate.opsForHash().get("map:map1", "key2"));
//查询多个value
List<Object> kes = new ArrayList<Object>();
kes.add("name");
System.out.println(redisTemplate.opsForHash().multiGet("map:map1", kes));
//增加Long和Double类型
redisTemplate.opsForHash().increment("map:map1", "sex", 1);
//查询所有key
System.out.println(redisTemplate.opsForHash().keys("map:map1"));
//查询所有value
System.out.println(redisTemplate.opsForHash().values("map:map1"));
//查询所有key-value
System.out.println(redisTemplate.opsForHash().entries("map:map1"));
//增加key不存在的元素
System.out.println(redisTemplate.opsForHash().putIfAbsent("map:map1", "kkk", "k000"));
//遍历
Cursor<Map.Entry<Object, Object>> curosr = redisTemplate.opsForHash().scan("map:map1", ScanOptions.NONE);
while (curosr.hasNext()) {
Map.Entry<Object, Object> entry = curosr.next();
System.out.println(entry.getKey() + ":" + entry.getValue());
}
}
Set
@Autowired
private RedisTemplate<String, String> redisTemplate;
public void set() {
redisTemplate.delete("set:num");
//增加
String[] numArr = new String[]{"1", "2", "3"};
String[] letterArr = new String[]{"a", "b", "c"};
System.out.println(redisTemplate.opsForSet().add("set:num", numArr));
System.out.println(redisTemplate.opsForSet().add("set:letter", letterArr));
//删除指定元素
System.out.println(redisTemplate.opsForSet().remove("set:num", "1"));
//随机删除并返回一个元素
System.out.println(redisTemplate.opsForSet().pop("set:num"));
//A集合移动元素至B集合
System.out.println(redisTemplate.opsForSet().move("set:letter", "b", "set:num"));
//集合大小
System.out.println(redisTemplate.opsForSet().size("set:num"));
//集合是否包含指定元素
System.out.println(redisTemplate.opsForSet().isMember("set:num", "a"));
//AB集合交集
System.out.println(redisTemplate.opsForSet().intersect("set:num", "set:letter"));
//A集合与其他集合交集
List<String> strList = new ArrayList<String>();
strList.add("set:letter");
System.out.println(redisTemplate.opsForSet().intersect("set:num", strList));
//AB集合交集存储至C集合
System.out.println(redisTemplate.opsForSet().intersectAndStore("set:num", "set:letter", "set:store"));
//AB集合并集
System.out.println(redisTemplate.opsForSet().union("set:num", "set:letter"));
//AB集合差集
System.out.println(redisTemplate.opsForSet().difference("set:num", "set:letter"));
//返回所有元素
System.out.println(redisTemplate.opsForSet().members("set:num"));
//返回多个元素
System.out.println(redisTemplate.opsForSet().randomMembers("set:num", 2));
//遍历
Cursor<String> curosr = redisTemplate.opsForSet().scan("set:num", ScanOptions.NONE);
while (curosr.hasNext()) {
System.out.println(curosr.next());
}
}
List
@Autowired
private RedisTemplate<String, String> redisTemplate;
public void list() {
//增加
String[] strArr = {"a", "b", "c"};
List<String> strList = Arrays.asList(strArr);
redisTemplate.opsForList().leftPushAll("list:str1", strList);
//只针对已存在的key增加value
redisTemplate.opsForList().leftPushIfPresent("list:str1", "z");
//返回指定范围的元素
System.out.println(redisTemplate.opsForList().range("list:str1", 0, -1));
//保留指定位置元素
redisTemplate.opsForList().trim("list:str1", 0, 2);
//查询左边第一个元素
redisTemplate.opsForList().leftPop("list:str1");
redisTemplate.opsForList().leftPop("list:str1", 2, TimeUnit.SECONDS);
//查询指定下标元素
System.out.println(redisTemplate.opsForList().index("list:str1", 1));
//替换指定下标元素
redisTemplate.opsForList().set("list:str1", 2, "0");
//从存储在键中的列表中删除等于值的元素的第一个计数事件。
//count> 0:删除等于从头到尾移动的值的元素。
//count <0:删除等于从尾到头移动的值的元素。
//count = 0:删除等于value的所有元素。
redisTemplate.opsForList().remove("list:str1", 2, "0");
}
结构类型 | 储存的值 | 读写能力 |
String | 可以是字符串、整数或者浮点数 | 对整个字符串或者字符串的其中一部分执行操作;对象和浮点数执行自增(increment)或者自减(decrement) |
List | 一个链表,链表上的每个节点都包含了一个字符串 | 从链表的两端推入或者弹出元素;根据偏移量对链表进行修剪(trim);读取单个或者多个元素;根据值来查找或者移除元素 |
Set | 包含字符串的无序收集器(unorderedcollection),并且被包含的每个字符串都是独一无二的、各不相同 | 添加、获取、移除单个元素;检查一个元素是否存在于某个集合中;计算交集、并集、差集;从集合里卖弄随机获取元素 |
Hash | 包含键值对的无序散列表 | 添加、获取、移除单个键值对;获取所有键值对 |
Zset | 字符串成员(member)与浮点数分值(score)之间的有序映射,元素的排列顺序由分值的大小决定 | 添加、获取、删除单个元素;根据分值范围(range)或者成员来获取元素 |