@SpringBootTest
class Demo1ApplicationTests {
@Autowired
private RedisTemplate redisTemplate;
@Autowired
private StringRedisTemplate stringRedisTemplate;
@Test
void contextLoads() {
redisTemplate.opsForValue().set( "key1","value1");
System.out.println( "redisTemplate存redisTemplate取:"+redisTemplate.opsForValue().get("key1"));
System.out.println( "redisTemplate存stringRedisTemplate取:"+stringRedisTemplate.opsForValue().get("key1"));
stringRedisTemplate.opsForValue().set( "key2","value2");
System.out.println( "stringRedisTemplate存redisTemplate取:"+redisTemplate.opsForValue().get("key2"));
System.out.println( "stringRedisTemplate存stringRedisTemplate取:"+stringRedisTemplate.opsForValue().get("key2"));
}
// String
@Test
public void StringDemo1(){
// 存k,v
redisTemplate.opsForValue().set("key1","value1");
// 取v
String s = (String)redisTemplate.opsForValue().get("key1");
System.out.println(s);
}
@Test
public void StringDemo2() throws Exception{
// 设定有效时长,TimeUnit.SECONDS是单位
redisTemplate.opsForValue().set("key2","value2",1, TimeUnit.SECONDS);
Thread.sleep( 1100);
System.out.println(redisTemplate.opsForValue().get( "key2"));
}
@Test
public void StringDemo3() throws Exception{
stringRedisTemplate.opsForValue().set( "key", "hello world");
// 从偏移量开始对给定key的value进行覆写,若key不存在,则前面偏移量为空
stringRedisTemplate.opsForValue().set("key", "redis", 10);
// stringRedisTemplate.opsForValue().set("key", "redis", 6);
System.out.println(stringRedisTemplate.opsForValue().get("key"));
Thread.sleep( 1100);
System.out.println(stringRedisTemplate.opsForValue().get( "key"));
}
@Test
public void StringDemo4() {
redisTemplate.opsForValue().set( "name", "test");
// 若key不存在,设值
redisTemplate.opsForValue().setIfAbsent("name", "test2");
System.out.println(redisTemplate.opsForValue().get( "name"));// 还是test
}
@Test
public void StringDemo5() {
// 批量k,v设值
Map map = new HashMap();
map.put( "k1", "v1");
map.put( "k2", "v2");
map.put( "k3", "v3");
redisTemplate.opsForValue().multiSet(map);
// 批量取值
List keys = new ArrayList();
keys.add( "k1");
keys.add( "k2");
keys.add( "k3");
List values = redisTemplate.opsForValue().multiGet(keys);
System.out.println(values);
// 批量设值,若key不存在,设值
// redisTemplate.opsForValue().multiSetIfAbsent(map);
}
@Test
public void StringDemo6() {
redisTemplate.opsForValue().set( "name", "bpf");
// 设值并返回旧值,无旧值返回null
System.out.println(redisTemplate.opsForValue().getAndSet("ttt", "calvin"));
}
@Test
public void StringDemo7() {
// 自增操作,原子性。可以对long进行double自增,但不能对double进行long自增,会抛出异常
redisTemplate.opsForValue().increment("count", 1L);// 增量为long
System.out.println(redisTemplate.opsForValue().get("count"));
redisTemplate.opsForValue().increment( "count", 1.1);// 增量为double
System.out.println(redisTemplate.opsForValue().get("count"));
}
@Test
public void StringDemo8() {
// key不存在,设值
redisTemplate.opsForValue().append("str", "hello");
System.out.println(redisTemplate.opsForValue().get( "str"));
// key存在,追加
redisTemplate.opsForValue().append("str", " world");
System.out.println(redisTemplate.opsForValue().get( "str"));
}
@Test
public void StringDemo9() {
redisTemplate.opsForValue().set( "key", "hello world");
// value的长度
System.out.println(redisTemplate.opsForValue().size("key"));// 11
}
@Test
public void StringDemo10() {
redisTemplate.opsForValue().set( "bitTest","a");
// 'a' 的ASCII码是 97 转换为二进制是:01100001
// 'b' 的ASCII码是 98 转换为二进制是:01100010
// 'c' 的ASCII码是 99 转换为二进制是:01100011
// 因为二进制只有0和1,在setbit中true为1,false为0,因此我要变为'b'的话第六位设置为1,第七位设置为0
redisTemplate.opsForValue().setBit("bitTest",6, true );
redisTemplate.opsForValue().setBit( "bitTest",7, false );
System.out.println(redisTemplate.opsForValue().get( "bitTest"));
// 判断offset处是true1还是false0
System.out.println(redisTemplate.opsForValue().getBit("bitTest",7));
}
// Hash
@Test
public void hashDemo1(){
redisTemplate.opsForHash().put( "p1","name","zhangsan");
redisTemplate.opsForHash().put( "p1","age","21");
redisTemplate.opsForHash().put( "p1","gender","true");
}
@Test
public void demo1() {
// put方法
redisTemplate.opsForHash().put("k1", "name", "zhangshan");
redisTemplate.opsForHash().put( "k1", "age", "20");
redisTemplate.opsForHash().put( "k1", "height", "170");
// hashKey不存在时,才设值
// redisTemplate.opsForHash().putIfAbsent(key, hashKey, value)
}
@Test
public void demo2() {
// putAll方法
Map data = new HashMap<>();
data.put( "name", "jack ma");
data.put( "company", "alibaba");
data.put( "age", "500");
redisTemplate.opsForHash().putAll( "k2", data);
}
@Test
public void demo3() {
// delete方法,删除key对应的hash的hashkey及其value
redisTemplate.opsForHash().delete("k2", "name");
}
@Test
public void demo4() {
// hasKey方法,确定hashkey是否存在
System.out.println(redisTemplate.opsForHash().hasKey("k2", "name"));
}
@Test
public void demo5() {
// get方法,根据key和hashkey找出对应的值
System.out.println(redisTemplate.opsForHash().get("k1", "name"));
}
@Test
public void demo6() {
// multiGet方法,根据key和多个hashkey找出对应的多个值
Collection keys = new ArrayList<>();
keys.add( "name");
keys.add( "age");
System.out.println(redisTemplate.opsForHash().multiGet( "k1", keys));
}
@Test
public void demo7() {
// increment方法,对key和hashkey对应的值进行增加操作
// 增加长整形(无法对浮点数据使用本方法)
System.out.println(redisTemplate.opsForHash().increment("k1", "age", 1));
// 增加浮点型(可以对整形数据使用本方法)
System.out.println(redisTemplate.opsForHash().increment("k1", "age", 1.0));
}
@Test
public void demo8() {
// keys方法,获取key对应的hash表的所有key
Set keys = redisTemplate.opsForHash().keys("k1");
System.out.println(keys);
// values方法,获取key对应的hash表的所有value
List values = redisTemplate.opsForHash().values("k1");
System.out.println(values);
}
@Test
public void demo9() {
// keys方法,获取key对应的hash表的大小
long size = redisTemplate.opsForHash().size("k1");
System.out.println(size);
}
@Test
public void demo10() {
// keys方法,获取key对应的hash表的所有键值对
Map entries = redisTemplate.opsForHash().entries("k1");
System.out.println(entries);
}
// set
@Test
public void setDemo1() {
// 集合中添加元素,返回添加个数
redisTemplate.opsForSet().add("games", "鬼泣", "古墓丽影", "仙剑奇侠传", "LOL", "DOTA自走棋");
System.out.println(redisTemplate.opsForSet().members( "games"));
}
@Test
public void setDemo2() {
// 从集合中删除指定元素
redisTemplate.opsForSet().remove("games", "鬼泣");
printSet( "games");
}
@Test
public void setDemo3() {
// 从集合中随机删除一个元素,并返回该元素
String item = (String)redisTemplate.opsForSet().pop("games");
System.out.println(item);
printSet( "games");
}
@Test
public void setDemo4() {
// 将集合1中的指定元素移到集合2,移动后原集合中该数据不存在了
redisTemplate.opsForSet().move("games", "仙剑奇侠传", "chinese-games");
// 打印集合1
printSet("games");
// 打印集合2
printSet("chinese-games");
}
@Test
public void setDemo5() {
// 获得集合大小
Long size = redisTemplate.opsForSet().size("games");
printSet( "games");
System.out.println(size);
}
@Test
public void setDemo6() {
// 判断集合中是否存在某元素
Boolean ifExist = redisTemplate.opsForSet().isMember("games", "LOL");
System.out.println(ifExist);
}
@Test
public void setDemo7() {
// 添加集合a
redisTemplate.opsForSet().add("set-a", "a", "b", "c", "d");
// 添加集合b
redisTemplate.opsForSet().add("set-b", "a", "b");
// 求交集
Set intersection = redisTemplate.opsForSet().intersect("set-a", "set-b");
// 也可以和多个key对应的集合求交集 Set intersect(K key, K otherKey);
System.out.println(intersection);
}
@Test
public void setDemo8() {
// 添加集合a
redisTemplate.opsForSet().add("set-a", "a", "b", "c", "d");
// 添加集合b
redisTemplate.opsForSet().add("set-b", "a", "b");
// 求交集并放入集合c
redisTemplate.opsForSet().intersectAndStore("set-a", "set-b", "set-c");
// 也可以和多个key对应的集合求交集 Long intersectAndStore(K key, Collection otherKeys, K destKey);
// 打印集合c
printSet("set-c");
}
@Test
public void setDemo9() {
// 添加集合m
redisTemplate.opsForSet().add("set-m", "a", "b", "c", "d");
// 添加集合n
redisTemplate.opsForSet().add("set-n", "c", "d", "e", "f");
// 求并集
Set union = redisTemplate.opsForSet().union("set-m", "set-n");
Set c = redisTemplate.opsForSet().union("c", union);
System.out.println(union);
System.out.println(c);
// 其他操作与intersect类似 如和多个key求并集,求并集并放入集合等
}
@Test
public void setDemo10() {
// 添加集合d
redisTemplate.opsForSet().add("set-d", "a", "b", "c", "d");
// 添加集合e
redisTemplate.opsForSet().add("set-e", "c", "d", "e", "f");
// 添加集合f
redisTemplate.opsForSet().add("set-f", "e", "f", "g", "h");
// 求差集(属于d不属于e和f)
Set difference = redisTemplate.opsForSet().difference("set-d", Arrays.asList("set-e", "set-f"));
System.out.println(difference);
// 其他操作与交集并集类似
}
@Test
public void setDemo11() {
// 随机获取集合中的一个元素
System.out.println(redisTemplate.opsForSet().randomMember("games"));
// 随机获取集合中指定个数的元素(有可能重复)
System.out.println(redisTemplate.opsForSet().randomMembers("games", 10));
// 随机获取集合中指定个数的元素(不重复)
System.out.println(redisTemplate.opsForSet().distinctRandomMembers("games", 10));
}
private void printSet(String key) {
// 获取所有成员
Set members = redisTemplate.opsForSet().members(key);
System.out.println(members);
}
}