设为首页 收藏本站
查看: 1036|回复: 0

[经验分享] 构建高性能数据库缓存之redis(二)

[复制链接]

尚未签到

发表于 2018-11-7 07:39:12 | 显示全部楼层 |阅读模式
一、概述
  在构建高性能数据库缓存之redis(一)这篇文档中,阐述了Redis数据库(key/value)的特点、功能以及简单的配置过程,相信阅读过这篇文档的朋友,对Redis数据库会有一点的了解,此篇文档将讲解对Redis数据库的数据类型字符串(String)的操作,当然Redis支持的数据类型不只一种,还有哈希(Hashs)、列表(Lists)、集合(Sets)、有序集合(Sorted Sets),在后续的篇章逐一介绍。
二、字符串(String)
  字符串(String)是Redis数据库中最简单的类型,一个Key对应一个Value,其上支持的操作与Memcached的操作类似,但Redi的功能比Memcached更丰富,其次String类型是二进制安全的,可以包含任何数据。
三、String命令详解与示例
SET
  功能:设置一个key的value值;
  语法:SET Key value
  示例:
127.0.0.1:6379>SET mykey "sunnybody"  
OK
  
127.0.0.1:6379>GET mykey
  
"sunnybody"
  提示:如果设置的可以存在,它将会覆盖原有的value值,示例如下:
GET
  功能:获取一个key的值
  语法:GET Key
  示例:
127.0.0.1:6379>SET str "hello world"  
OK
  
127.0.0.1:6379>GET str
  
"helloworld"
SETNX
  功能:设置key的value值,只有当设置的key存在时,不做任何操作;
  语法:SETNX Key value
  示例:
127.0.0.1:6379>SETNX id 1005  
(integer) 1
  
127.0.0.1:6379>SETNX id 1006
  
(integer) 0
  
127.0.0.1:6379>GET id
  
"1005"
  #提示:如上所示,当设置的key存在,输出数字0;key不存在,输出数字1;
SETEX
  功能:设置key的value值,并设置Key在给定seconds时间之后的过期时间;
  语法:SETEX Key seconds value
  示例:
127.0.0.1:6379>SETEX name 20 MySQL  
OK
  
127.0.0.1:6379>TTL name
  
(integer) 15
  
127.0.0.1:6379>GET name
  
"MySQL"
  
127.0.0.1:6379>TTL name
  
(integer) -2
  
127.0.0.1:6379>GET name
  
(nil)
  #提示:我们设置Key的value值会在20秒后过期,可以通过TTL获取key的有效时间,如果TTL获取的值为-2,则标明key已经过期,所以当执行GET操作时,会输出一个nil值,表示为空;
SETRANGE
  功能:覆盖key对应value值的一部分,将从指定的offset处开始,覆盖value的值,并显示value原始值得长度;
  语法:SETRANGE Key offset value
  示例:
127.0.0.1:6379>SET email "MariaDB@yahoo.com"  
OK
  
127.0.0.1:6379>GET email
  
"MariaDB@yahoo.com"
  
127.0.0.1:6379>SETRANGE email 8 sina.com
  
(integer) 17
  
127.0.0.1:6379>GET email
  
MariaDB@sina.comm
  #提示:从示例中可以看出MariaDB@yahoo.com字符串的长度为17,从指定的第8个字符开始将value的值覆盖sina.com,如果覆盖的值小于原始的值,将会被保存,所以输出的结果将为MariaDB@sina.comm;
GETRANGE
  功能:返回key对应value值的子串,子串的位置是由start和end决定的;在Redis2.0之前版本命令为SUBSTR,现替换为GETRANGE;
  语法:GETRANGE Key start end
  示例:
127.0.0.1:6379>SET address 'bei jing shi'  
OK
  
127.0.0.1:6379>STRLEN address
  
(integer) 12
  
127.0.0.1:6379>GETRANGE address 0 7
  
"beijing"
  
127.0.0.1:6379>GETRANGE address -12 -5
  
"beijing"
  
127.0.0.1:6379>GETRANGE address 0 -1
  
"bei jingshi"
  #提示:通过命令STRLEN获取key对应字符串Value的长度,长度以0开始,-1结束;-1表示字符串Value的最后一个字符,-2为第二个字符以此类推;
MSET
  功能:设置多个KEY的Value值,如果你设置的KEY存在,MSET将会替换原始KEY的Value值;
  语法:MSET key value [ key value …………………. ]
  示例:
127.0.0.1:6379>SET USER MySQL  
OK
  
127.0.0.1:6379>GET USER
  
"MySQL"
  
127.0.0.1:6379>MSET ID 1001 USER "MariaDB" IPhone 18210089932 ADDRESS "BeiJing"
  
OK
  
127.0.0.1:6379>GET USER
  
"MariaDB"
  
127.0.0.1:6379>GET ADDRESS
  
"BeiJing"
  #提示:从示例可以看出USER对应Value的值为MySQL,通过执行MSET的操作,USER的值已被替换为MariaDB;
MGET
  功能:返回所有指定KEY的Value值
  语法:MGET Key [ key2 key3 ……… ]
  示例:
127.0.0.1:6379>MSET ID 1001 USER "MariaDB" IPhone 18210089932 ADDRESS "BeiJing"  
OK
  
127.0.0.1:6379>MGET ID USER IPhone ADDRESS CITY
  
1)"1001"
  
2)"MariaDB"
  
3)"18210089932"
  
4) "BeiJing"
  
5) (nil)
  #提示:KEY的定义具有实际的意义,且每个KEY对应的Value值都不同,如果指定的KEY不存在,输出信息将返回特殊字符nil,即为空;
MSETNX
  功能:设置多个KEY的Value值,当有一个key已经存在,MSETNX则不会执行此次操作。基于这种特性,MSETNX可以实现要么所有的操作都成功,要么一个都不执行,这样可以用来设置不同的key,来表示一个唯一的对象的不同字段。
  语法:MSETNX Key Value [ key2 value key3 value………….. ]
  示例:
127.0.0.1:6379>FLUSHALL  
OK
  
127.0.0.1:6379>SET USER MariaDB
  
OK
  
127.0.0.1:6379>MSETNX ID 1001 USER "MariaDB" IPhone 18210089932 ADDRESS "BeiJing"
  
(integer) 0
  
127.0.0.1:6379>GET ID
  
(nil)
  
127.0.0.1:6379>MSETNX ID 1001 IPhone 18210089932 ADDRESS "Bei Jing"
  
(integer) 1127.0.0.1:6379>MGET ID IPhone ADDRESS
  
1)"1001"
  
2)"18210089932"
  
3) "BeiJing"
  #提示:通过FLUSHALL清除了所有的KEY,从示例中可以看出,当执行MSETNX设置多个KEY的Value值时,只要有一个KEY是存在的,此次操作执行失败,返回值为0;否则操作成功,返回值为1;
GETSET
  功能:设置KEY的Value值,且返回旧KEY对应字符串的Value值
  语法:GETSET Key Value
  示例:
127.0.0.1:6379>SET USER MariaDB  
OK
  
127.0.0.1:6379>GETSET USER MySQL
  
"MariaDB"
  
127.0.0.1:6379>GET USER
  
"MySQL"
  #提示:对于GETSET命令,官方的设计模式是结合INCR命令一起使用,实现支持重置的计数功能。举个例子:每当有事件发生的时候,一段程序都会调用INCR给key mycounter加1,但是有时我们需要获取计数器的值,并且自动将其重置为0。这可以通过GETSET mycounter "0"来实现,如下所示:
127.0.0.1:6379>SET mycounter 30  
OK
  
127.0.0.1:6379>INCR mycounter
  
(integer) 31
  
127.0.0.1:6379>GETSET mycounter 0
  
"31"
DECR
  功能:对Key对应的数字减法操作,每次减1,且Value的值不能是字符串或则超过取值范围;
  语法:DECR Key
  示例:
127.0.0.1:6379>SET key1 25  
OK
  
127.0.0.1:6379>DECR key1
  
(integer) 24
  
127.0.0.1:6379>DECR key1
  
(integer) 23
  
127.0.0.1:6379>GET key1
  
"23"
INCR
  功能:对Key对应的数字做加法操作,每次加1,且Value的值不能是字符串或则超过取值范围;
  语法:INCR key
  示例:
127.0.0.1:6379>SET key1 25  
OK
  
127.0.0.1:6379>INCR key1
  
(integer) 26
  
127.0.0.1:6379>INCR key1
  
(integer) 27
  
127.0.0.1:6379>GET key1
  
"27"
DECRBY
  功能:对Key对应的数字做减法操作,每次减去指定的数字,且Value的值不能是字符串或则超过取值范围;
  语法:DECRBY Key
  示例:
127.0.0.1:6379>SET key1 25  
OK
  
127.0.0.1:6379>DECRBY key1 5
  
(integer) 20
  
127.0.0.1:6379>DECRBY key1 5
  
(integer) 15
  
127.0.0.1:6379>GET key1
  
"15"
INCRBY
  功能:对Key对应的数字做加法操作,每次加上指定的数字,且Value的值不能是字符串或则超过取值范围;
  语法:INCRBY Key
  示例:
127.0.0.1:6379>SET key1 25  
OK
  
127.0.0.1:6379>INCRBY key1 5
  
(integer) 30
  
127.0.0.1:6379>INCRBY key1 5
  
(integer) 35
  
127.0.0.1:6379>GET key1
  
"35"
STRLEN
  功能:返回KEY的value值长度,只用作string类型;
  语法:STRLEN Key
  示例:
127.0.0.1:6379>SET NAME MariaDB  
OK
  
127.0.0.1:6379>STRLEN NAME
  
(integer) 7
APPEND
  功能:追加Key对应Value的值,并返回value值的长度;
  语法:APPEND Key value
  示例:
127.0.0.1:6379>SET Email MariaDB@  
OK
  
127.0.0.1:6379>APPEND Email yahoo.com
  
(integer) 17
  
127.0.0.1:6379>GET Email
  
"MariaDB@yahoo.com"
  
127.0.0.1:6379>APPEND Qmail sunnybody@sina.com.cn
  
(integer) 21
  
127.0.0.1:6379>GET Qmail
  
sunnybody@sina.com.cn
  #提示:如果指定的key不存在,那么它将先创建一个空字符串的key,再执行追加操作,这种情况APPEND将类似于SET操作。



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-631693-1-1.html 上篇帖子: 检查一台服务器上多个区服的redis配置脚本 下篇帖子: 通过Keepalived实现Redis Failover自动故障切换
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表