注册 登录

清河洛

Redis的字符串操作命令

qingheluo2019-08-13清河洛358
string类型是二进制安全的,可以包含任何数据。比如jpg图片或者序列化的对象。一个string类型最大能存储512MB设置命令:set key value [ex seconds] [px milliseconds] [nx|xx] 将key的值设置为字符串value,如果key已存在就覆盖旧值,无视类型 ex second :设置键的过期时间为second秒。效果等同于setex key seconds value px millisecond :设置键的过期时间为millisecond毫秒。效果等同于psetex key milliseconds value...

string类型是二进制安全的,可以包含任何数据。比如jpg图片或者序列化的对象。一个string类型最大能存储512MB

设置命令:

set key value [ex seconds] [px milliseconds] [nx|xx]

    将key的值设置为字符串value,如果key已存在就覆盖旧值,无视类型
    ex second :设置键的过期时间为second秒。效果等同于setex key seconds value
    px millisecond :设置键的过期时间为millisecond毫秒。效果等同于psetex key milliseconds value
    NX :只在键不存在时,才对键进行设置操作。效果等同于setnx key value
    XX :只在键已经存在时,才对键进行设置操作。
    set在设置操作成功完成时返回OK 。
    如果设置了nx或者xx,造成设置操作未执行,返回空批量回复(NULL Bulk Reply)

setex key seconds value:设置key值为value,并将key的过期时间设为seconds(以秒为单位)。如果key已存在将覆盖旧值,设置成功时返回 OK 。

psetex key milliseconds value:设置key值为value,并将key的过期时间设为milliseconds(以毫秒为单位)。如果key已存在将覆盖旧值,设置成功时返回 OK 。

setnx key value:当且仅当key不存在时设置key值为value,若key已存在则不做任何操作,设置成功返回1,设置失败返回0

mset key value [key value ...]:同时设置一个或多个key-value对,如果某个key已经存在,会用新值覆盖旧值,总是返回OK(mset不可能失败)

msetnx key value [key value ...]:同时设置一个或多个key-value对,当且仅当所有key都不存在才进行操作,即使只有一个key已存在,也会拒绝执行所有key的设置操作,当所有key都成功设置返回1,否则返回0

getset key value:为一个已经存在的key赋予新值,返回key的旧值

    key不存在返回nil,但是已经设置key并赋值(结果和set key value相同)
    key旧值不是字符串是返回错误

获取命令:

get key:返回key所关联的字符串值

    key不存在返回特殊值nil
    key储存的值不是字符串类型,返回一个错误,因为 GET 只能用于处理字符串值

mget key [key ...]:返回所有(一个或多个)给定key的值。如果某个key不存在,这个key返回特殊值nil

getrange key start end:截取字符串并返回截取到的值(包括start和end在内,可以为负数)

bit(比特)位操作命令:

setbit key offset value:对key所储存的字符串值设置指定偏移量上的二进制位(bit)的值。

    当 key 不存在时,自动生成一个新的字符串值。
    字符串会进行伸展以确保可以将value保存在指定的偏移量上,当字符串值伸展时,空白位置以0填充
    返回指定偏移量原来储存的位

getbit key offset:获取key所储存的字符串指定偏移量offset上的位(bit)。当offset比字符串值的长度大,或者key不存在时,返回0

setbit和getbit的实际使用场景:

    1、某网站记录某用户是否查看过某篇文章,如果用mysql实现,如果文章很多会给数据库带来很大的压力,而使用setbit可以:
    setbit article:userid article_id 1
    可以实现针对不同的用户id记录文章id是否读过,如有1亿篇文章需要1亿位,总大小也就11M左右就全部保存下来了。
    2、记录某网站每天的用户是否登录过
    setbit date user_id 1
    等等场景

bitcount key [start] [end]:计算给定字符串中,被设置为1的比特位的数量。不存在的key被当成空字符串来处理(结果为0)

bitop operation destkey key [key ...]

    根据operation的不同对二进制字符串进行按位与(and)、按位或(or)、按位异(xor)或和按位非(not)并将结果保存到destkey上。
    除了not操作之外,其他操作都可以接受一个或多个key作为输入
    处理不同长度的字符串时,较短的那个字符串所缺少的部分会被看作0,空的key也被看作是包含0的字符串序列。
    返回保存到destkey的字符串的长度(输入key中最长的字符串长度)

数值自增/自减命令:

decr key:将key中储存的数字值减1并返回新的key值

decrby key num:将key中储存的数字值减num并返回新的key值

incr key:将key中储存的数字值加1并返回新的key值

incrby key num:将key中储存的数字值加num并返回新的key值

incrbyfloat key float:将key中储存的值加上浮点数float并返回新的key值

    key和float都可以使用像2.0e7、90e-2这样的指数符号来表示,但是,新的key值总是以传统的小数形式存储
    小数部分尾随的0会被移除,如果有需要的话,还会将浮点数改为整数(比如 3.0 会被保存成 3)
    另外,新的key值小数点后位数最多只有17位,无论计算所得的浮点数的实际精度有多长

数值自增/自减命令注意事项:

    1、如果key不存在,key先被初始化为0,然后再执行DECR操作(返回-1)
    2、如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误

其他命令:

append key value:将value追加到key原来的值的末尾(key必须是字符串类型,否则报错)。如果key不存在,命令就是简单地将给定key设为value,和执行set key value效果一样,返回追加value之后的key中字符串的长度

setrange key offset value:用value值从offset偏移量覆盖写入到key所储存的字符串

    不存在的key当作空白字符串处理。
    如果key原来储存的字符串长度比偏移量小,将用零字节("\x00")来填充以确保原字符足够长以便将value设置在指定的偏移量上
    返回被覆盖写入修改之后字符串的长度

strlen key:返回key所储存的字符串的长度。当key储存的不是字符串时返回一个错误



网址导航