redis的String类型的详解

客户端命令

添加/修改

添加/修改

 set key value

添加(分布式锁,只有key不存在时生效)

 setnx key value

 此时若多个客户端执行这个命令,只有一个成功,保证每次锁只有一个人拿到,只有这个人释放后, 其他人才能操作,但此时需要注意死锁。 (可以尝试通过expire命令给当前key设置过期时间,避免死锁)

添加/修改(多个)

mset key1 value1 key2 value2

添加/修改(多个,分布式锁,只有key不存在时生效)

msetnx key value[key value …

添加/修改(设置过期时间)

setex key time value

如果 key 已经存在, setex命令将会替换旧的值,并设置过期时间

通过数据有效性控制业务行为,如:限制客户每4个小时才能投一次票,此时可以 set user:id 4*60*60 1

查询

获取key的值

get key

获取key并删除

getdel key

获取旧值并设置新值

getset key value

获取key的值并设置过期时间

getex key

获取key的值并清除过期时间

 set key value KEEPTTL

查询多个key的value

mget key1 key2

如果给定的 key 里面,有某个 key 不存在,那么这个 key 返回特殊值 nil 

返回key集合中的索引start和索引end之间的元素(包含start和end)

getrange key start end
            getrange k1 0 -1 返回集合中所有元素

方法

获取key 所储存的字符串值的长度

strlen key

当 key 储存的不是字符串值时,返回一个错误

追加

append key value

如果 key 已经存在并且是一个字符串, append 命令将 value 追加到 key 原来的值的末尾 如果 key 不存在, append 就简单地将给定 key 设为 value ,就像执行 set key value 一样

修改指定位置的值 

 setrange key offset value

127.0.0.1:6379> set k6 abcd1234 127.0.0.1:6379> setrange k6 1 xxx 127.0.0.1:6379> get k6 "axxx1234"

将 key 中储存的数字值增一

 incr key

若不存在,则赋值为"1" 如果字符串类型的值不能表示为数字、或者是其他类型,那么返回一个错误

将 key 中储存的数字值减一 

 decr key

若不存在,则赋值为"-1" 如字符串类型的值不能表示为数字、或者是其他类型,那么返回一个错误

将key存储的数字值按照step进行增/减

incrby/decrby key step

如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 incrby/decrby 命令 如字符串类型的值不能表示为数字、或者是其他类型,那么返回一个错误

springboot操作string类型

引入

 @Autowired
          private RedisTemplate redisTemplate;

增加/修改

增加/修改

 redisTemplate.opsForValue().set("name","jkw");  

添加(分布式锁,只有key不存在时生效)【key不存在为true,key存在为false】

Boolean flag=redisTemplate.opsForValue().setIfAbsent("name","jkw");

添加/修改(多个)

 Map map=new HashMap();
          map.put("k1","v1");
          map.put("k2","v2");
          redisTemplate.opsForValue().multiSet(map); 

添加/修改(多个,分布式锁,只有key不存在时生效)

  Map map=new HashMap();
          map.put("k1","v1");
          map.put("k2","v2");
          redisTemplate.opsForValue().multiSetIfAbsent(map);

修改(key存在时生效)【key存在为true,key不存在为false】

Boolean flag=redisTemplate.opsForValue().setIfPresent("name","jkw");

同时设值过期时间(参数为:TimeUnit)

void set(K key, V value, long timeout, TimeUnit unit);
          Boolean setIfAbsent(K key, V value, long timeout, TimeUnit unit);
          Boolean setIfPresent(K key, V value, long timeout, TimeUnit unit);
   timeout:多少时间单位
          unit:时间单位
            TimeUnit.NANOSECONDS:纳秒
            TimeUnit.MICROSECONDS:微秒
            TimeUnit.MILLISECONDS:毫秒
            TimeUnit.SECONDS:秒种
            TimeUnit.MINUTES:分钟
            TimeUnit.HOURS:小时
            TimeUnit.DAYS:天

同时设置过期时间(单位:Duration)

 void set(K key, V value, Duration timeout);
          default void setIfAbsent(K key, V value, Duration timeout);
          Boolean setIfPresent(K key, V value, Duration timeout);
 timeout:时间单位,可链式调用
           Duration.ofDays(1):天
           Duration.ofHours(1):时
           Duration.ofMinutes(1):分
           Duration.ofSeconds(1):秒
           Duration.ofMillis(1):毫秒
           Duration.ofNanos(1):纳秒
   //过期时间是1天1小时
           redisTemplate.opsForValue().set("key","value", Duration.ofDays(1).ofHours(1));
           //过期时间是2天1小时
           redisTemplate.opsForValue().setIfAbsent("key","value", Duration.ofDays(2).ofHours(1));
           //过期时间是3天3秒钟
           redisTemplate.opsForValue().setIfPresent("key","value", Duration.ofDays(3).ofSeconds(3));

查询

获取key的值

redisTemplate.opsForValue().get("name")

批量获取值

          List list=new ArrayList<>();
            list.add("k1");
            list.add("k2");
            redisTemplate.opsForValue().multiGet(list);            

获取key并删除

 redisTemplate.opsForValue().getAndDelete("key");

获取旧值并设置新值

redisTemplate.opsForValue().getAndSet("key","value");

获取key的值并设置过期时间(单位:TimeUnit)

redisTemplate.opsForValue().getAndExpire("key",1,TimeUnit.HOURS);

获取key的值并设置过期时间(单位:Duration)

//过期时间是3天3小时
          redisTemplate.opsForValue().getAndExpire("key",Duration.ofDays(3).ofSeconds(3));

获取key的值并清除过期时间

redisTemplate.opsForValue().getAndPersist("key");

方法

追加字符串

redisTemplate.opsForValue().append("key","value");

获得长度

redisTemplate.opsForValue().size("key");

获得指定范围的字符串

redisTemplate.opsForValue().get("key",0,5);

替换指定索引的内容

redisTemplate.opsForValue().set("key","value",0);

自增1

redisTemplate.opsForValue().increment("key");
 自减1
          redisTemplate.opsForValue().decrement("key");
          自增指定整数
          redisTemplate.opsForValue().increment("key",3);
          自减指定整数
          redisTemplate.opsForValue().decrement("key",3);
          自增指定小数
          redisTemplate.opsForValue().increment("key",3.3);

你可能感兴趣的:(数据库,redis,数据库,缓存)