秒懂Redis:String 数据类型

  1. 介绍:
    1. redis 中没有使用 C 语言的字符串表示,而是自定义一个数据结构叫 SDS(simple dynamic string) 即简单动态字符串
    2. C 语言对字符串的存储是使用字符数组,遇到 '\0' 字符认为字符串结束,redis 的字符串可以存储任何类型的数据,因为任何类型数据都可以表示成二进制,sds 结构中的 charbuf[] 就是存储了二进制数据
    3. 二进制安全:存入什么数据取出的还是什么数据
      1. redis 中的 sbs 不像 C 语言处理字符串那样遇到 '\0' 字符认为结束,sbs 不会对存储的二进制数据进行处理,存入什么数据取出还是什么数据
  2. 命令:
    1. 赋值与取值:
      set key value   
      get key
      #当键不存在时返回空结果
      例:
          set name zhangsan
          get name
    2. 向尾部追加:
      1. append 的作用是向键值的末尾追加 value,如果键不存在则将该键的的值设置为 value,即相当于 set key value
      2. 返回的是追加后字符串的总长度
    3. 获取字符串长度
      1. strlen  key:命令返回键值的长度,如果键不存在则返回 0
      2. 同时设置多个键值
        mset key1 value1 key2 value2 …
        #获取多个 key
        mget key1 key2 key3…
      3. 应用:
        package com.qcby.config.test;
        
        import com.qcby.config.RedisUtil;
        import org.junit.Test;
        import redis.clients.jedis.Jedis;
        
        public class StringTest {
            /**
             * string字符串
             */
        
            //应用1
            @Test
            public  void Hello(){
                Jedis jedis = RedisUtil.getJedis();
                try {
                    //插入值
                    jedis.set("name","minxr");
                    System.out.println("插入数据" + jedis.get("name"));
        
                    //追加数据
                    jedis.append("name","jintao");
                    System.out.println("追加后的数据:" + jedis.get("name"));
        
                    //覆盖原来的数据
                    jedis.set("name","jintao");
                    System.out.println("被覆盖后的数据:" + jedis.get("name"));
        
                    //删除数据
                    jedis.del("name");
                    System.out.println("被删除后的key:" + jedis.get("name"));
        
                    //设置多个 key  value
                    jedis.mset("name","zhansan","sex","男");
                    System.out.println("获取多个key:" + jedis.mget("name","sex"));
        
                }catch (Exception e){
                    e.printStackTrace();
                }finally {
                    RedisUtil.closeJedis(jedis);
                }
            }
        
            //应用场景2 --- 清空数据库
            @Test
            public void testKey(){
                Jedis jedis = RedisUtil.getJedis();
        
                //清空数据
                System.out.println("是否清除成功:" + jedis.flushDB());
                System.out.println(jedis.echo("foo"));
        
                //判断是否有当前 key
                System.out.println("是否有当前 key :" + jedis.exists("foo"));
                jedis.set("key","values");
                System.out.println("设置的key:" + jedis.get("key"));
        
                //关闭资源
                RedisUtil.closeJedis(jedis);
            }
        
            //场景3
            @Test
            public void testString(){
                Jedis jedis = RedisUtil.getJedis();
        
                try {
                    jedis.set("key","HelloWorld");
                    System.out.println("获取 key:" + jedis.get("key"));
        
                    //清空数据
                    System.out.println("是否清除成功:" + jedis.flushDB());
        
                    //存储数据
                    jedis.set("foo","bar");
                    System.out.println("获取 foo:" + jedis.get("foo"));
        
                    //若当前 key 不存在则存储值
                    jedis.setnx("foo","foo not exits");
                    System.out.println("获取 foo:" + jedis.get("foo"));
        
                    //覆盖数据
                    jedis.set("foo","foo update");
                    System.out.println("获取覆盖的 foo:" + jedis.get("foo"));
        
                    //追加数据
                    jedis.append("foo","Hello World");
                    System.out.println("追加后的 foo:" + jedis.get("foo"));
        
                    //设置 key 的有效期,并存储数据
                    jedis.setex("foo",2,"foo not exits");
                    System.out.println("设置有效期的 foo:" + jedis.get("foo"));
        
                    try {
                        Thread.sleep(3000);
                    }catch (Exception e){
        
                    }
                    System.out.println(jedis.get("foo"));
        
                    //获取并修改数据
                    jedis.set("name","name update");
                    System.out.println("获取并修改的 name:" + jedis.getSet("name","helllo"));
        
                    //截取 value 值
                    System.out.println(jedis.getrange("foo",1,3));
                    System.out.println(jedis.mset("mset1","mvalue1","mset2","mvalue2","mset3","mvalue3","mset4","mvalue4"));
                    System.out.println("获取多个 key:" + jedis.mset("mset1","mset2","mset3","mset4"));
                }catch (Exception e){
                    e.printStackTrace();
                }finally {
                    RedisUtil.closeJedis(jedis);
                }
            }
        
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值