string 是 redis 最基本的类型,你可以理解成与 Memcached 一模一样的类型,一个 key 对应一个 value。

它能存储任何形式的字符串,包括二进制数据,邮箱,json化的对象,甚至是一张图片。允许存储数据最大是 512MB。

使用场景 : 缓存,计数器,微博数,粉丝数,分布式锁

set

设置给定key的值,如果已存在覆盖,无视类型.set命令执行后,之前设置的过期时间失效.正常返回ok,如果加了nx或者xx,没有设置条件,返回nil

从2.6.12版本开始,redis为SET命令增加了一系列选项:
EX seconds –设置键key的过期时间,单位时秒
PX milliseconds –设置键key的过期时间,单位时毫秒
NX – 只有键key不存在的时候才会设置key的值
XX – 只有键key存在的时候才会设置key的值
  • setxx : 指定key存在,为key设置给定的值(成功1,失败0)
127.0.0.1:6379> set yhq qhh xx
(nil)
127.0.0.1:6379> set yhq qhh
OK
127.0.0.1:6379> set yhq qhh1 xx
OK
127.0.0.1:6379> get yhq
"qhh1"
  • setnx : 指定的key不存在时,为key设置给定的值(成功1失败0)

> setnx yhq 123
(integer) 1
> setnx yhq 123
(integer) 0
  • ex : 设置key的过期时间,单位秒
> set yhq qhh ex 10
OK
> get yhq
"qhh"
> get yhq # 超时
(nil)
  • setex : 设置key的过期时间,如果值存在覆盖

> setex yhq  qhh
OK
> get yhq
"qhh"
> setex yhq 10 qqqq
OK
> get yhq
"qqqq"
> get yhq #超时
(nil)

expire : 设置key的过期时间,成功返回1,失败或者key不存在返回0

> expire yhq 10
(integer) 0
> set yhq qhh
OK
> expire yhq 5
(integer) 1
> get yhq # 超时
(nil)

px : 设置key的过期时间,单位毫秒

> set yhq qhh px 10000
OK
> get yhq
"qhh"
> get yhq #超时
(nil)

psetex : 设置key的过期时间,单位毫秒

> psetex yhq  qhh
OK
> get yhq
"qhh"
> get yhq #超时
(nil)

pexpire : 设置key的过期时间,单位毫秒,成功返回1,失败或者不存在返回0

> pexpire yhq
(integer) 0
> set yhq qhh
OK
> pexpire yhq
(integer) 1
> get yhq
(nil)

ttl

以秒为单位返回key的剩余获取时间,当key不存在时返回-2,当key没有过期时间时返回-1

> set yhq 123
OK
> ttl yhq
(integer) -1
> expire yhq 10
(integer) 1
> ttl yhq
(integer)
> ttl yhq
(integer) -2

pttl : 以毫秒为单位返回key的剩余获取时间,当key不存在时返回-2,当key没有过期时间时返回-1

> set yhq 123
OK
> pexpire yhq 10086
(integer)
> pttl yhq
(integer)
> pttl yhq
(integer) -2

persist : 移除给定key的过期时间,使其永不过期(成功移除返回1,key不存在或者没有过期时间返回0)

> expire qhhyhq 100
(integer)
> ttl qhhyhq
(integer)
> persist qhhyhq
(integer)
> ttl qhhyhq
(integer) -1
  • nx : 只有key不存在时才能设置
> set yhq qhh nx
OK
> set yhq 666 nx
(nil)
> set yhq 666
OK
> get yhq
"666"
  • xx : 只有key存在时才能设置
> set yhq qhh xx
(nil)
> set yhq qhh
OK
> set yhq 666 xx
OK

dump : 序列化给定key,返回被序列化的值,使用restore反序列化,key不存在返回nil

  • 它带有64位的校验和,用于检测错误,restore在进行反序列化之前会先检查校验和
  • 值的编码和RDB文件保持一致
  • RDB版本会被编码在序列化值中,如果因为redis版本不用造成RDB格式不兼容,nameredis会拒绝对这个值进行反序列化操作
> dump yhq
(nil)
> set yhq qhh
OK
> dump yhq
"\x00\x03qhh\x06\x00\xa1\xc2\xcd\\\xe2\x96\xbd\xe3"

restore : 反序列化给定的序列化值,并将它和给定的key关联,参数ttl以毫秒为单位为key设置生存时间,如果ttl为0,那么不设置生存时间(restore在执行反序列化之前会先对序列化值的RDB版和数据进行检查,如果RDB版本不完整的话,那么restore会拒绝进行反序列化,并返回一个错误)

> restore yhq-msg 0 "\x00\x03qhh\x06\x00\xa1\xc2\xcd\\\xe2\x96\xbd\xe3"
OK
> get yhq-msg
"qhh"

strlen : 获取key的长度(key不存在返回0,key不是字符串类型返回一个错误)

> strlen yhq
(integer) 3
> strlen yhqqhh
(integer) 0

setrange : 用给定的字符串覆盖key,从offset开始

> setrange yhq qhh
(integer) 9
> get yhq
"012345qhh"

> get yhq
"012345"
> setrange yhq qhh
(integer) 10
> get yhq
"012345\x00qhh"
> set yhq 012345
OK
> get yhq
"012345"
> setrange yhq 2 yhqqhhhhh
(integer) 11
> get yhq
"01yhqqhhhhh"

getset : 设置给定key的值,并返回key的旧值(没有旧值返回nil,当key存在但不是一个字符串类型时,返回一个错误)

> get yhq
"6"
> getset yhq 666
"6"
> get yhq
"666"

mset : 设置一个或者多个键值对

> mset yhq 123 qhh 321
OK

mget : 获取一个或者多个键值对(如果某个key不存在,返回nil)

> mget yhq qhh yhqqhh
1) "123"
2) "321"
3) (nil)

getrange : 获取key的子字符串

> get yhq
"123"
> getrange yhq 0 1
""
> getrange yhq 0 -1
"123"

msetnx : 设置多个key,当所有key设置成功(不存在)返回1,如果失败(至少有一个存在)返回0

> msetnx q 132 y 123
(integer) 1
> msetnx q 132 yhq 123
(integer) 0

append : 给定key追加val,如果不存在则set,返回val的长度

> append yhq 123
(integer) 3
> get yhq
"123"
> append yhq '-666'
(integer) 7
> get yhq
"123-666"

incr : 给定key数值+1,如果key不存在,先set key 0再+1

> incr yhq
(integer) 1
> incr qhh
(error) ERR value is not an integer or out of range

decr : 给定key数值-1,如果key不存在,先set key 0再-1

> decr yhq
(integer) -1
> decr qhh
(error) ERR value is not an integer or out of range

incrby / decrby : 增加/减少给定值

> get yhq
"-1"
> incrby yhq 666
(integer) 665
> decrby yhq 555
(integer) 110

incrbyfloat: 增加给定浮点值

> get yhq
"110"
> incrbyfloat yhq 6.6
"116.6"
 
 

位操作 : 一个字节由8个二进制位组成

> set yhq bar
OK
> get yhq
"bar"

bar  在ASCII码中分别是  01100010   ,    01100001   , 01110010

getbit : 获取字符串指定二进制位的值,索引从0开始,超出索引默认为0

> getbit yhq 6
(integer) 1
> getbit yhq 600
(integer) 0

将a转换为A  A在ASCII码中是 65     0100 0001

setbit : 设置字符串指定二进制位的值,返回值是该位置旧的值,索引从0开始,超出长度,自动将中间的二进制设置为0,不存在的键会将其前面的赋值0

> setbit yhq 10 0
(integer) 1
> get yhq
"bAr"

01100010   ,    01000001   , 01110010

bitcount : 统计二进制位是1的个数,可以指定范围(bA 0-1),不存在返回0

> bitcount yhq
(integer) 9
> bitcount yhq 0 1
(integer) 5

Redis之字符串类型命令的更多相关文章

  1. redis数据类型-字符串类型

    Redis数据类型 字符串类型 字符串类型是Redis中最基本的数据类型,它能存储任何形式的字符串,包括二进制数据.你可以用其存储用户的邮箱.JSON化的对象甚至是一张图片.一个字符串类型键允许存储的 ...

  2. 第二百九十五节,python操作redis缓存-字符串类型

    python操作redis缓存-字符串类型 首先要安装redis-py模块 python连接redis方式,有两种连接方式,一种是直接连接,一张是通过连接池连接 注意:以后我们都用的连接池方式连接,直 ...

  3. Redis常用命令入门1:字符串类型命令

    Redis总共有五种数据类型,在学习的时候,一定要开一个redis-cli程序,边看边练,提高效率. 一.最简单的命令 1.获得符合规则的键名列表 keys * 这里的*号,是指列出所有的键,同时*号 ...

  4. redis之(四)redis的字符串类型的命令

    [一]获得符合规则的键名列表  -->命令  keys [pattern] -->keys命令需要遍历Redis中所有的键,当键的数量比较多会影响性能,生产环境不建议用 -->pat ...

  5. python之Redis的字符串类型操作

    redis的数据类型: 字符串型    哈希     列表     集合     有序集合 1.String(字符串类型) set  命令:   设置一个键和值,键存在则只覆盖,返回ok > s ...

  6. Redis入门---字符串类型

    阅读目录 1.keys * 命令 2.判断一个键是否存在(exists key) 3.删除键 4.获取键值的数据类型 5 递增数字(incr) 6.增加指定的整数 (INCRBY) 7.减少指定的整数 ...

  7. 03 redis之string类型命令解析

    Redis字符串类型的操作 set key value [ex 秒数] / [px 毫秒数] [nx] /[xx] 如: set a 1 ex 10 , 10秒有效 Set a 1 px 9000 , ...

  8. redis:string字符串类型的操作

    1. string字符串类型的操作: 1.1. set 设置单个值 语法:set key value [EX seconds] [PX milliseconds] [NX|XX] 注: EX seco ...

  9. Redis 常用命令学习二:字符串类型命令

    1.赋值与取值命令 127.0.0.1:6379> set foo helloredis OK 127.0.0.1:6379> get foo "helloredis" ...

随机推荐

  1. kendo grid应用经验总结

    学习网址 https://docs.telerik.com/kendo-ui/controls/editors/dropdownlist/overview https://demos.telerik. ...

  2. YUV编码格式

    YUV是被欧洲电视系统采用的一种颜色编码方法.在现代彩色电视系统中,通常采用三管彩色摄影机或彩色CCD摄像机取像,然后把取 得的彩色图像信号经过分色,分别放大校正后得到RGB,在经过矩阵变换电路,得到 ...

  3. python webdriver api-右键另存下载文件

    右键另存下载文件 先编辑SciTE脚本: ;ControlFocus("title","text",controlID) ;表示将焦点切换到标题为title窗体 ...

  4. hibernate的实现原理以及延迟加载

    Hibernate是怎样实现呢?主要是依据反射机制. 现在以一次数据库查询操作分析Hibernate实现原理. 假设有一个用户表(tbl_user),表中字段有id,name,sex.同时有一个实体类 ...

  5. 5G频谱到底有多值钱?

    继9月召开5G峰会并发布“5GFAST”战略后,美国于当地时间11月14日正式启动5G频谱拍卖.“这些频谱对于部署5G服务和应用程序至关重要,而我们并没有就此止步.”美国联邦通信委员会(FCC)主席A ...

  6. MyEclipse2014+JDK1.7+Tomcat8.0+Maven3.2 开发环境搭建

    1.JDK的安装 首先下载JDK,这个从sun公司官网可以下载,根据自己的系统选择64位还是32位,安装过程就是next一路到底.安装完成之后当然要配置环境变量了. ————————————————— ...

  7. camera按键采集图像及waitKey的用法

    前言 项目需要通过摄像头采集图像并保存,主要是用于后续的摄像头标定.实现过程其实很简单,需要注意一些细节. 系统环境 系统版本:ubuntu16.04:opencv版本:opencv2.4.13:编程 ...

  8. Java中字符转int

    Java中字符转int 方法一代码: //直接使用静态方法,不会产生多余的对象,但会抛出异常 //parseInt 方法都有两个参数, 第一个参数就是要转换的对象, 第二个参数是进制基数, 可以是 2 ...

  9. 20145330 《网络攻防》 MSF基础应用

    20145330 <网络攻防> MSF基础应用 1.实验后回答问题 (1)用自己的话解释什么是exploit,payload,encode. exploit:进行渗透攻击的模块合集 pay ...

  10. CSS实现三角形、梯形、平行四边形、圆形、椭圆形、对话框、自适应正方形

    本文篇幅较长,希望能坚持看完,转载请注明出处,如果觉得好文请给个赞吧 CSS实现梯形 CSS实现三角形和梯形主要是依靠border是梯形的特性来做的,有点像相框的那种感觉. 首先我们先给一个正方形设置 ...