String 常用命令:
-
设置值:set key value [ex seconds] [px milliseconds ] [nx|xx]
127.0.0.1:6379> keys * --查看所有键 (empty list or set) 127.0.0.1:6379> exists hello --判断key hello是否存在 返回0不存在 (integer) 0 127.0.0.1:6379> set hello world OK 127.0.0.1:6379> setnx hello redis #setnx 用于新添加,因为hello已经存在,所以添加不成功 (integer) 0 127.0.0.1:6379> set hello jedis xx #set xx 用于更新已经存在的,hello已经存在,多余更新成功 OK # 由于单线程处理机制,如果有多高客户端同时执行setnx key value,根据setnx的特性只有一个客户端可以设置成功,setnx可以作为分布式锁的一种实现方案。 执行set命令会去掉过期时间。
-
获取值:get key
127.0.0.1:6379> get hello "jedis" 127.0.0.1:6379> get not_exist_key (nil)
-
批量设置值 mset key value [ key value ...]
127.0.0.1:6379> mset a 1 b 2 c 3 d 4 OK #时间复杂度为O(k),k为键的个数
-
批量获取值 mget key [ key ....]
127.0.0.1:6379> mget a b c d 1) "1" 2) "2" 3) "3" 4) "4" #时间复杂度为O(k),k为键的个数
-
批量操作命令可以提高开发效率
get:执行n次get命令的时间=n次网络时间+n次命令执行时间 mget:执行n次get时间 =1次网络时间 + n次命令时间
-
计数 incr key
127.0.0.1:6379> EXISTS key (integer) 0 127.0.0.1:6379> incr key #键不存在按照0开始自增,返回1 (integer) 1 127.0.0.1:6379> incr key (integer) 2 127.0.0.1:6379> incr key (integer) 3 127.0.0.1:6379> incr key (integer) 4 127.0.0.1:6379> get key "4" # decr key 自减 # incrby key num 自增指定数字 # decrby key num 自减指定数字 # incrbyfloat key floatnum 自增浮点数 127.0.0.1:6379> DECR key (integer) 3 127.0.0.1:6379> INCRBY key 5 (integer) 8 127.0.0.1:6379> DECRBY key 5 (integer) 3 127.0.0.1:6379> INCRBYFLOAT key 1.0 "4"
不常用命令
-
append key value 追加值
127.0.0.1:6379> keys * (empty list or set) 127.0.0.1:6379> set key redis OK 127.0.0.1:6379> get key "redis" 127.0.0.1:6379> append key world (integer) 10 127.0.0.1:6379> get key "redisworld"
-
strlen key 字符串长度
127.0.0.1:6379> get key "redisworld" 127.0.0.1:6379> strlen key (integer) 10 127.0.0.1:6379> set hello "中国" OK 127.0.0.1:6379> strlen hello (integer) 6 #一个中文占3个字节
-
getset key value 设置新值返回原值
-
setrange key offeset value
127.0.0.1:6379> set redis pest OK 127.0.0.1:6379> setrange redis 0 b #索引从0开始 (integer) 4 127.0.0.1:6379> get redis "best"
-
getrange key start end 获取部分字符串的值
127.0.0.1:6379> GETRANGE redis 0 1 "be #O(n),n是字符串的长度。
### 内部编码
+ int:8个字节的长整型
+ embstr:小于等于39个字节的字符串
+ raw:大于39个字节的字符串
redis会根据当前值的类型和长度自行决定使用哪种实现。
```shell
127.0.0.1:6379> object encoding redis
"raw"