Redis学习
在redis的解压路径下找到redis-server.exe 双击即可
弹出这个窗体,不要关闭!关闭服务也关了
打开redis客户端
在redis的解压路径下找到redis-cli.exe 双击即可
基本命令
key操作命令
1、获取所有键
语法:keys pattern 127.0.0.1:6379#keys *
-
"age" 查找匹配给定模式pattern的所有key。 KEYS * 匹配数据库中所有 key 。 KEYS h?llo 匹配 hello , hallo 和 hxllo 等。 KEYS h*llo 匹配 hllo 和 heeeeello 等。 KEYS h[ae]llo 匹配 hello 和 hallo ,但不匹配 hillo 。 特殊符号用 \ 隔开
2、获取键总数
语法:dbsize 127.0.0.1:6379#dbsize (integer) 6 获取键总数时不会遍历所有的键,直接获取内部变量,时间复杂度O(1)。
3、查询键是否存在
语法:exists key [key ...] 127.0.0.1:6379#exists age java (integer) 2 查询多个,返回存在的个数。
4、删除键
语法:del key [key ...] 127.0.0.1:6379#del java age (integer) 1 可以删除多个,返回删除成功的个数。
5、查询键类型
语法:type key 127.0.0.1:6379#type age string
6、移动键
语法:move key db 如把age移到2号数据库。 127.0.0.1:6379#move age 2 (integer) 1 127.0.0.1:6379#select 2 OK 语法:SELECT index 切换数据库(redis默认16个数据库 编号从0开始) 127.0.0.1:6379[2]#keys *
-
"age"
7、查询key的生命周期(秒)
秒语法:ttl key 毫秒语法:pttl key 127.0.0.1:6379[2]#ttl age (integer) -1 -1:永远不过期。
8、设置过期时间
秒语法:expire key seconds 毫秒语法:pexpire key milliseconds 127.0.0.1:6379[2]#expire age 60 (integer) 1 127.0.0.1:6379[2]#ttl age (integer) 55 设置永不过期 语法:persist key 127.0.0.1:6379[2]#persist age (integer) 1
9、更改键名称
语法:rename key newkey 127.0.0.1:6379[2]#rename age age123 OK
10、清屏
语法:clear
实例
127.0.0.1:6379> set testKey apple
OK
127.0.0.1:6379> get testKey
"apple"
127.0.0.1:6379> keys
(error) ERR wrong number of arguments for 'keys' command
127.0.0.1:6379> keys pattern
(empty list or set)
127.0.0.1:6379> keys *
1) "testKey"
2) "user:6492475e-5caf-455b-b4b6-f85739723050"
3) "online"
127.0.0.1:6379> dbsize
(integer) 3
127.0.0.1:6379> exists testKey
(integer) 1
127.0.0.1:6379> exists ss
(integer) 0
127.0.0.1:6379> type testKey
string
127.0.0.1:6379> ttl testKey
(integer) -1
127.0.0.1:6379> expire testKey 10
(integer) 1
127.0.0.1:6379> ttl testKey
(integer) 6
127.0.0.1:6379> ttl testKey
(integer) -2
127.0.0.1:6379> get testKey
(nil)
127.0.0.1:6379> set TestKey banana
OK
127.0.0.1:6379> ttl TestKey
(integer) -1
127.0.0.1:6379> persist TestKey
(integer) 0
127.0.0.1:6379> ttl TestKey
(integer) -1
127.0.0.1:6379> rename TestKey TK
OK
127.0.0.1:6379> get TK
"banana"
127.0.0.1:6379>
参考
https://blog.csdn.net/jsugs/article/details/124021447
知识点
五种数据类型
-
String(字符串,整数,浮点数):做简单的键值对缓存
-
List(列表):储存一些列表类型的数据结构
-
Set(无序集合):交集,并集,差集的操作
-
Zset(有序集合)(Sorted sets):去重同时也可以排序
-
Hash(包含键值对的无序散列表):结构化的数据
SpringBoot应用
config文件夹下添加配置类
@Configuration
public class MyRedisConfig {
@Resource
private RedisConnectionFactory redisConnectionFactory;
@Bean
public RedisTemplate redisTemplate(){
RedisTemplate<String ,Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory);
//对Redis的key序列化处理
redisTemplate.setKeySerializer(new StringRedisSerializer());
//对Redis的Value序列化处理
//用到Redis针对String的方法
//要把对象存到String类型 还要先把对象转化成json
Jackson2JsonRedisSerializer serializer = new Jackson2JsonRedisSerializer<Object>(Object.class);
redisTemplate.setValueSerializer(serializer);
//把redis的value反序列化
//针对Object对象 可能还包含各种类型如集合 日期等特殊情况这里集中声明
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
om.setTimeZone(TimeZone.getDefault());
om.configure(MapperFeature.USE_ANNOTATIONS, false);
om.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
om.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
om.activateDefaultTyping(LaissezFaireSubTypeValidator.instance ,ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY);
om.setSerializationInclusion(JsonInclude.Include.NON_NULL);
serializer.setObjectMapper(om);
return redisTemplate;
}
}
确保redis服务打开
@Autowired
private RedisTemplate redisTemplate;
// 把数据放在redis 参数分别表示 key value 有效时长 有效时长的单位; 这里是要有效时长30min
redisTemplate.opsForValue().set(key, loginUser, 30, TimeUnit.MINUTES);
//在线人数统计
List<Integer> list = new ArrayList<>();
if (redisTemplate.opsForValue().setIfAbsent("online", list)) {
System.out.println("新建了online");
}
Object obj = redisTemplate.opsForValue().get("online");
List<Integer> list1 = JSON.parseObject(JSON.toJSONString(obj), List.class);
list1.add(loginUser.getId());
method_1(list1);//去重
System.out.println("uid:"+loginUser.getId());
System.out.println("list1:"+list1);
redisTemplate.opsForValue().set("online", list1);
System.out.println(redisTemplate.opsForValue().get("online").toString());