redis_String

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"
原文地址:https://www.cnblogs.com/zhoujun007/p/13131613.html