目录
一、redis的数据类型
redis中有五种数据类型分别是String,list,sort.sort set,hash,下面分别对如下的redis的操作提供两种方式,一种是redis客户端操作,一种是使用java调用redis来进行操作。
二、redis对key的相关操作
1、redis客户端命令行
- del key1 key2 ... Keyn
作用: 删除1个或多个键
返回值: 不存在的key忽略掉,返回真正删除的key的数量
- rename key newkey
作用: 给key赋一个新的key名
注:如果newkey已存在,则newkey的原值被覆盖
- renamenx key newkey
作用: 把key改名为newkey
返回: 发生修改返回1,未发生修改返回0
注: nx--> not exists, 即, newkey不存在时,作改名动作
- move key db
将指定的key存放到指定的数据库索引中
(注意: 一个redis进程,打开了不止一个数据库, 默认打开16个数据库,从0到15编号,
如果想打开更多数据库,可以从配置文件修改)
redis 127.0.0.1:6379[1]> select 2
OK
redis 127.0.0.1:6379[2]> keys *
(empty list or set)
redis 127.0.0.1:6379[2]> select 0
OK
redis 127.0.0.1:6379> keys *
1) "name"
2) "cc"
3) "a"
4) "b"
redis 127.0.0.1:6379> move cc 2
(integer) 1
redis 127.0.0.1:6379> select 2
OK
redis 127.0.0.1:6379[2]> keys *
1) "cc"
redis 127.0.0.1:6379[2]> get cc
"3"
- keys pattern 查询相应的key
在redis里,允许模糊查询key
有3个通配符 *, ? ,[]
*: 通配任意多个字符
?: 通配单个字符
[]: 通配括号内的某1个字符randomkey 返回随机key
redis 127.0.0.1:6379> flushdb
OK
redis 127.0.0.1:6379> keys *
(empty list or set)
redis 127.0.0.1:6379> mset one 1 two 2 three 3 four 4
OK
redis 127.0.0.1:6379> keys o*
1) "one"
redis 127.0.0.1:6379> key *o
(error) ERR unknown command 'key'
redis 127.0.0.1:6379> keys *o
1) "two"
redis 127.0.0.1:6379> keys ???
1) "one"
2) "two"
redis 127.0.0.1:6379> keys on?
1) "one"
redis 127.0.0.1:6379> set ons yes
OK
redis 127.0.0.1:6379> keys on[eaw]
"one"
- exists key
判断key是否存在,返回1/0
- type key
返回key存储的值的类型
有string,link,set,order set, hash
2、java代码调用
/**
* redis有关key的操作
* RedisTemplate主要支持String,List,Hash,Set,ZSet这几种方式的参数,
* 其对应的方法分别是opsForValue()、opsForList()、opsForHash()、opsForSet()、opsForZSet()。
* 下面分别介绍这几个方法的使用。
*/
@Test
public void testRedisKey(){
//获取操作字符串的操作对象
ValueOperations<String,String> stringOperations = redisTemplate.opsForValue();
Map<String,String> person = new HashMap<>(5);
person.put("name","谢奇秀");
person.put("age","23");
person.put("birthday","1994-10-21");
person.put("sex","男");
stringOperations.multiSet(person);
//keys [pattern] 通过通配符获取到匹配的key * 匹配所有字符
// ?匹配单个字符 [char/chaB/char] 匹配括号中的某个字符
Set<String> keys = redisTemplate.keys("*");
log.info("redis中*匹配的所有keys;{}", JsonUtil.gsonString(keys));
keys = redisTemplate.keys("??me");
log.info("redis中的所有keys;{}", JsonUtil.gsonString(keys));
keys = redisTemplate.keys("birthda[xy]");
log.info("redis中的所有keys;{}", JsonUtil.gsonString(keys));
//删除key del key1 [key2 ...]
redisTemplate.delete("name");
List<String> delkeys = new ArrayList<>();
delkeys.add("age");
delkeys.add("sex");
redisTemplate.delete(delkeys);
keys = redisTemplate.keys("*");
log.info("redis中*匹配的所有keys;{}", JsonUtil.gsonString(keys));
//rename oldkey newkey 给key赋予一个新的name 如果新的key存在则原来的key值被覆盖
redisTemplate.rename("name","alias");
//作用: 把key改名为newkey
//返回: 发生修改返回true(说明newkey不存在),不发生修改返回false(说明newkey已经存在)
boolean falg = redisTemplate.renameIfAbsent("name","alias");
if(falg){
log.info("修改成功");
}else{
log.info("修改失败");
}
//move key db 将对应的key存放在 一台redis的服务中默认包含16个库 该行操作将key(默认在0)移动到库索引为2中
//移动没有发生错误 为false 移动发生错误返回true
falg = redisTemplate.move("alias",1);
if(falg){
log.info("没有移动");
}else{
log.info("已经移动");
}
Set<String> keys = redisTemplate.keys("*");
log.info("redis中*匹配的所有keys;{}", JsonUtil.gsonString(keys));
// 获取一个随机的key
String randomKey = (String)redisTemplate.randomKey();
log.info("随机下获取的key:{}",randomKey);
boolean has = redisTemplate.hasKey("name");
if(has){
log.info("存在");
}else{
log.info("不存在");
}
//获取redis中对应的key的类型
DataType type = redisTemplate.type("name");
log.info("redis中对应key的类型为:{}",type.name());
//设置key的生命周期
redisTemplate.expire("age",1000, TimeUnit.MICROSECONDS);
//查询key的生命周期
Long expireTime = redisTemplate.getExpire("age");
log.info("生命周期 -1 表示为持久化 -2表示key不存在 其他的正数为时间单位秒:{}",expireTime);
//将对应的key持久化
boolean isExpirst = redisTemplate.persist("age");
}
三、Redis字符串类型的操作
1、redis客户端命令行
- set key value [ex 秒数] / [px 毫秒数] [nx] /[xx]
如: set a 1 ex 10 , 10秒有效
Set a 1 px 9000 , 9秒有效
注: 如果ex,px同时写,以后面的有效期为准
如 set a 1 ex 100 px 9000, 实际有效期是9000毫秒
nx: 表示key不存在时,执行操作
xx: 表示key存在时,执行操作
- mset multi set