专题二:redis的数据类型之string
一、redis的数据存储格式
- redis本身是一个Map,其中所有的数据都是采用 ”key:value“的方式进行存储的。
- 我们说的数据类型是数据存储的类型,也就是对应下图的value,key部分永远是字符串
二、string类型
2.1 基本说明
- 存储的是单个数据,是最简单的数据存储类型
- 存储数据的格式:一个空间存储一个数据
- 保存内容:通常使用字符串,如果字符串的内容是纯数字,可以当数字用,但本质还是一个字符串
2.2 基本操作
功能 | 命令 | 说明 |
添加/修改数据 | set key value | 如果set已经有的key会覆盖之前的值 |
获取数据 | get key | 获取不存在的key返回null |
删除数据 | del key | 删除一个存在的key返回1,删除成功;删除一个不存在的key返回0,删除失败 |
添加/修改多个数据 | mset key1 value1 key2 value2 ... | |
获取多个数据 | mget key1 key2 | |
获取数据字符个数(字符串长度) | strlen key | |
追加信息到原始信息内部 | append key value | 如果原始信息存在就追加,否则就创建;返回的是value对应的长度 |
对于单数据操作和多数据操作的选择问题:
先来想一下,一条指令的执行过程,指令要发送给服务器,服务器处理之后,还要返回给客户端,这里可以看作是三个处理时间;假如是三条或者更多指令呢?至少一次回一个数据结果比回100个数据结果还是有差别的。当然并不是绝对要用哪一个,数据量小其实差别不大,如果数据量又足够特别大,最好还是要找到一个合适点进行数据切割再执行,毕竟之前就提及到redis的单线程工作,不能阻塞到那里。
2.3 扩展操作
(1)场景一:分库分表的主键唯一ID,我们不能每个表控制自己的主键ID,怎么办呢?
解决方案:
- 设置数值数据增加指定范围的值
功能 | 命令 | 其他说明 |
对数值增 | incr key | 一次增1 |
指定增加数值 | incrby key increment | |
可以增加小数 | incrbyfloat key increment |
- 设置数值数据减少指定范围的值
功能 | 命令 | 其他说明 |
对数值进行减操作 | decr key | 一次减少1 |
指定减少数值 | decrby key increment |
说明:
- string在redis内部默认就是一个字符串,当遇到增减类操作的时候,会转换为数值进行运算;
- redis的操作都是原子性的,采用单线程处理;
- 按数值进行操作的数据,如果原始数据不能转换为数值,或者超过redis的数值上限范围,将报错。最大值:Long.MAX_VALUE
(2)场景二:微信投票,1小时候至多投一次;或者电商中每种商品3天热门,3天后下架;热点新闻等
解决:
- 设置数据具有指定的生命周期
功能 | 命令 | 其他说明 |
设置指定key存活时间 | set key seconds value | 单位秒 |
设置指定key存活时间 | psetex key milliseconds value | 单位毫秒 |
(3)场景3:新浪微博存储某个明星的粉丝数和微博数,这里用string怎么存呢?
解决:
- set user:id:012345:fans 123456789 set user:id:012345:blogs 6790
- 采用json的方式:set user:id:012345 {id:012345, blogs:6790, fans:123456789}
- 扩展:当然也有可能你会想到hash,本节不做讨论,下一节描述
2.4 redis key的命名规范
表名:主键名:主键ID:字段名
2.5 对于string操作的小结
- 对于数据操作成功失败的差异,表示运行结果是否成功,0代表失败或者false,1代表成功或者true
- 数据未获取到,返回nil,等同于null
- 数据最大存储量:512MB
- 数值计算存在最大范围:Long.MAX_VALUE
这一篇就到这里,下一篇写redis数据类型之hash。
专题二:redis的数据类型之string的更多相关文章
- Redis系列(二):Redis的数据类型及命令操作
原文链接(转载请注明出处):Redis系列(二):Redis的数据类型及命令操作 Redis 中常用命令 Redis 官方的文档是英文版的,当然网上也有大量的中文翻译版,例如:Redis 命令参考.这 ...
- redis 五大数据类型之string篇
一: 1:string(字符串) string是redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value. string类型是二进制安全的.意思是redis ...
- Redis基本数据类型以及String(一)
前言: Redis也有自己的数据类型,包含string,list,hash,set,sorted set.下面就对每种数据类型原理以及操作做一个详细的介绍. Redis是面向编程的语言 ...
- Redis的数据类型之String
Redis主要支持的数据类型有5种:String ,Hash ,List ,Set ,和 Sorted Set. Redis数据类型String string类型在redis中是最常见的类型,valu ...
- redis 基本数据类型-字符串(String)
不瘦原来对redis也是有个大概的了解(就你知道的多), 但是最近和大神聊天的过程中才明白自己知道的简直就是鸡毛蒜皮(让你得瑟),所以不瘦打算从头在捋一遍,顺便把过程也记录下来,如果能给大家在学习re ...
- redis(二)-----redis基本数据类型之字符串
Redis的全称是REmote Dictionary Server,它主要提供了5种数据结构:字符串.哈希.列表.集合.有序集合,同时在字符串的基础之上演变 出了位图(Bitmaps)和HyperLo ...
- Redis常用数据类型及各种数据类型应用和实现方式
Redis常用数据类型: StringHashListSetSorted set 在具体描述这几种数据类型之前,我们先通过一张图了解下Redis内部内存管理中是如何描述这些不同数据类型的: 首先Red ...
- Redis的数据类型及其常用命令
快速入门Redis 首先安装redis: windows下安装redis Linux下安装redis 1. 什么是redis Redis属于nosql(非关系型数据库) 关系型数据库是基于关系表的数据 ...
- redis基本数据类型和对应的底层数据结构
Redis的数据类型包含string,list,hash,set,sorted set. Redis中定义了一个对象的结构体: /* * Redis 对象 */ typedef struct redi ...
随机推荐
- python3-day5
模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要多个函数才 ...
- 第一次的博客-简单的Markdown语法
第一次开通博客 从网上寻找了许多写博客的方法 我觉得对于我来说还是使用 Markdowm 比较容易一些 用我的第一篇博客来记一下一些比较简单常用的Markdown语法 本文参考来源Markdown语法 ...
- 《Head First 设计模式》:代理模式
正文 一.定义 代理模式为另一个对象提供一个替身或占位符以控制对这个对象的访问. 要点: 代理模式为一个对象创建了代理对象,让代理对象控制对该对象的访问.被代理的对象可以是远程的对象.创建开销大的对象 ...
- 高并发场景-请求合并(一)SpringCloud中Hystrix请求合并
背景 在互联网的高并发场景下,请求会非常多,但是数据库连接池比较少,或者说需要减少CPU压力,减少处理逻辑的,需要把单个查询,用某些手段,改为批量查询多个后返回. 如:支付宝中,查询"个人信 ...
- spring ioc 源码分析(三)--finishBeanFactoryInitialization(beanFactory)
之前的博客专门分析了一个类到BeanDefinition的创建过程,现在分析BeanDefinition 到一个bean的创建过程:从refresh() 方法的---->finishBeanFa ...
- 欧拉函数线性求解以及莫比乌斯反演(Mobius)
前言 咕咕了好久终于来学习莫反了 要不是不让在机房谁会发现数学一本通上有这么神奇的东西 就是没有性质的证明 然后花了两节数学课证明了一遍 舒服- 前置知识:欧拉函数,二项式定理(组合数) 会欧拉函数的 ...
- Java面试题之计算字符/字符串出现的次数
一.计算字符在给定字符串中出现的次数 二.计算字符串在给定字符串中出现的次数 1 import java.util.HashMap; 2 import java.util.Map; 3 4 publi ...
- Centos-gizp压缩文件-gzip gunzip
gzip gunzip 将一般文件进行压缩或者解压,默认扩展名为 .gz, 本质上 gunzip是gzip硬链接,压缩和解压都可以通过gzip完成 gzip 相关选项 -d 解压 -r 递归压缩目录下 ...
- Leetcode-二分
69. x的平方根 https://leetcode-cn.com/problems/sqrtx/ 实现 int sqrt(int x) 函数. 计算并返回 x 的平方根,其中 x 是非负整数. 由于 ...
- sklearn训练模型的保存与加载
使用joblib模块保存于加载模型 在机器学习的过程中,我们会进行模型的训练,最常用的就是sklearn中的库,而对于训练好的模型,我们当然是要进行保存的,不然下次需要进行预测的时候就需要重新再进行训 ...