前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >redis字符串类型详解及应用场景分析

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

作者头像
章鱼喵
发布2018-06-27 15:21:03
4420
发布2018-06-27 15:21:03
举报
文章被收录于专栏:codingcoding

常用命令

设置值

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

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

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

代码语言:javascript
复制
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

代码语言:javascript
复制
127.0.0.1:6379> get hello
"redis"
127.0.0.1:6379> get test
(nil)

批量设置与获取值

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

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
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个字节

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
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是否过期,如果不过期就给予友好提示。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017.12.08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 常用命令
    • 设置值
      • 获取值
        • 批量设置与获取值
          • 计数
          • 其他指令
            • 追加值
              • 字符串长度
                • 设置新值并返回原始值
                  • 设置指定位置的字符
                    • 获取部分字符串
                    • 时间复杂度有
                    • 应用场景
                      • 缓存功能
                        • 共享session
                          • 限速
                          相关产品与服务
                          云数据库 Redis
                          腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
                          领券
                          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档