构建高性能数据库缓存之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
构建高性能数据库缓存之redis(二)的更多相关文章
- 构建高性能数据库缓存之redis主从复制
一.什么是redis主从复制? 主从复制,当用户往Master端写入数据时,通过Redis Sync机制将数据文件发送至Slave,Slave也会执行相同的操作确保数据一致:且实现Redis的主从复制 ...
- 构建高性能数据库缓存之Redis(一)
一.Redis概述 1.1 什么是redis Redis是一个开源的用ANSI C编写.支持网络.基于内存.亦可持久化的日志型.Key-Value数据库,根据DB-Engines.com站点月度排行的 ...
- 【原创】构建高性能ASP.NET站点之二 优化HTTP请求(前端)
原文:[原创]构建高性能ASP.NET站点之二 优化HTTP请求(前端) 构建高性能ASP.NET站点之二 优化HTTP请求(前端) 前言: 这段时间比较的忙,文章写不是很勤,希望大家谅解. 上一篇文 ...
- 数据库缓存mybatis,redis
简介 处理并发问题的重点不在于你的设计是怎样的,而在于你要评估你的并发,并在并发范围内处理.你预估你的并发是多少,然后测试r+m是否支持.缓存的目的是为了应对普通对象数据库的读写限制,依托与nosql ...
- 缓存中间件-Redis(二)
在上一篇中我们简单总结和介绍了Redis的几个方面 1.使用Redis背景 2.Redis通信多路复用的基本原理 3.Redis基本数据结构 4.Redis持久化方式 这一篇我们使用简单的业务场景来介 ...
- 【原创】构建高性能ASP.NET站点之三 细节决定成败
原文:[原创]构建高性能ASP.NET站点之三 细节决定成败 构建高性能ASP.NET站点之三 细节决定成败 前言:曾经就因为一个小小的疏忽,从而导致了服务器崩溃了,后来才发现:原来就是因为一个循环而 ...
- 【原创】构建高性能ASP.NET站点之一 剖析页面的处理过程(前端)
原文:[原创]构建高性能ASP.NET站点之一 剖析页面的处理过程(前端) 构建高性能ASP.NET站点之一 剖析页面的处理过程(前端) 前言:在对ASP.NET网站进行优化的时候,往往不是只是懂得A ...
- 【原创】构建高性能ASP.NET站点 开篇
原文:[原创]构建高性能ASP.NET站点 开篇 构建高性能ASP.NET站点 开篇 前言:有段时间没有写ASP.NET的东西了,心里总是觉得缺少了什么,毕竟自己对ASP.NET还是情有独钟的. 在本 ...
- 【原创】构建高性能ASP.NET站点 第六章—性能瓶颈诊断与初步调优(下前篇)—简单的优化措施
原文:[原创]构建高性能ASP.NET站点 第六章-性能瓶颈诊断与初步调优(下前篇)-简单的优化措施 构建高性能ASP.NET站点 第六章—性能瓶颈诊断与初步调优(下前篇)—简单的优化措施 前言:本篇 ...
随机推荐
- 论文列表——text classification
https://blog.csdn.net/BitCs_zt/article/details/82938086 列出自己阅读的text classification论文的列表,以后有时间再整理相应的笔 ...
- 本地时间转化成 GMT 时间
DateTime.Now.ToUniversalTime().ToString("yyMMddHHmmss");
- wifidog 源码初分析(3)-转
上一篇分析了 接入设备 在接入路由器,并发起首次 HTTP/80 请求到路由器上时,wifidog 是如何将此 HTTP 请求重定向至 auth-server 的流程. 之后 接入设备 的浏览器接收到 ...
- FreeType的项目总是报error LNK2019: unresolved external symbol __imp错误
用vs2013建立了一个c++的项目,然后在根目录放置了freetype.lib,将GitHub上面的include文件夹拷贝到本机,并且在VS中设置了额外包含目录指向这个inluce文件夹,然后将f ...
- 解剖 CPU(另)
http://itbbs.pconline.com.cn/notebook/11026377.html 话不多说,这个处理器,就是今天我们要厮杀的对象! 1. 案板上的她,静静等等手术的进行! 2. ...
- iOS 开发者证书总结 in-house
iOS 证书分两种类型. 第一种为$99美元的,这种账号有个人和公司的区别,公司账号能创建多个子账号,但个人的不能.这种账号可以用来上传app store 第二种为¥299美元的,这种账号只能用于企业 ...
- javascript constrator and prototype
揭开js之constructor属性的神秘面纱 在js里面当new了一个对象时,这中间发生了什么? MDN - new运算符 当代码 new foo(...) 执行时: 一个新对象被创建.它继承自fo ...
- SDUT 1269-走迷宫(DFS打印路径)
走迷宫 Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描写叙述 有一个m*n格的迷宫(表示有m行.n列),当中有可走的也有不可走的,假 ...
- 简单的tcp聊天
package com.pers.tcptest; import java.io.IOException; import java.io.InputStream; import java.io.Out ...
- JavaWeb开发之网站实现文件上传功能
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6073505.html 一个功能完善的JavaWeb应用,必不可少的一个功能就是文件的上传.无论是用户的 ...