Redis基本命令

String

SDS使用结构体实现,结构体中的len属性直接记录了该SDS结构体中buf数组中已使用的长度,因此获取字符串长度时,只需要获取len属性的值,这个操作的复杂度为O(1)。
SDS实现了空间预分配和惰性空间释放两种优化策略,减少了修改字符串时内存分配的次数。
SDS被修改时会自动动态扩展至修改值的长度大小,避免了内存溢出问题。

Strings 基本命令

  • APPEND 追加值到一个key上 均摊时间复杂度是O(1), 因为redis用的动态字符串的库在每次分配空间的时候会增加一倍的可用空闲空间,所以在添加的value较小而且已经存在的 value是任意大小的情况下,均摊时间复杂度是O(1)
127.0.0.1:6379> exists key1
(integer) 0
127.0.0.1:6379> append key1 "hello"
(integer) 5
127.0.0.1:6379> append key1 " world"
(integer) 11
127.0.0.1:6379> get key1
"hello world"
127.0.0.1:6379> 
  • BITCOUNT key [start end] 时间复杂度O(n) 统计字符串被设置为1的bit数. 可以结合位图法使用~
127.0.0.1:6379> bitcount bits 
(integer) 0
127.0.0.1:6379> setbit bits 5 1
(integer) 0
127.0.0.1:6379> bitcount bits 
(integer) 1
127.0.0.1:6379> setbit bits 4 1
(integer) 0
127.0.0.1:6379> bitcount bits 
(integer) 2
127.0.0.1:6379> 
  • DECR key 对key对应的数字做减1操作。如果key不存在,那么在操作之前,这个key对应的值会被置为0。如果key有一个错误类型的value或者是一个不能表示成数字的字符串,就返回错误。这个操作最大支持在64位有符号的整型数字~
127.0.0.1:6379> set key2 "11"
OK
127.0.0.1:6379> decr key2
(integer) 10
127.0.0.1:6379> decr key3  //key3 不存在
(integer) -1
127.0.0.1:6379> get key3
"-1"
127.0.0.1:6379> SET key4 "234293482390480948029348230948"
OK
127.0.0.1:6379> decr key4
(error) ERR value is not an integer or out of range
  • DECRBY key decrement 将key对应的数字减decrement。如果key不存在,操作之前,key就会被置为0。如果key的value类型错误或者是个不能表示成数字的字符串,就返回错误。这个操作最多支持64位有符号的正型数字~
127.0.0.1:6379> set key5 12
OK
127.0.0.1:6379> decrby key5 5
(integer) 7
127.0.0.1:6379>   其余同decr命令
//GET key 返回key的value。如果key不存在,返回特殊值nil。如果key的value不是string,就返回错误,因为GET只处理string类型的values。
//SET key value [EX seconds] [PX milliseconds] [NX|XX] 将键key设定为指定的“字符串”值。 如果	key	已经保存了一个值,那么这个操作会直接覆盖原来的值,并且忽略原始类型。 当set命令执行成功之后,之前设置的过期时间都将失效
127.0.0.1:6379> get key6
(nil)
127.0.0.1:6379> set key6 test
OK
127.0.0.1:6379> get key6
"test"
  • GETBIT key offset 返回key对应的string在offset处的bit值 当offset超出了字符串长度的时候,这个字符串就被假定为由0比特填充的连续空间。当key不存在的时候,它就认为是一个空字符串,所以offset总是超出范围,然后value也被认为是由0比特填充的连续空间。到内存分配
  • SETBIT key offset value 设置或者清空key的value(字符串)在offset处的bit值。
127.0.0.1:6379> setbit key7 6 1
(integer) 0
127.0.0.1:6379> getbit key7 6
(integer) 1
127.0.0.1:6379> getbit key7 100
(integer) 0
  • INCR key 对存储在指定key的数值执行原子的加1操作。如果指定的key不存在,那么在执行incr操作之前,会先将它的值设定为0。
127.0.0.1:6379> incr key8 
(integer) 1
127.0.0.1:6379> incr key8 
(integer) 2
127.0.0.1:6379> get key8
"2"
  • INCRBY key increment
127.0.0.1:6379> incrby key9 10
(integer) 10
127.0.0.1:6379> incrby key9 1
(integer) 11
127.0.0.1:6379> get key9
"11"
  • SETEX key seconds value 设置key对应字符串value,并且设置key在给定的seconds时间之后超时过期。这个命令等效于执行下面的命令

  • SET mykey value

  • EXPIRE mykey seconds

  • SETEX是原子的,也可以通过把上面两个命令放到MULTI/EXEC块中执行的方式重现。相比连续执行上面两个命令,它更快,因为当Redis当做缓存使用时,这个操作更加常用。

  • SETNX key value 将key设置值为value,如果key不存在,这种情况下等同SET命令。 当key存在时,什么也不做。SETNX是”SET if Not exists”的简写。

127.0.0.1:6379> setnx key10 "hello"
(integer) 1
127.0.0.1:6379> setnx key10 "world"
(integer) 0
127.0.0.1:6379> get key10
"hello"
原文地址:https://www.cnblogs.com/huangpeng1990/p/7636094.html