Redis的一些基本命令以及Jedis的使用

1. Redis五大常用数据类型

1.1 键(key)
  • keys * 查看当前库的所有key
  • exists key 查看key是否存在
  • del key 删除key
  • expire key 给key设置过期时间
  • ttl key 查看key还有多少秒过期(返回-1永不过期 返回-2已经过期)
  • dbsize 查看当前数据库key的数量
  • flushdb 清空当前数据库
  • flushall 清空所有数据库
1.2 字符串(String)
1.2.1 常用命令
  • set key value 设置键值対
  • setnx key value 只能设置不存在的key
  • get key 获取值
  • append key value 添加值到对应key的值的末尾
  • strlen key 获得值的长度
  • incr key 将key中值加1,;只能对数字进行操作,key不存在,默认值为1
  • decr key 将key中值减1,;只能对数字进行操作,key不存在,默认值为-1
  • incrby key 数字 增加指定数值
  • decrby key 数字 减少指定数值
  • mset key1 value1 key2 value2… 设置多个键值対
  • mget key1 key2… 获取多个值
  • msetnx key1 value1 key2 value2…只能设置不存在的键值対
  • setrange start end 获取开始到结束位置的值
  • getrange key start value 使用value去替代开始位置的字符串
  • setex 在设置键值対的时候就设置过期时间
  • getset key value 在获取旧值的时候用新值替换掉旧值
1.2.2 数据结构

String的数据结构为简单动态字符串,是可以修改的字符串。

字符串长度小于1M时,扩容都是对当前容量的翻倍。

当字符串长度大于M时,扩容是增加1M的空间。最大长度为512M。

1.3 列表(List)
1.3.1 常用命令
  • lpush/rpush key value1 value2 从左/又依次插入值
  • lpop/rpop key 从左/右取出一个值 (key中值取完就key没了)
  • lrange key start end 获取开始到结束位置的值 左→右(0 -1 取全部值)
  • rpoplpush key1 key2 取出key1右边的一个值插入到key2的左边
  • lindex key index 按照索引值获取value
  • llen key 获取列表长度
1.3.2 数据结构

List的数据结构为快速列表,是可以修改的字符串。

列表元素较少的时候使用一块连续的内存存储,是压缩列表。

当数据量较多的时候就会使用快速列表。

1.4 集合(Set)
1.4.1 常用命令
  • sadd key value value 往key中添加值
  • smembers key 查看key中所有值
  • sismembers key value 查看key中是否有对应值
  • scard key 查看key中值的个数
  • spop key count 从key中随机吐出count个值
  • smove key1 key2 value 将key1中的值移动到key2中
  • sinter key1 key2 取交集
  • sunion key1 key2 取并集
  • sdiff key1 key2 取差集(留key1中)
1.4.2 数据结构

Set的数据结构为字典,字典是使用哈希表实现的。

无序且不重复。

1.5 哈希(hash)
1.5.1 常用命令
  • hset key filed value 给key集合中的filed键添加值

  • hget key filed 从key集合中的filed键取出值

  • hkeys key 查看key集合中的所有filed键

  • hvals key 查看key集合中的所有value值

  • hincrby key filed 数值 为key集合的filed中的值加上数值

1.5.2 数据结构

hash的数据结构为压缩列表和哈希表两种。

当filed-value长度较短且个数较少是,使用压缩列表,否则使用哈希表。

1.6 有序集合(Zset)
1.6.1 常用命令
  • zadd key score value score value… 将一个或多个值以及评分加入集合中

  • zrange key start end 查看范围在start到end的值

  • zrangebyscore key min max 查看分数在min到max的值

  • zincrby key 数值 value 为指定value加上数值

  • count key min max 统计key中分数在min到max的值的个数

  • zrank key value 查看value在集合中的排名

1.6.2 数据结构

zset的数据结构为跳跃表和哈希表。

哈希表的作用就是关联元素value和权重score。

跳跃表的作用是给元素value排序,能通过score的范围获取元素列表。

2. Redis发布和订阅

2.1 什么是发布和订阅

Redis发布和订阅(pub/sub)是一种消息通信模式:发送者发送消息,订阅者接受消息。

Redis可以订阅任意数量频道。

2.2 命令实例
  1. 创建两个客户端

在这里插入图片描述

  1. 第一个客户端先订阅频道1
subscribe channel1

在这里插入图片描述

  1. 第二个客户端在频道1发布 HelloWorld!的消息,第一个客户端接受到第二个客户端发送的 HelloWorld!消息。
publish channel1 HelloWorld!

在这里插入图片描述

3. Jedis测试

3.1 连接测试

windows连接主机地址填写127.0.0.1就行

linux连接填写linux主机地址,可以通过ipconfig查看,然后需要在配置文件中将将127.0.0.1注释掉,不注释掉只能接受本机访问,然后将安全模式设置为no,最后在查看一下防火墙是否开启6379端口号。

返回PONG则代表连接成功

public static void main(String[] args) {
    //创建Jedis对象
    Jedis jedis = new Jedis("127.0.0.1",6379);
    //测试
    String ping = jedis.ping();
    System.out.println(ping);//PONG
}
3.2 五种不同数据类型测试
  1. 导入所需依赖
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>3.2.0</version>
</dependency>
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>compile</scope>
</dependency>
  1. 测试
//String
@Test
public static void demo1(Jedis jedis){
    jedis.set("k1", "v1");
    String string = jedis.get("k1");
    System.out.println("string中的值为:"+string);//string中的值为:v1
}
//List
@Test
public static void demo2(Jedis jedis){
    jedis.lpush("k2", "v1", "v2", "v2");
    List<String> list = jedis.lrange("k2", 0, -1);
    System.out.println("list中的值为:"+list);//list中的值为:[v2, v2, v1]
}
//Set
@Test
public static void demo3(Jedis jedis){
    jedis.sadd("k3","v1","v2","v2");
    Set<String> set = jedis.smembers("k3");
    System.out.println("set中的值为:"+set);//set中的值为:[v1, v2]
}
//Hash
@Test
public static void demo4(Jedis jedis){
    jedis.hset("k4","id","1");
    jedis.hset("k4","name","zhangsan");
    Map<String, String> hash = jedis.hgetAll("k4");
    System.out.println("hash中的值为:"+hash);//hash中的值为:{name=zhangsan, id=1}
}
//Zset
@Test
public static void demo5(Jedis jedis){
    jedis.zadd("k5",10,"python");
    jedis.zadd("k5",20,"java");
    Set<String> zset = jedis.zrange("k5", 0, -1);
    System.out.println("zset中的值为:"+zset);//zset中的值为:[python, java]
}
3.3 Jedis实例

在这里插入图片描述

public class JedisPhone01 {
    public static void main(String[] args) {
        //输入电话号码
        //setRedis("13812345678");
        //验证码校验
        codeCheck("13812345678","048037");
    }
    //验证码校验,返回成功或者失败
    public static void codeCheck(String phone,String code){
        Jedis jedis = new Jedis("127.0.0.1",6379);
        jedis.select(1);
        String codeKey = phone+":code";
        String vcode = jedis.get(codeKey);
        if (vcode.equals(code)){
            System.out.println("验证成功");
        }else {
            System.out.println("验证失败");
        }
        jedis.close();
    }

    //手机号每天只能输入3次,将6位验证码存入redis并且设置2分钟有效
    public static void setRedis(String phone){
        Jedis jedis = new Jedis("127.0.0.1",6379);
        jedis.select(1);
        //设置手机号输入次数和验证码的key
        String countKey = phone+":count";
        String codeKey = phone+":code";
        //判断输入次数
        String count = jedis.get(countKey);
        if(count == null){//如果次数为空,代表这是第一次输入,设置输入次数为1
            jedis.setex(countKey,24*60*60,"1");
        }else if(Integer.parseInt(count)<=2){
            jedis.incr(countKey);
        }else {
            System.out.println("每天只能输入3次");
            jedis.close();
            return;
        }
        //将6位验证码存入redis并且设置2分钟有效
        String code = getCode();
        jedis.setex(codeKey,120,code);
        jedis.close();
    }

    //随机生成6位验证码
    public static String getCode(){
        String code = "";
        for (int i = 0; i < 6; i++) {
            Random random = new Random();
            int num  = random.nextInt(10);
            code+=num;
        }
        return code;
    }
}
  • 17
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿柒爱吃鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值