redis数据类型

目录

1. 数据类型

1.1 字符串

1.2 hash

1.3 List

1.4 set

1.5 sorted set

2. jedis操作redis

3. 与spring集成


今天与大家分享redis的6大基本数据类型,还有spirng与redis集成 希望大家帮忙点点浏览量  点量 是小编坚持的动力

1. 数据类型

1.1 字符串

String是最常用的数据格式,普通的kay-value都归结为此类, value值不仅可以是string,可以是数字。
使用场景:通过用户的访问次数为依据封锁ip,可以将用户的访问次数已string类型记录在redis中,并通过
INCRBY操作,每次访问进行递增。
常用命令:
get, set, incr, decr, mget

示例:

# set
set name  zhangsan

# get
get name

#查看redis所有key
keys *

#查看redis中以name开发的key
keys name*

#设置一个数字
set num 1

#自增
incr num

#递减
decr num

1.2 hash

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

示例:

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

1.3 List

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

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

示例:

# 向队列中push数据
lpush bills zs li wu zl

#从队列中弹出数据,弹出后队列中的数据不保存
lpop bills

#队列的长度
llen bills

1.4 set

 

 示例:

# 向集合aa中加入1 2 3 4 5
sadd aa 1 2 3 4 5

# 向集合bb中加入4 5 6 7 8
sadd bb 4 5 6 7 8

# 返回集合aa中的所有元素
smembers aa

# 判断集合aa中是否存在元素1  ,存在返回1,不存在返回0
sismember aa 1

#返回aa集合中存在但bb中不存在的元素,返回 1 2 3 (差集)
sdiff aa bb

#求aa和bb集合的差集,并将结果保存到cc中去
sdiffstore cc aa bb

#求aa和bb的交集
sinter aa bb

#求aa和bb的交集,并将其存放到dd集合中去
sinterstore dd aa bb

#求aa和bb的并集
sunion aa bb

#求aa和bb的并集,将将其结果存放如ee集合
sunionstore ee aa bb

# 从ee集合中弹出3个元素(随机),默认弹出1个元素
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等

示例:

#将zs, ww, ls加入有序集合,其中zs 分值为1, ww 分值为2, ls分值为3
zadd zaa 1 zs 2 ww 3 ls

#获取zaa集合中score值从1到2范围内的元素
zrangebyscore zaa 1 2

#获取有序集合的成员数
zcard zaa

#计算在有序集合中指定区间分数的成员数
zcount zaa 1 2
#判断key在redis中是否存在。
exists key

 

2. jedis操作redis

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

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

      <dependencies>
            <dependency>
                  <groupId>redis.clients</groupId>
                  <artifactId>jedis</artifactId>
                  <version>2.9.0</version>
            </dependency>
      </dependencies>

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

<build>
    <finalName>填写自己的项目名称</finalName>
    <plugins>
          <!--第一步就是配置maven-compiler-plugin插件 -->
          <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.7.0</version>
                <configuration>
                      <source>1.8</source>
                      <target>1.8</target>
                      <encoding>UTF-8</encoding>
                </configuration>
          </plugin>
    </plugins>
</build>

 3)示例代码

package com.zking.redisdemo;

import org.junit.Before;
import org.junit.Test;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.params.sortedset.ZAddParams;

import java.util.HashMap;
import java.util.Map;

/**
 * @author L
 * @site www.xiaomage.com
 * @company xxx公司
 * @create  2022-08-23 15:43
 */
public class Demo {

    private Jedis jedis;

    @Before
    public void setup() {
        jedis = new Jedis("192.168.234.128", 6379);
    }

    @Test
    public void testConnect() {
        String echo = jedis.ping();
        System.out.println(echo);
    }

    /**
     * String
     */
    @Test
    public void testStringOption() {

        jedis.set("name", "张三");
        String name = jedis.get("name");
        System.out.println(name);
    }

    /**
     * Hash
     */
    @Test
    public void tesHashOption() {
        Map<String, String> user = new HashMap<>();
        user.put("name", "aQ");
        user.put("age", "18");
        user.put("addr", "江苏徐州");
        user.put("telephone", "13975106246");

        jedis.hmset("user:001", user);

        String name = jedis.hget("user:001", "name");
        System.out.println(name);

        Map<String, String> usm = jedis.hgetAll("user:001");
        System.out.println(usm);
    }

    /**
     * Set
     */
    @Test
    public void testSetOption() {
        jedis.sadd("set", "zs", "ls", "ww", "zl");
        jedis.sadd("set", "李佳乐");
    }

    /**
     * ZSet
     */
    @Test
    public void testZSetOption() {

        jedis.zadd("zset", 0.3D, "zs");
        jedis.zadd("zset", 0.4D, "ls");
        jedis.zadd("zset", 0.5D, "ww");
        jedis.zadd("zset", 0.6D, "zl");
        jedis.zadd("zset", 0.7D, "tq");

        // 获取分值在0.3至0.5之间的值
        System.out.println(jedis.zrangeByScore("zset", 0.3D, 0.5D));

        // 获取下标从0到1的元素,正序
        System.out.println(jedis.zrange("zset", 0, 1));

        // 获取下标从0到1的元素,倒序。
        System.out.println(jedis.zrevrange("zset", 0, 1));


        Map<String,Double> zz = new HashMap<>();
        zz.put("xx", 0.1D);
        zz.put("yy", 0.2D);
        zz.put("zz", 0.3D);

        jedis.zadd("zset02", zz);

        System.out.println(jedis.zrange("zset02", 0, -1));

    }

}

运行结果 

String类型

 set类型

Hash类型 

 zset类型

 

3. 与spring集成

1)导入pom文件

 <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>

        <!--jedis操作redis-->
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>2.9.0</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
            <scope>compile</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.3.18</version>
        </dependency>

        <!--事务管理功能-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>5.3.18</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.3.18</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>5.3.18</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>5.3.18</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aspects</artifactId>
            <version>5.3.18</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-redis</artifactId>
            <version>1.7.2.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.1.0</version>
        </dependency>

        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.1.0</version>
        </dependency>

        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.6</version>
        </dependency>

        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>2.0.6</version>
        </dependency>

        <!-- 连接池 -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-dbcp2</artifactId>
            <version>2.1.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-pool2</artifactId>
            <version>2.4.3</version>
        </dependency>

        <dependency>
            <groupId>com.belerweb</groupId>
            <artifactId>pinyin4j</artifactId>
            <version>2.5.0</version>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.22</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper</artifactId>
            <version>5.1.2</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.44</version>
        </dependency>

        <!--日志 -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.36</version>
        </dependency>

        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.2.10</version>
        </dependency>

2)spring-redis.xml

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:aop="http://www.springframework.org/schema/aop"

      xmlns:context="http://www.springframework.org/schema/context" 
xmlns:tx="http://www.springframework.org/schema/tx"

      xsi:schemaLocation="http://www.springframework.org/schema/beans 
                                    http://www.springframework.org/schema/beans/spring-beans.xsd
                          http://www.springframework.org/schema/aop 
                                    http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
                          http://www.springframework.org/schema/context 
                                    http://www.springframework.org/schema/context/spring-context-4.3.xsd
                          http://www.springframework.org/schema/tx 
                                    http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">          

      <context:component-scan base-package="com.zking"/>

    <!-- 连接池基本参数配置,类似数据库连接池 -->
    <context:property-placeholder location="classpath:redis.properties" ignore-unresolvable="true" />
   

    <!--redis连接池 -->  
    <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
        <property name="maxTotal" value="${redis.maxActive}" />
        <property name="maxIdle" value="${redis.maxIdle}" />
        <property name="testOnBorrow" value="${redis.testOnBorrow}" />
    </bean>

    <!-- 连接池配置,类似数据库连接池 -->
    <bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">     
        <property name="hostName" value="${redis.host}"></property>
        <property name="port" value="${redis.port}"></property>
        <!-- <property name="password" value="${redis.pass}"></property> -->
        <property name="poolConfig" ref="poolConfig"></property>
    </bean>


    <!--redis操作模版,使用该对象可以操作<u>redis</u>  -->  
    <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate" >
        <property name="connectionFactory" ref="jedisConnectionFactory"/>   

        <!--如果不配置Serializer,那么存储的时候缺省使用String,如果用User类型存储,那么会提示错误User can't cast to String!!  -->    
        <property name="keySerializer" >    
            <bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />  
        </property>    
        <property name="valueSerializer" >    
            <bean class="org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer"/> 
        </property>    
        <property name="hashKeySerializer">    
            <bean class="org.springframework.data.redis.serializer.StringRedisSerializer"/>
        </property>    
        <property name="hashValueSerializer">    
            <bean class="org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer"/>   
        </property>    
        <!--开启事务  -->  
        <property name="enableTransactionSupport" value="true">
        </property>  
    </bean >

</beans>

3) 测试类

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath*:spring*.xml")
@SuppressWarnings("all")
public class TestRedis {

      @Autowired
      private RedisTemplate<String, Object> redisTemplate;
      
      @Test
      public void testRedis() {
            redisTemplate.opsForHash().put("myhash", "name", "xiaoxiao");
            redisTemplate.opsForHash().put("myhash", "age", "12");
            redisTemplate.opsForHash().put("myhash", "addr", "changsha");
      
            Map<Object, Object> entries = redisTemplate.opsForHash().entries("myhash");

            for(Map.Entry e: entries.entrySet()) {
                  System.out.println(e.getKey());
                  System.out.println(e.getValue());
            }
      }
}

 可以看见运行结果,今天我们就分享到这里了 下期见。。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Redis支持多种数据类型,包括string、hash、list、set和sorted set等。其中,string是最基本、最简单的数据类型,用于存储字符串。 Hash是用于存储键值对的数据结构,其中的value只能存储字符串,不允许存储其他数据类型,也不存在嵌套现象。每个hash可以存储232 - 1个键值对,并可以灵活添加或删除对象属性。但需要注意的是,hash类型并不适合存储大量对象,也不应该将hash作为对象列表使用,因为遍历整体数据的效率可能会较低。 除了string和hash类型,Redis还支持list、set和sorted set数据类型。List是一个有序的字符串列表,可以进行插入、删除和查找等操作。Set是一个无序的字符串集合,可以进行元素的添加、删除和查找操作,并且不允许重复元素的存在。Sorted Set是一个有序的字符串集合,每个元素都有一个对应的score,可以根据score进行排序和范围查找。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Redis 数据类型](https://blog.csdn.net/weixin_52851967/article/details/122670564)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值