• 构建高性能数据库缓存之redis(二)


    一、概述

    在构建高性能数据库缓存之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

    示例:

    1
    2
    3
    4
    127.0.0.1:6379>SET mykey "sunnybody"
    OK
    127.0.0.1:6379>GET mykey
    "sunnybody"

    提示:如果设置的可以存在,它将会覆盖原有的value值,示例如下:

    GET

    功能:获取一个key的值

    语法:GET Key

    示例:

    1
    2
    3
    4
    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

    示例:

    1
    2
    3
    4
    5
    6
    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

    示例:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    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

    示例:

    1
    2
    3
    4
    5
    6
    7
    8
    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

    示例:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    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 …………………. ]

    示例:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    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 ……… ]

    示例:

    1
    2
    3
    4
    5
    6
    7
    8
    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………….. ]

    示例:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    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

    示例:

    1
    2
    3
    4
    5
    6
    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"来实现,如下所示:

    1
    2
    3
    4
    5
    6
    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

    示例:

    1
    2
    3
    4
    5
    6
    7
    8
    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

    示例:

    1
    2
    3
    4
    5
    6
    7
    8
    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

    示例:

    1
    2
    3
    4
    5
    6
    7
    8
    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

    示例:

    1
    2
    3
    4
    5
    6
    7
    8
    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

    示例:

    1
    2
    3
    4
    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

    示例:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    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操作。

    本文出自 “一步一脚印,从运维到DBA” 博客,请务必保留此出处http://cfwlxf.blog.51cto.com/3966339/1428220

  • 相关阅读:
    Managing C++ Objects: 管理C++对象 —— 一些建议准则
    像Java一样管理对象:T&形式仅仅用在参数传递
    Visual Studio的语法着色终于调得赏心悦目
    j.u.c: Java并发包的5大块
    笔记:Java Language Specification
    线程与锁
    分布式系统涉及的基本问题
    微服务为什么是一种趋势
    js实现复制功能
    css label两端对齐
  • 原文地址:https://www.cnblogs.com/wajika/p/6627230.html
Copyright © 2020-2023  润新知