redis字符串类型详解及应用场景分析

常用命令

设置值

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

选项说明: ex seconds 设置秒级过期时间 px milliseconds 设置毫秒级过期时间 nx 键不存在时才设置成功,用于添加 xx 键存在时才设置成功,用于更新

除了set选项,redis还提供了setnx,作用与nx选项相同

127.0.0.1:6379> exists hello
(integer) 0
127.0.0.1:6379> set hello world
OK
127.0.0.1:6379> setnx hello redis
(integer) 0
127.0.0.1:6379> set hello redis xx
OK
127.0.0.1:6379> get hello
"redis"

获取值

get key

键不存在返回nil

127.0.0.1:6379> get hello
"redis"
127.0.0.1:6379> get test
(nil)

批量设置与获取值

mset key value [key value ...] mget key [key ...]

127.0.0.1:6379> mset a 1 b 2 c 3 d 4
OK
127.0.0.1:6379> mget a b c d
1) "1"
2) "2"
3) "3"
4) "4"

批量操作命令可以有效提高效率,减少因为多条命令执行而产生的网络传输时间

计数

incr key incr命令用于对值做自增操作,结果分为: 值不是整数,返回错误 值是整数,返回自增后的结果 键不存在,按照值为0自增,返回结果为1

127.0.0.1:6379> exists num
(integer) 0
127.0.0.1:6379> incr num
(integer) 1
127.0.0.1:6379> incr num
(integer) 2
127.0.0.1:6379> set hello world
OK
127.0.0.1:6379> incr hello
(error) ERR value is not an integer or out of range

除了incr,redis还提供了decr(自减), incrby(自增指定数字), decrby(自减指定数字), incrbyfloat(自增浮点数)

decr key incrby key increment decrby key decrement incrbyfloat key increment

其他指令

追加值

append key value

127.0.0.1:6379> get name
"redis"
127.0.0.1:6379> append name course
(integer) 11
127.0.0.1:6379> get name
"rediscourse"

字符串长度

strlenkey 每个中文占3个字节

127.0.0.1:6379> set hello '世界'
OK
127.0.0.1:6379> strlen hello
(integer) 6
127.0.0.1:6379> get name
"rediscourse"
127.0.0.1:6379> strlen name
(integer) 11

设置新值并返回原始值

getset key value

127.0.0.1:6379> del hello
(integer) 1
127.0.0.1:6379> getset hello world
(nil)
127.0.0.1:6379> getset hello redis
"world"

设置指定位置的字符

setrange key offset value

127.0.0.1:6379> set redis pest
OK
127.0.0.1:6379> setrange redis 0 b
(integer) 4
127.0.0.1:6379> get redis
"best"

获取部分字符串

getrange key start end

127.0.0.1:6379> getrange redis 0 1
"be"

时间复杂度有

字符串相关指令的时间复杂度

image.png

应用场景

缓存功能

典型的使用:mysql作为存储层,redis作为缓存层,用户获取数据首先从缓存层获取,如果缓存失效或者不命中,再去mysql获取数据,并更新redis缓存。这样绝大部分的数据都是从redis获取,能有效地降低mysql的压力

redis键名设置规范:推荐用"业务名:对象名:id:[属性]"作为键名。 如mysql的数据库名为vs,用户表名为user,那么对应的键可以用"vs:user:1:name"来表示 在能描述键含义的前提下适应减少键的长度,减少由于键过长的内存浪费

共享session

分布式的web服务将用户的session信息保存在各自的服务器,在负载均衡的分发下,用户在访问页面时会请求到不同的服务器上,由于session不一致,用户的登录信息不能同步,导致用户需要重新登录。 解决方案:将用户的session统一存入redis进入集中管理

限速

为了防止用户频繁地进行某些操作,可能通过redis的过期时间对用户行为进行限制。如限制用户每隔3秒才能进行一次搜索,当用户发起搜索后,就将key设置过期时间为3秒,再次请求时检查key是否过期,如果不过期就给予友好提示。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏转载gongluck的CSDN博客

cocos2dx 打灰机

#include "GamePlane.h" #include "PlaneSprite.h" #include "BulletNode.h" #include...

5676
来自专栏我和未来有约会

Silverlight第三方控件专题

这里我收集整理了目前网上silverlight第三方控件的专题,若果有所遗漏请告知我一下。 名称 简介 截图 telerik 商 RadC...

4055
来自专栏落花落雨不落叶

canvas画简单电路图

65111
来自专栏张善友的专栏

LINQ via C# 系列文章

LINQ via C# Recently I am giving a series of talk on LINQ. the name “LINQ via C...

2675
来自专栏Ceph对象存储方案

Luminous版本PG 分布调优

Luminous版本开始新增的balancer模块在PG分布优化方面效果非常明显,操作也非常简便,强烈推荐各位在集群上线之前进行这一操作,能够极大的提升整个集群...

3255
来自专栏跟着阿笨一起玩NET

c#实现打印功能

2902
来自专栏张善友的专栏

Miguel de Icaza 细说 Mix 07大会上的Silverlight和DLR

Mono之父Miguel de Icaza 详细报道微软Mix 07大会上的Silverlight和DLR ,上面还谈到了Mono and Silverligh...

2727
来自专栏大内老A

The .NET of Tomorrow

Ed Charbeneau(http://developer.telerik.com/featured/the-net-of-tomorrow/) Exciti...

32610
来自专栏张善友的专栏

Silverlight + Model-View-ViewModel (MVVM)

     早在2005年,John Gossman写了一篇关于Model-View-ViewModel模式的博文,这种模式被他所在的微软的项目组用来创建Expr...

3028
来自专栏陈仁松博客

ASP.NET Core 'Microsoft.Win32.Registry' 错误修复

今天在发布Asp.net Core应用到Azure的时候出现错误InvalidOperationException: Cannot find compilati...

4878

扫码关注云+社区