Redis学习

打开redis服务

在redis的解压路径下找到redis-server.exe 双击即可

弹出这个窗体,不要关闭!关闭服务也关了

打开redis客户端

在redis的解压路径下找到redis-cli.exe 双击即可

基本命令

key操作命令

1、获取所有键

语法:keys pattern 127.0.0.1:6379#keys *

  1. "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 *

  1. "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());
posted @ 2023-04-12 23:00  看我雷霆半月斩  阅读(12)  评论(0编辑  收藏  举报