• redis(基础 && redis缓存)


    一,redis基础

    目录

    • 1. 数据类型
      • 1.1 字符串
      • 1.2 hash
      • 1.3 List
      • 1.4 Set
      • 1.5 sorted set
    • 2. jedis操作redis
    • 3. 与spring集成

    1. 数据类型


    1.1 字符串


    String是最常用的数据格式,普通的kay-value都归结为此类, value值不仅可以是string,可以是数字。
    使用场景:通过用户的访问次数为依据封锁ip,可以将用户的访问次数已string类型记录在redis中,并通过
    INCRBY操作,每次访问进行递增(原子性操作 像一些活动秒杀 ,抢红包  应用分布式系统)。
    常用命令:
    get, set, incr, decr, mget

    示例:

    1. # set
    2. set name zhangsan
    3. # get
    4. get name
    5. #查看redis所有key
    6. keys *
    7. #查看redis中以name开发的key
    8. keys name*
    9. #设置一个数字
    10. set num 1
    11. #自增
    12. incr num
    13. #递减
    14. decr num

    1.2 hash


    使用场景:(保存对象,像一些档案信息可以放入hash) 例如用户包含id,name,addr等属性,当需要使用redis存放用户信息时,可以使用hash。(和java中的Map很像)
    常用命令: hget,hset,hgetall等

    示例:

    1. # 以user:001为键,hash中有两个属性name为zs,age为19
    2. hset user:001 name zs age 19
    3. #获取以user:001为键,属性age的值
    4. hget user:001 age
    5. # 获取键为user:001的所用属性值
    6. hgetall user:001

    1.3 List


    应用场景:最新消息排行; 消息队列。利用Lists的push(推入)的操作,将任务存储在list中,然后工作线程再用pop(弹出)操作将任务取出进行执行。

    常用命令:
    lpush,rpush,lpop,rpop,lrange(范围),BLPOP(阻塞版)等

    示例:

    1. # 向队列中push数据
    2. lpush bills zs li wu zl
    3. #从队列中弹出数据,弹出后队列中的数据不保存
    4. lpop bills
    5. #队列的长度
    6. llen bills

    1.4 Set


    常用场景: set与list比较类似,特殊之处是set可以自动去重,同时set还提供了某个成员是否存在于一个set内的接口,这个在list也没有。
    常用命令:
    sadd,srem,spop,sdiff ,smembers,sunion 等

    示例:

    1. # 向集合aa中加入1 2 3 4 5
    2. sadd aa 1 2 3 4 5
    3. # 向集合bb中加入4 5 6 7 8
    4. sadd bb 4 5 6 7 8
    5. # 返回集合aa中的所有元素
    6. smembers aa
    7. # 判断集合aa中是否存在元素1 ,存在返回1,不存在返回0
    8. sismember aa 1
    9. #返回aa集合中存在但bb中不存在的元素,返回 1 2 3 (差集)
    10. sdiff aa bb
    11. #求aa和bb集合的差集,并将结果保存到cc中去
    12. sdiffstore cc aa bb
    13. #求aa和bb的交集
    14. sinter aa bb
    15. #求aa和bb的交集,并将其存放到dd集合中去
    16. sinterstore dd aa bb
    17. #求aa和bb的并集
    18. sunion aa bb
    19. #求aa和bb的并集,将将其结果存放如ee集合
    20. sunionstore ee aa bb
    21. # 从ee集合中弹出3个元素(随机),默认弹出1个元素
    22. spop ee 3

    1.5 sorted set(有序集合)


    使用场景:zset的使用场景与set类似,区别是set不是有序的,而zset可以通过用户额外提供的一个优先级(score即分值)参数来为成员 (进行排名)排序,插入后自动排序。例如:将所有评论按发表时间为score存储,可以方便获取最新发表的评论;全班同学成绩的SortedSets,value可以是同学的学号,而score就可以是其考试得分,这样数据插入集合的,就已经进行了天然的排序。
    另外还可以用Sorted Sets来做带权重的队列,比如普通消息的score为1,重要消息的score为2,然后工作线程可以选择按score的倒序来获取工作任务。让重要的任务优先执行。

    常用命令:
    zadd,zrange 取出 (可根据范围取出),zrem删除,zcard获取数量,zcount等

    示例:

    1. #将zs, ww, ls加入有序集合,其中zs 分值为1, ww 分值为2, ls分值为3
    2. zadd zaa 1 zs 2 ww 3 ls
    3. #获取zaa集合中score值从12范围内的元素
    4. zrangebyscore zaa 1 2
    5. #获取有序集合的成员数
    6. zcard zaa
    7. #计算在有序集合中指定区间分数的成员数
    8. zcount zaa 1 2
    1. #判断key在redis中是否存在。
    2. exists key

    2. jedis操作redis


    1)创建一个maven工程
    File ->New -> maven project -> create a simple project,输入maven坐标。

    2) 在pom.xml文件中加jedis依赖

    1.       <dependencies>
    2.             <dependency>
    3.                   <groupId>redis.clients</groupId>
    4.                   <artifactId>jedis</artifactId>
    5.                   <version>2.9.0</version>
    6.             </dependency>
    7.       </dependencies>

    3)在pom.xml中指定jdk版本

    1. <build>
    2. <finalName>填写自己的项目名称</finalName>
    3. <plugins>
    4. <!--第一步就是配置maven-compiler-plugin插件 -->
    5. <plugin>
    6. <groupId>org.apache.maven.plugins</groupId>
    7. <artifactId>maven-compiler-plugin</artifactId>
    8. <version>3.7.0</version>
    9. <configuration>
    10. <source>1.8</source>
    11. <target>1.8</target>
    12. <encoding>UTF-8</encoding>
    13. </configuration>
    14. </plugin>
    15. </plugins>
    16. </build>

    3)示例代码

    1. //创建Jedis实例,连接redis
    2. Jedis jedis = new Jedis("192.168.62.133",6379);
    3. //ping,如果成功返回 pong
    4. String rv = jedis.ping();
    5. System.out.println(rv);
    6. //string
    7. jedis.set("name", "zs");
    8. //hash
    9. jedis.hset("user", "name", "张三");
    10. jedis.hset("user", "age", "20");
    11. jedis.hset("user", "tele", "12344344343");
    12. jedis.hset("user", "addr", "长沙");
    13. Map<String,String> user = new HashMap<>();
    14. user.put("name", "李四");
    15. user.put("age", "23");
    16. user.put("tele", "23897989");
    17. user.put("addr", "成都");
    18. jedis.hmset("user02", user);
    19. //list
    20. jedis.lpush("list", "a");
    21. jedis.lpush("list", "b");
    22. jedis.lpush("list", "c");
    23. jedis.lpush("list", "d");
    24. System.out.println(jedis.rpop("list"));
    25. System.out.println(jedis.rpop("list"));
    26. System.out.println(jedis.rpop("list"));
    27. System.out.println(jedis.rpop("list"));
    28. //set
    29. jedis.sadd("set", "aa","bb","cc");
    30. System.out.println(jedis.spop("set"));
    31. System.out.println(jedis.spop("set"));
    32. System.out.println(jedis.spop("set"));
    33. //sortset
    34. Map<String,Double> zz = new HashMap<>();
    35. zz.put("zz", 0.1D);
    36. jedis.zadd("zset", zz);
    37. Map<String,Double> ff = new HashMap<>();
    38. ff.put("ff", 0.2D);
    39. jedi
  • 相关阅读:
    Deep Learning-深度学习(二)
    认识WebSocket 以及怎么使用WebSocket
    iptables防火墙
    关于前端的文件下载问题,通过超链接a无法自定义文件名
    Element U I的 el-date-picker做时间限制
    数据库中cast的用法
    Intellij IDEA 调试功
    【SpringBoot】搭建第一个SpringBoot项目 - group、artifact等项目元数据详解
    清华操作系统笔记4——虚拟内存技术
    年底了,接个大活儿,做一个回顾公司五年发展的总结ppt,要求做成H5网页
  • 原文地址:https://blog.csdn.net/m0_64863860/article/details/127786793