首页 > 数据库 >Redis学习

Redis学习

时间:2023-04-12 23:13:17浏览次数:46  
标签:127.0 0.1 Redis 学习 6379 key integer redisTemplate

打开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());

标签:127.0,0.1,Redis,学习,6379,key,integer,redisTemplate
From: https://www.cnblogs.com/zjc123/p/17311728.html

相关文章

  • 四月学习之LVS基本概述
    一、LVS基本概述1、什么是LVSLVS的英文全称是linuxvirtualserver,即linux虚拟服务器,其实它是一种cluster集群技术,主要用于负载均衡,将用户请求均匀的调度到不同的服务器上执行注意:LVS是基于四层IP:PROT的负载均衡2、为何需要LVS1、解决七层端口数不够问题,实现百万连接2、解......
  • 今日总结-python连接数据库的学习
          ......
  • 18.四数之和——学习笔记
    题目:给你一个由n个整数组成的数组nums,和一个目标值target。请你找出并返回满足下述全部条件且不重复的四元组[nums[a],nums[b],nums[c],nums[d]](若两个四元组元素一一对应,则认为两个四元组重复):0<=a,b,c,d<na、b、c和d互不相同nums[a]+nums[b]+nums[c......
  • 15.三数之和——学习笔记
    题目:给你一个整数数组nums,判断是否存在三元组[nums[i],nums[j],nums[k]]满足i!=j、i!=k且j!=k,同时还满足nums[i]+nums[j]+nums[k]==0。请你返回所有和为0且不重复的三元组。注意:答案中不可以包含重复的三元组。示例1:输入:nums=[-1,0,1,2,-1,-4]输......
  • 哈希表理论基础——学习笔记
    常见的三种哈希结构数组set(集合)map(映射)HashSet特点:HashSet无序(没有下标),不可重复HashSet为HashMap的key部分TreeSetTreeSet无序(没下标),不可重复,但是可以排序TreeSet为TreeMap的key部分mapMap和Collection没有继承关系Map以(k......
  • 383.赎金信——学习笔记
    题目:给你两个字符串:ransomNote和magazine,判断ransomNote能不能由magazine里面的字符构成。如果可以,返回true;否则返回false。magazine中的每个字符只能在ransomNote中使用一次。示例1:输入:ransomNote="a",magazine="b"输出:false示例2:输入:ransomNote="a......
  • 242.有效的字母异位词——学习笔记
    题目:给定两个字符串s和t,编写一个函数来判断t是否是s的字母异位词。注意:若s和t中每个字符出现的次数都相同,则称s和t互为字母异位词。示例1:输入:s="anagram",t="nagaram"输出:true示例2:输入:s="rat",t="car"输出:false提示:1<=s.length,......
  • java学习日记20230411-Vector
    VectorVector底层也是一个对象数组;Vector是线程同步的,即线程安全,Vector类的操作方法带有synchronized在开发中需要线程同步安全的,考虑使用VectorpublicclassVector01{//Vector线程安全publicstaticvoidmain(String[]args){Vector<Object>objects......
  • java学习日记20230411-ArrayList
    ArraylList注意事项ArrayList可以加入null,并且多个;ArrayList是由数组来实现数据存储的ArrayList基本等同于Vector,处理ArrayList是线程不安全(执行效率高),在多线程情况下,不建议使用ArrayLIst  ArrayList示例publicclassArrayList01{publicstaticvoidmain(Stri......
  • 如何在2023年学习React
    在2023年学习React并不是一件容易的事情。自2019年ReactHooks发布以来,我们已经拥有了很多稳定性,但现在形势正在再次变化。而这次变化可能比使用ReactHooks时更加不稳定。在本文中,我想比较两种学习React的方式:以库的方式和以框架的方式。为了让事情更加清晰:React发布了新的文档,......