• redis基础


    目录

    1. Redis简介

    2.数据类型

    1.2 hash

    1.3 List

    1.4 Set

    1.5 sorted set

    2. jedis操作redis

    3. 与spring集成


    1. Redis简介

    Redis 是完全开源免费的,遵守BSD协议,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。

    特点: 支持数据的持久化,可以将内存中的数据保存到硬盘,在重启后再次加载使用。 支持的数据结构丰富,String,list,set, zset, hash等等。 支持数据备份,master-slave模式进行数据备份。

    优势: 性能高,Redis能读的速度是110000次/s,写的速度是81000次/s。 数据类型丰富 原子性,redis中所有操作都是原子的,并且多个操作也支持原子性 丰富的特性,如通知,key过期等。

    2.数据类型

    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

    使用场景: 例如用户包含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. 示例:
    2. # 向集合aa中加入1 2 3 4 5
    3. sadd aa 1 2 3 4 5
    4. # 向集合bb中加入4 5 6 7 8
    5. sadd bb 4 5 6 7 8
    6. # 返回集合aa中的所有元素
    7. smembers aa
    8. # 判断集合aa中是否存在元素1 ,存在返回1,不存在返回0
    9. sismember aa 1
    10. #返回aa集合中存在但bb中不存在的元素,返回 1 2 3 (差集)
    11. sdiff aa bb
    12. #求aa和bb集合的差集,并将结果保存到cc中去
    13. sdiffstore cc aa bb
    14. #求aa和bb的交集
    15. sinter aa bb
    16. #求aa和bb的交集,并将其存放到dd集合中去
    17. sinterstore dd aa bb
    18. #求aa和bb的并集
    19. sunion aa bb
    20. #求aa和bb的并集,将将其结果存放如ee集合
    21. sunionstore ee aa bb
    22. # 从ee集合中弹出3个元素(随机),默认弹出1个元素
    23. 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
    9. #判断key在redis中是否存在。
    10. 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. jedis.zadd("zset", ff);
    40. Map<String,Double> qq = new HashMap<>();
    41. qq.put("qq", 0.3D);
    42. jedis.zadd("zset", qq);
    43. System.out.println(jedis.zrangeByScore("zset", 0.1, 0.2));
    44. //命令返回有序集中,指定区间内的成员, 其中成员的位置按分数值递减(从大到小)来排列
    45. System.out.println(jedis.zrevrange("zset", 0, -1));

    3. 与spring集成

    1) 在pom.xml文件中导入依赖的包

    1. <properties>
    2.  
    3.   <redis.version>2.9.0redis.version>
    4.   <spring.redis.version>2.0.10.RELEASEspring.redis.version>
    5.   <spring.version>5.0.1.RELEASEspring.version>
    6. properties>
    7. <dependencies>
    8.   <dependency>
    9.         <groupId>redis.clientsgroupId>
    10.         <artifactId>jedisartifactId>
    11.         <version>${redis.version}version>
    12.   dependency>
    13.  
    14.   <dependency>
    15.         <groupId>org.springframeworkgroupId>
    16.         <artifactId>spring-contextartifactId>
    17.         <version>${spring.version}version>
    18.   dependency>
    19.   <dependency>
    20.         <groupId>org.springframeworkgroupId>
    21.         <artifactId>spring-ormartifactId>
    22.         <version>${spring.version}version>
    23.   dependency>
    24.   <dependency>
    25.         <groupId>org.springframeworkgroupId>
    26.         <artifactId>spring-webartifactId>
    27.         <version>${spring.version}version>
    28.   dependency>
    29.  
    30.   <dependency>
    31.         <groupId>org.springframeworkgroupId>
    32.         <artifactId>spring-aopartifactId>
    33.         <version>${spring.version}version>
    34.   dependency>
    35.   <dependency>
    36.         <groupId>org.springframeworkgroupId>
    37.         <artifactId>spring-testartifactId>
    38.         <version>${spring.version}version>
    39.   dependency>
    40.   <dependency>
    41.         <groupId>org.springframeworkgroupId>
    42.         <artifactId>spring-aspectsartifactId>
    43.         <version>${spring.version}version>
    44.   dependency>
    45.   <dependency>
    46.         <groupId>org.aspectjgroupId>
    47.         <artifactId>aspectjrtartifactId>
    48.         <version>1.6.11version>
    49.   dependency>
    50.    
    51.   <dependency>
    52.         <groupId>org.aspectjgroupId>
    53.         <artifactId>aspectjweaverartifactId>
    54.         <version>1.6.11version>
    55.   dependency>
    56.   <dependency>
    57.         <groupId>cglibgroupId>
    58.         <artifactId>cglibartifactId>
    59.         <version>2.1_3version>
    60.   dependency>
    61.  
    62.   <dependency>
    63.         <groupId>org.springframework.datagroupId>
    64.         <artifactId>spring-data-redisartifactId>
    65.         <version>1.7.2.RELEASEversion>
    66.   dependency>
    67.  
    68.    
    69.  
    70.   <dependency>
    71.         <groupId>com.fasterxml.jackson.coregroupId>
    72.         <artifactId>jackson-coreartifactId>
    73.         <version>2.1.0version>
    74.   dependency>
    75.   <dependency>
    76.         <groupId>com.fasterxml.jackson.coregroupId>
    77.         <artifactId>jackson-databindartifactId>
    78.         <version>2.1.0version>
    79.   dependency>
    80.   <dependency>
    81.         <groupId>com.fasterxml.jackson.coregroupId>
    82.         <artifactId>jackson-annotationsartifactId>
    83.         <version>2.1.0version>
    84.   dependency>
    85.  
    86.   <dependency>
    87.         <groupId>junitgroupId>
    88.         <artifactId>junitartifactId>
    89.         <version>4.12version>
    90.         <scope>testscope>
    91.   dependency>
    92. dependencies>

    2)spring-redis.xml

    1. "1.0" encoding="UTF-8"?>
    2. <beans xmlns="http://www.springframework.org/schema/beans"
    3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4. xmlns:aop="http://www.springframework.org/schema/aop"
    5.     xmlns:context="http://www.springframework.org/schema/context"
    6. xmlns:tx="http://www.springframework.org/schema/tx"
    7.     xsi:schemaLocation="http://www.springframework.org/schema/beans
    8.                                   http://www.springframework.org/schema/beans/spring-beans.xsd
    9.                         http://www.springframework.org/schema/aop
    10.                                   http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
    11.                         http://www.springframework.org/schema/context
    12.                                   http://www.springframework.org/schema/context/spring-context-4.3.xsd
    13.                         http://www.springframework.org/schema/tx
    14.                                   http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">          
    15.     <context:component-scan base-package="com.zking"/>
    16.  
    17.   <context:property-placeholder location="classpath:redis.properties" ignore-unresolvable="true" />
    18.  
    19.    
    20.   <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
    21.       <property name="maxTotal" value="${redis.maxActive}" />
    22.       <property name="maxIdle" value="${redis.maxIdle}" />
    23.       <property name="testOnBorrow" value="${redis.testOnBorrow}" />
    24.   bean>
    25.  
    26.   <bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">    
    27.       <property name="hostName" value="${redis.host}">property>
    28.       <property name="port" value="${redis.port}">property>
    29.      
    30.       <property name="poolConfig" ref="poolConfig">property>
    31.   bean>
    32.    
    33.   <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate" >
    34.       <property name="connectionFactory" ref="jedisConnectionFactory"/>  
    35.          
    36.       <property name="keySerializer" >    
    37.           <bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />  
    38.       property>    
    39.       <property name="valueSerializer" >    
    40.           <bean class="org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer"/>
    41.       property>    
    42.       <property name="hashKeySerializer">    
    43.           <bean class="org.springframework.data.redis.serializer.StringRedisSerializer"/>
    44.       property>    
    45.       <property name="hashValueSerializer">    
    46.           <bean class="org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer"/>  
    47.       property>    
    48.        
    49.       <property name="enableTransactionSupport" value="true">
    50.       property>  
    51.  
    52. beans>

    3) 测试类

    1. @RunWith(SpringJUnit4ClassRunner.class)
    2. @ContextConfiguration("classpath*:spring*.xml")
    3. @SuppressWarnings("all")
    4. public class TestRedis {
    5.     @Autowired
    6.     private RedisTemplate redisTemplate;
    7.      
    8.     @Test
    9.     public void testRedis() {
    10.           redisTemplate.opsForHash().put("myhash", "name", "xiaoxiao");
    11.           redisTemplate.opsForHash().put("myhash", "age", "12");
    12.           redisTemplate.opsForHash().put("myhash", "addr", "changsha");
    13.      
    14.           Map entries = redisTemplate.opsForHash().entries("myhash");
    15.           for(Map.Entry e: entries.entrySet()) {
    16.                 System.out.println(e.getKey());
    17.                 System.out.println(e.getValue());
    18.           }
    19.     }
    20. }

    测试类通过则说明集成完成(请确定redis可正常访问)

  • 相关阅读:
    Docker部署私有仓库Harbor
    Pytorch从零开始实战08
    angular框架怎么从0到1进行开发
    Nginx的核心配置文件详解
    计组--计算机系统概述
    PC小程序解密及反编译
    Windows11下载安装vscode并编写第一个页面
    shell小练习2
    【如何学习CAN总线测试】——OSEK网络管理测试
    教你实现物联网HMI/网关的趋势功能
  • 原文地址:https://blog.csdn.net/qq_62898618/article/details/127832546