前言

简单介绍一下redis的基本结构和命令。

正文

redis有5种基本结构:

  1. 字符串

  2. 哈希

  3. 列表

  4. 集合

  5. 有序集合

那么就来看下其基本命令吧。

通用命令键:

  1. keys * 查看全部键,一般不怎么用。

  2. dbsize 查看有多少键

dbsize 效率比较高,直接读取的redis内部缓存的值。

  1. exits key 查看是否存在该键。

  2. del key 删除某个键。

  1. 设置键过期 expire key seconds

  2. ttl 查看键过期时间

ttl 有3种返回值:

  1. 大于0或者等于0 为键的过期时间

  2. -1 键没有设置过期时间

  3. -2 键不存在

  1. type 查看键的类型

前面提及到了数据结构。

但是数据结构也有内部编码这个东西。

举个例子,比如说list 数据结构,有两种数据编码 linkedlist 和 ziplist 两种内部编码。

那么如何来查看数据编码呢?

可以通过object encoding testlist 来查看

内部编码:

那么内部编码有什么作用呢?

  1. 内部编码只是针对redis 内部的,对外部基本无感。

  2. 每种内部编码适合不同的场景,比如说ziplist比较节约内存,linkedlist 性能好一些,可以针对不同的需求,做不同的事情。

然后来谈论一下为什么redis是单线程的原因。

很多时候我们会说多线程的利用率更高,这是针对多核的情况。

而我们现在基本上都是多核,那么为什么是单线程呢?

因为redis的优势在于热数据,什么是热数据呢? 就是操作比较频繁。

那么对于多线程来说,操作频繁是要加锁的,这里面的机制比较消耗性能。

其二,虽然redis是单线程,但是也可以利用io 多路复用技术来解决io问题。

随之而来的单线程的遇到的问题是什么呢? 也是可以马上想到的问题,既然是单线程,那么执行时间应该是比较看重的,如果一个命令执行时间过长,那么是非常致命的。

那么下面就来了解一下数据结构的一些基本知识吧。

  1. 字符串

字符串说是字符串,但是实际上可以是(json,xml),甚至是二进制(图片、音频、视频)。

当然值也是有限制的,不能超过512mb,一般来说是不会操作的,这种形式都成大文件了。

一些常用命令:

  1. set hellow world

设置

看到那行有点隐形的字了吗?set key value(ex seconds | px milliseconds )[ nx|xx]

这些是命令提示。

ex 表示过期时间为秒级。

px 表示过期时间为毫秒级。

nx 表示键必须不存在才可以设置成功,用于添加。这个还是比较重要的。

当然也可以这样,setnx hello word2。

这样如果有值的话不能添加。

xx 表示有值的时候才能成功,表示只能用于更新。

也可以使用setxx这样。

setnx 可以为是分布式锁实现的一种方式。https://redis.io/topics/distlock。

当然设置值的方式也可以使用mset。

mset a b c d e f

  1. get 获取

当然也可以使用mget:

使用mget,可以大大节约网络时间。

虽然redis的读写能力非常高,但是网络可能会成为其中的一个瓶颈,那么使用mget来说还是可以的。然后实际上mget,也是执行多次命令,而不是一个命令。

上图可以看到,其命令数其实是一样的,网络时间大大减少。

  1. 字符串模式的其他功能,计数

incr,取自increase,这个单词。

incr 有几个返回结果:

  1. 值不是整数,返回错误。

  2. 值是证书,返回自增后的结果。

  3. 键不存在,按照值0自增,返回结果为1,这个东西还是很方便的,我们不需要判断这个值是否存在,减少了我们的逻辑代码。

除了自增命令,还有decr 自减,increby 自增指定数字,decreby自减指定数字,incrbyfloat 自增浮点数

不常用命令:

  1. 追加值

append key value

  1. 字符串的长度

  1. 设置并返回原值

将hello 设置为了workd,然后返回了原先的值。

  1. 设置指定位置字符

setrang key offset value

基本没人用。

  1. 获取部分字符

getrang key start end

上面的整理表。

内部编码

字符串类型的内部编码有3中:

  1. int 8个字节的长整型

  2. embstr 小于等于39个字节的字符串

  3. row 大于39个字节的字符串

redis 会根据当前的值类型和长度决定用哪种内部编码实现。

使用场景

  1. 缓存从redis中获取用户信息

开发提示

  1. 计数

实际上一个真实的计数系统要考虑的问题会很多:防作弊、按照不同维 度计数,数据持久化到底层数据源等

  1. 共享session

虽然有些人说这不就是缓存吗?但是其功能主要是共享,所以还是把其定义为共享比较好。

一个分布式Web服务将用户的Session信息(例如用户登 录信息)保存在各自服务器中,这样会造成一个问题,出于负载均衡的考 90

虑,分布式服务会将用户的访问均衡到不同服务器上,用户刷新一次访问可 能会发现需要重新登录,这个问题是用户无法容忍的。

为了解决这个问题,可以使用Redis将用户的Session进行集中管理,如 图2-12所示,在这种模式下只要保证Redis是高可用和扩展性的,每次用户 更新或者查询登录信息都直接从Redis中集中获取

  1. 限速

很多应用出于安全的考虑,会在每次进行登录时,让用户输入手机验证 码,从而确定是否是用户本人。但是为了短信接口不被频繁访问,会限制用 户每分钟获取验证码的频率,例如一分钟不能超过5次.

下一节,hash值。

redis 简单整理——redis 的字符串基本结构和命令[二]的更多相关文章

  1. bash shell笔记3 结构化命令二

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://twentyfour.blog.51cto.com/945260/513601 三 ...

  2. 一篇文章带你了解NoSql数据库——Redis简单入门

    一篇文章带你了解NoSql数据库--Redis简单入门 Redis是一个基于内存的key-value结构数据库 我们会利用其内存存储速度快,读写性能高的特点去完成企业中的一些热门数据的储存信息 在本篇 ...

  3. Redis简单介绍

    redis简单介绍 Redis VS key-value缓存产品 Redis支持数据的持久化,能够将内存中的数据保持在磁盘中,重新启动的时候能够再次载入进行使用. Redis不只支持简单的key-va ...

  4. 面试简单整理之Redis

    179.redis 是什么?都有哪些使用场景? Redis是一个key-value存储系统. 缓存,消息队列,排行榜/计数器,分布式架构,做session共享 180.redis 有哪些功能? 181 ...

  5. Redis—简单动态字符串(SDS)

    目录 Redis-简单动态字符串(SDS) SDS的定义 SDS与C字符串的区别 1. 常数复杂度获取字符串长度: 2. 杜绝缓冲区溢出: 3. 减少修改字符串时带来的内存重分配次数 4. 二进制安全 ...

  6. springboot整合redis(简单整理)

    Redis安装与开启 我这里是在windows上练习,所以这里的安装是指在windows上的安装,操作非常简单,点击https://github.com/MicrosoftArchive/redis/ ...

  7. Redis 简单介绍(知识整理笔记)

    前言: Redis 介绍:轻量级.Key-Value.内存数据库.支持持久化 Redis 数据结构:string(字符串),hash(哈希),list(列表),set(集合)及 zset (sorte ...

  8. Redis 知识 整理

    简介 安装 启动 注意事项 使用命令 通用命令 数据结构 字符串(string) 哈希(hash) 队列(list) 集合(set) 有序集合(zset) 位图(bitcount) 事务 订阅与发布 ...

  9. Redis源码学习:字符串

    Redis源码学习:字符串 1.初识SDS 1.1 SDS定义 Redis定义了一个叫做sdshdr(SDS or simple dynamic string)的数据结构.SDS不仅用于 保存字符串, ...

  10. redis简单应用

    启动和结束 --启动redis服务 E:\redis>redis-server.exe redis.windows.conf --结束redis服务 127.0.0.1:6379> shu ...

随机推荐

  1. C# 操作国产数据库之【 人大金仓 】之四大模式

    人大金仓优点 人大金仓是国产最主流ORM之一 具有和PgSql一样强悍的性能,同时人大金仓支持了四种数据库模式 : Oracle.PgSql.MySql和SqlServer ,假如你们系统有多种数据库 ...

  2. 照片也能说话了?嘴型表情全同步,AI数字人时代要来了

    SadTalker是一款先进的人工智能模型,它通过从音频中学习生成3D运动系数,并使用全新的三维面部渲染器来生成头部运动,只需传入一张照片和一段音频,就能生成高质量的AI数字人视频 工作原理 1.显式 ...

  3. 快速复习JDBC(超详细)

    第一章  JDBC概述 之前我们学习了JavaSE,编写了Java程序,数据保存在变量.数组.集合等中,无法持久化,后来学习了IO流可以将数据写入文件,但不方便管理数据以及维护数据的关系: 后来我们学 ...

  4. 新服务器搭建docker跑mysql+java项目

    参考:https://js.work/posts/1362ba443b35d(yum安装java17) 踩了两个坑,一个前面的conf文件里监听80的配置没有删除掉,一个项目配置里面的路径还在用服务器 ...

  5. 【个人笔记】VBox7安装Debian网络下载慢问题处理

    使用镜像安装Debian的过程中,会安装一些常用的软件包.但在安装软件包的阶段,默认情况下会通过网络进行下载.即使配置了国内的镜像,但是由于网络问题依然很慢.这个时候需要的在安装阶段选择从默认的DVD ...

  6. L7结合Turf.js实现空间分析与数据可视化

    1. 概述 AntV L7 是蚂蚁集团 AntV 数据可视化团队推出的基于 WebGL 的开源大规模地理空间数据可视分析引擎,其特点是通过简单的代码进行配置,即可在前端网页中绘制精美的地图以及相关的图 ...

  7. 记录--从AI到美颜全流程讲解

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 美颜和短视频 美颜相关APP可以说是现在手机上的必备的软件,例如抖音,快手,拍出的"照骗"和视频不加美颜效果,估计没有 ...

  8. 【Spring注解驱动开发】你敢信?面试官竟然让我现场搭建一个AOP测试环境!

    写在前面 今天是9月1号,金九银十的跳槽黄金期已拉开序幕,相信很多小伙伴也在摩拳擦掌,想换一个新的工作环境.然而,由于今年疫情的影响,很多企业对于招聘的要求是越来越严格.之前,很多不被问及的知识点,最 ...

  9. 移动端弹性布局方案lib-flexible实践

    2个月前,写过一篇文章<从网易与淘宝的font-size思考前端设计稿与工作流>总结过一些移动web中有关手机适配的一些思路,当时也是因为工作的关系分析了下网易跟淘宝的移动页面,最后才有那 ...

  10. KingbaseESV8R6用户登录失败自动锁定后解锁遇到权限问题

    测试用户登录失败自动锁定 创建用户tee并授权. TEST=# create user tee; CREATE ROLE TEST=# alter user tee with createdb; AL ...