Redis命令

1. Redis介绍

Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。
它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets)

2. Spring整合Redis

<!--spring整合redis -->
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-redis</artifactId>
        </dependency>

3. Redis命令

String类型

在这里插入图片描述
在这里插入图片描述

Hash类型

说明:可以用散列类型保存对象和属性值
例子:User对象{id:2,name:小明,age:19}
在这里插入图片描述

List类型

说明:Redis中的List集合是双端循环列表,分别可以从左右两个方向插入数据.
List集合可以当做队列使用,也可以当做栈使用
队列:存入数据的方向和获取数据的方向相反
栈:存入数据的方向和获取数据的方向相同

在这里插入图片描述

set类型

https://www.runoob.com/redis/redis-sets.html

redis事务

redis中操作可以添加事务的支持.一项任务可以由多个redis命令完成,如果有一个命令失败导致入库失败时.需要实现事务回滚.

在这里插入图片描述

虽然redis提供了事务操作.但是该事务是一种弱事务,只对单台redis有效.如果有多台redis,如果需要使用事务控制,则一般使用队列的形式

4. 特殊的redis方法

redis.ip=192.168.126.129
redis.port=6379

控制反转,容器管理Jedis

package com.jt.redisConfig;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;

import lombok.Data;
import redis.clients.jedis.Jedis;

@Configuration
@PropertySource("classpath:/properties/redis.properties")
@ConfigurationProperties(prefix="redis")
@Data
public class RedisConfig {
	
	private String ip;
	private int port;
	
	@Bean
	public Jedis jedis() {
		return new Jedis(ip,port);
	}
	
}

4.1 SetEX()

	@Test
	public void setExTest() throws InterruptedException {
		jedis.setex("www", 5, "超时测试");
		
	}
	@Test
	public void getExTest() {
		//等待五秒再次查询
		System.out.println(jedis.get("www"));//null
	}

4.2 SetNX()

    @Test
	public void getNxTest() {
		//如果key不存在时,则赋值
		jedis.setnx("a", "123");
        jedis.setnx("a", "456");
        System.out.println(jedis.get("a"));//123
	}

4.3 SetParams

import redis.clients.jedis.params.SetParams;
 /**
     * 1.保证超时时间的原子性操作              EX
     * 2.保证如果key存在,则不允许赋值.  NX
     * 要求:又满足超时定义,同时满足数据不允许修改
     * SetParams:参数
     *   EX:秒
     *   PX:毫秒
     *   NX:有值不修改
     *   XX:如果key不存在,则数据不修改. 只有key存在时,修改
     */
    @Test
    public void testStringEXNX() {
        SetParams setParams = new SetParams();
        setParams.ex(20).xx();
        jedis.set("a", "66666666", setParams);
        System.out.println(jedis.get("a"));
    }

4.4 Hash操作

	/**
     * 一般将有关联关系的数据利用hash方式进行保存.
     * orderId:  
     *          userid:下单用户
     *          price:  xxxxx
     *          items:  [xxxxxx,xxxxxx]
     *          orderShipping: xxxxxxx  
     */
    @Test
    public void testHash() {
        jedis.hset("hash", "id", "100");//{name=abc, id=100}
        jedis.hset("hash", "name", "abc");
        System.out.println(jedis.hgetAll("hash"));
        System.out.println(jedis.hkeys("hash"));//[name, id]
        System.out.println(jedis.hvals("hash"));//[100, abc]
    }

4.5 SET集合

 	@Test
    public void testSet() {
        
        jedis.sadd("set1", "1","2","3");
        jedis.sadd("set2", "3");
        //求差集
        System.out.println(jedis.sdiff("set1","set2"));//[1,2]
        //返回所有集合元素
        System.out.println(jedis.smembers("set1"));//[1,2,3]
    }

4.6 List集合

	@Test
    public void testList() {
        //从左入队
        jedis.lpush("list", "1","2","3","4","5");
        //取出右边第一个数据
        String value = jedis.rpop("list");
        System.out.println(value);//1 
    }

4.7 Redisd事务控制

	@Test
    public void testTX() {
        
        Transaction  transaction =  jedis.multi();  //开始事务
        try {
            transaction.set("a", "a");
            transaction.set("b", "b");
            //int a = 1/0;
            transaction.exec();     //提交事务
        } catch (Exception e) {
            e.printStackTrace();
            transaction.discard();  //事务回滚
        }
    }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值