Redis——String类型详解

这篇具有很好参考价值的文章主要介绍了Redis——String类型详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

概述

Redis中的字符串直接按照二进制的数据存储,不会有任何的编码转换,因此存放什么样,取出来的时候就什么样。而MySQL默认的字符集是拉丁文,如果插入中文就会失败

Redis中的字符串类型不仅可以存放文本数据,还可以存放整数,JSON,xml,图片,视频,音频等等(但是音频视频的体积很大,Redis中对String类型限制大小为512mb)

常用命令

SET

通过自动补全可以看到set命令的完整语法
Redis——String类型详解,数据库,redis,redis,数据库,缓存
Redis文档中语法格式说明:

符号 解释
[ ] 代表可选项,[ ]和[ ]之间可以同时存在
| 代表或者的意思,多个|只能出现一个

value后面的ex|px代表着过期时间
也就是说

set key value ex 10

等价于

set key value
expire key 10

通过简化代码数量,减少网络通信的次数,提升显效率
并且,一句代码还可以保证原子性,Redis分布式锁中会有所体现,后面的blog会详细讲解
Redis——String类型详解,数据库,redis,redis,数据库,缓存
除此以外,还可以这样写set命令

setnx
setex

如果key存在,新的value覆盖了旧的value,数据的类型可能会被改变,key的生存时间也会失效

演示代码

使用flushall可以清除Redis中所有key
Redis——String类型详解,数据库,redis,redis,数据库,缓存

ex

Redis——String类型详解,数据库,redis,redis,数据库,缓存

nx

Redis——String类型详解,数据库,redis,redis,数据库,缓存

xx

Redis——String类型详解,数据库,redis,redis,数据库,缓存

setnx

setnx key seconds

Redis——String类型详解,数据库,redis,redis,数据库,缓存

setex

setex key value seconds

Redis——String类型详解,数据库,redis,redis,数据库,缓存

psetex

psetex key millionseconds

Redis——String类型详解,数据库,redis,redis,数据库,缓存

GET

获取key对应的value
Redis——String类型详解,数据库,redis,redis,数据库,缓存
需要注意的是,get只适用于字符串类型,如果是其他类型则会报错
Redis——String类型详解,数据库,redis,redis,数据库,缓存

MSET

Redis——String类型详解,数据库,redis,redis,数据库,缓存

一次插入多个键值对,key和value交替写,时间复杂度O(N),N是key的数量

MGET

Redis——String类型详解,数据库,redis,redis,数据库,缓存
一次获取多个value,时间复杂度O(N),N是key的数量
Redis——String类型详解,数据库,redis,redis,数据库,缓存

增减命令

将string类型的value当作数字,进行加减操作,时间复杂度都是O(1)

命令 操作
incr value + 1
incrby value + n
decr value - 1
decrby value - n
incrbyfloat value +/- 小数

incr

incr key

此时的key必须是一个64位内的整数,操作的返回值就是value+1后的结果(相当于++i)
Redis——String类型详解,数据库,redis,redis,数据库,缓存
如果key不是合理整数则报错
Redis——String类型详解,数据库,redis,redis,数据库,缓存
如果直接incr一个不存在的key,那么就会把这个key的value当作0
Redis——String类型详解,数据库,redis,redis,数据库,缓存

incrby

incrby key increment

Redis——String类型详解,数据库,redis,redis,数据库,缓存
同理,如果针对一个不存在的key进行incrby,那么会将这个key的value当作0处理

decr

逻辑和incr一致

decr key 

decrby

逻辑和incrby一致

decrby key decrement

incrbyfloat

其他逻辑和incrby一致,但是由于没有decrbyfloat,因此只能通过incrbyfloat key -n的操作来实现减法

incrbyfloat key increment

append

如果key存在,拼接key对应的value和给定字符串的内容,返回拼接完的字符串有多少个字节(utf8中的一个汉字通常是3个字节)

append key value

Redis——String类型详解,数据库,redis,redis,数据库,缓存
如果key不存在,那么和直接使用set一样
Redis——String类型详解,数据库,redis,redis,数据库,缓存
如果插入汉字,取出的时候客户端不会自动翻译二进制数据,而是将二进制转换为十六进制
Redis——String类型详解,数据库,redis,redis,数据库,缓存
可以在Redis启动的时候加上–raw的选项,就可以解决上述问题了,退出Redis使用ctrl + d
Redis——String类型详解,数据库,redis,redis,数据库,缓存

getrange

相当于Java中的substring,切分value中的部分字符串,范围由start和end确定(左闭右闭区间)

Redis中的下标从1开始,并且支持负数,如果是-1那就代表倒数第一个元素 = len - 1

getrange key start end

Redis——String类型详解,数据库,redis,redis,数据库,缓存
但是,由于中文一般是3个字节,那么在使用getrange后,切割的结果可能不是一个完整的汉字了
Redis——String类型详解,数据库,redis,redis,数据库,缓存

setrange

将字符串中的部分子串替换为别的内容,返回值是替换之后的字符串长度

setrange key offset value

其中的offset是从第几个字节开始替换,替换的长度就是value的长度
Redis——String类型详解,数据库,redis,redis,数据库,缓存
如果对一个不存在的key进行setrange,并不会报错,而是在偏移量之前添加空字节0x00
Redis——String类型详解,数据库,redis,redis,数据库,缓存

同样的,如果value是一段中文,那么setrange可能会出错

strlen

获取字符串的长度,单位是字节,如果value不是string类型,则报错,如果key不存在,返回0

strlen key

Redis——String类型详解,数据库,redis,redis,数据库,缓存

String的编码方式

编码方式 说明
int 64位/8字节的整数
embstr 压缩字符串 小于等于39个字节的字符串
raw 普通字符串 大于39个字节的字符串

通过object encoding key可以查看对应key的编码方式
Redis——String类型详解,数据库,redis,redis,数据库,缓存
在Redis中,存储小数其实和存储一个字符串一样,因此每次对小数进行算数操作,都需要把字符串转换为小数,然后再进行计算,算完再转为小数
Redis——String类型详解,数据库,redis,redis,数据库,缓存

string类型的应用场景

作为缓存直接返回数据

Redis——String类型详解,数据库,redis,redis,数据库,缓存
上述策略中,随着时间推移,越来越多的key从mysql中存入Redis,使Redis的数据变得过多,那么有如下两种解决方案

  1. 设置key的过期时间
  2. Redis提供淘汰策略

计数功能

Redis——String类型详解,数据库,redis,redis,数据库,缓存
Redis中只记录视频的播放次数,并且异步同步数据到统计数据的数据库

共享会话

Redis——String类型详解,数据库,redis,redis,数据库,缓存
http中的cookie是用来实现用户信息的保存的,其需要session的配合完成。服务器这边存储了用户的数据,而cookie是让浏览器存储用户的身份标识(sessionId)

但如果应用了分布式系统,存在多个应用服务器。与用户登录时可能将用户会话信息存储在a服务器中,但是用户下次访问请求可能发送到c服务器中,而c服务器中没有用户的会话信息

解决方法是:所有的服务器都把用户的会话信息存放在Redis中

手机验证码

服务器将用户的手机号当作key,验证码当作value存放在Redis中,并设置过期时间,用户在指定时间内提交验证码给服务器,服务器通过手机号向Redis获得正确的验证码,并与用户发送过来的进行比对,返回true或false文章来源地址https://www.toymoban.com/news/detail-649188.html

到了这里,关于Redis——String类型详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Redis如何保证缓存和数据库一致性?

    现在我们在面向增删改查开发时,数据库数据量大时或者对响应要求较快,我们就需要用到Redis来拿取数据。 Redis:是一种高性能的内存数据库,它将数据以键值对的形式存储在内存中,具有读写速度快、支持多种数据类型、原子性操作、丰富的特性等优势。 优势: 性能极高

    2024年01月16日
    浏览(70)
  • Redis---数据库和缓存如何保证一致性?

    用「读 + 写」请求的并发的场景来分析: 假如某个用户数据在缓存中不存在,请求 A 读取数据时从数据库中查询到年龄为 20,在未写入缓存中时另一个请求 B 更新数据。它更新数据库中的年龄为 21,并且清空缓存。这时请求 A 把从数据库中读到的年龄为 20 的数据写入到缓存

    2024年01月24日
    浏览(57)
  • 整理redis写入string类型的缓存的方法

    第一种存储方式:JSON方法 可以使用Redis的序列化方法将数组转换为字符串,然后将其写入Redis中的String类型缓存。常见的序列化方法有JSON和PHP自带的序列化函数serialize和unserialize。 以下是一个示例代码,将一个数组写入Redis中: 读取缓存时,需要将字符串反序列化为原始的数

    2024年02月07日
    浏览(41)
  • Redis如何保障缓存与数据库的数据一致性问题?

    目录 一.最经典的数据库加缓存的双写双删模式 二. 高并发场景下的缓存+数据库双写不一致问题分析与解决方案设计 三、上面高并发的场景下,该解决方案要注意的问题 1.1 Cache Aside Pattern概念以及读写逻辑 (1)读的时候,先读缓存,缓存没有的话,那么就读数据库,然后取

    2023年04月21日
    浏览(49)
  • 数据库缓存服务——NoSQL之Redis配置与优化

    目录 一、缓存概念 1.1 系统缓存 1.2 缓存保存位置及分层结构 1.2.1 DNS缓存 1.2.2 应用层缓存 1.2.3 数据层缓存 1.2.4 硬件缓存 二、关系型数据库与非关系型数据库 2.1 关系型数据库 2.2 非关系型数据库 2.3 关系型数据库和非关系型数据库区别: 2.4 非关系型数据库产生背景 2.5 总结

    2024年02月15日
    浏览(50)
  • Redis数据库 | 发布订阅、主从复制、哨兵模式、缓存雪崩

    💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! Redis 发布订阅 (pub/sub) 是一种消息通信模式:发送者 (pub) 发送消息,订阅者 (sub) 接收消息 Redis 客户端可以订阅任意数量的频道 Redis主从复制是指在Redis中设置一个主节点(Master)和一个或多个从节点(Slave),

    2024年02月15日
    浏览(57)
  • Springboot+Redis:实现缓存 减少对数据库的压力

    🎉🎉欢迎光临,终于等到你啦🎉🎉 🏅我是苏泽,一位对技术充满热情的探索者和分享者。🚀🚀 🌟持续更新的专栏 Redis实战与进阶 本专栏讲解Redis从原理到实践 这是苏泽的个人主页可以看到我其他的内容哦👇👇 努力的苏泽 http://suzee.blog.csdn.net/   目录 缓存如何实现?

    2024年03月24日
    浏览(59)
  • redis面试题目-如何保证数据库与缓存的数据一致性

    原视频:https://www.bilibili.com/video/BV1Km4y1r75f?p=62vd_source=fa75329ae3880aa55609265a0e9f5d34 由于缓存和数据库是分开的,无法做到原子性的同时进行数据修改,可能出现缓存更新失败,或者数据库更新失败的情况,这时候会出现数据不一致,影响前端业务 先更新数据库,再更新缓存。缓

    2024年02月05日
    浏览(64)
  • Redis缓存MySQL数据库存储二者如何保证数据一致性

    在大型互联网应用中,由于数据库读写频繁、压力大等原因,我们通常会使用缓存来减少数据库的访问次数,提高系统的性能。而Redis作为一个高性能的内存数据库,成为了缓存的首选方案之一。但是,缓存和数据库之间存在数据一致性的问题,如何解决这个问题呢?本文将

    2023年04月19日
    浏览(52)
  • 如何保证Redis缓存和数据库的一致性问题

    熟练掌握Redis缓存技术? 那么请问Redis缓存中有几种读写策略,又是如何保证与数据库的一致性问题 今天来聊一聊常用的三种缓存读写策略 首先我们来思考一个问题 写 先更新缓存 再更新数据库 首先如果缓存更新成功但数据库更新失败,会导致数据不一致的问题 其次当请求

    2024年02月14日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包