Redis的全称是REmote Dictionary Server,它主要提供了5种数据结构:字符串、哈希、列表、集合、有序集合,同时在字符串的基础之上演变 出了位图(Bitmaps)和HyperLogLog两种神奇的“数据结构”,并且随着 LBS(Location Based Service,基于位置服务)的不断发展,Redis3.2版本中 加入有关GEO(地理信息定位)的功能


现在先查看五种数据结构


字符串

字符串类型是Redis最基础的数据结构。首先键都是字符串类型,而且 其他几种数据结构都是在字符串类型基础上构建的,字符串类型的值实际可以是字符串(简单的字符串、复杂的字符串(例如JSON、XML))、数字(整数、浮点数),甚至是二进制(图片、音频、视频),但是值最大不能 超过512MB。

命令

set

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

实例

127.0.0.1:6379> keys *

(empty array)

127.0.0.1:6379> set name l

OK

127.0.0.1:6379> set age 20

OK

127.0.0.1:6379> set sex man

OK

分析

set命令有几个选项: ·ex seconds:为键设置秒级过期时间。 ·px milliseconds:为键设置毫秒级过期时间。 ·nx:键必须不存在,才可以设置成功,用于添加。 ·xx:与nx相反,键必须存在,才可以设置成功,用于更新。

除了set选项,Redis还提供了setex和setnx两个命令

setnx 是和set一样的 set xx是要求建存在才可以set

get

get key

127.0.0.1:6379> get name

"l"

127.0.0.1:6379> get age

"20"

127.0.0.1:6379> get sex

"man"


当get一个空值

127.0.0.1:6379> get null

(nil)

批量设置值,批量获取值

批量设置值

mset key value [key value ...]

批量获取值

mget key [key ...]

实例

127.0.0.1:6379> mset set1 1 set2 2 set3 3

OK

127.0.0.1:6379> mget set1 set2 set3

  1. "1"
  2. "2"
  3. "3"

注意:如果有些键不存在,那么它的值为nil(空)

ex:

127.0.0.1:6379> mget set1 set4 set2 set3

  1. "1"
  2. (nil)
  3. "2"
  4. "3"

学会使用批量操作,有助于提高业务处理效率,但是要注意的是每次批 量操作所发送的命令数不是无节制的,如果数量过多可能造成Redis阻塞或 者网络拥塞。

计数

incr key

incr命令用于对值做自增操作,返回结果分为三种情况:

·值不是整数,返回错误。

·值是整数,返回自增后的结果。

·键不存在,按照值为0自增,返回结果为1。

例如对一个不存在的键执行incr操作后,返回结果是1:

实例

127.0.0.1:6379> incr age

(integer) 21

127.0.0.1:6379> incr age

(integer) 22

除了incr命令,Redis提供了decr(自减)、incrby(自增指定数字)、 decrby(自减指定数字)、incrbyfloat(自增浮点数)

decr key

incrby key increment

decrby key decrement

incrbyfloat key increment

很多存储系统和编程语言内部使用CAS机制实现计数功能,有一定的 CPU开销,但在Redis中完全不存在这个问题,因为Redis是单线程架构,任何命令到了Redis服务端都要顺序执行。

更多命令

1.追加值 append

append key value

127.0.0.1:6379> get name

"l"

127.0.0.1:6379> APPEND name testappend

(integer) 11

127.0.0.1:6379> get name

"ltestappend"

2.字符串长度 strlen

strlen key

127.0.0.1:6379> STRLEN name

(integer) 11

3.设置并返回原值 getset

getset key value

getset和set一样会设置值,但是不同的是,它同时会返回键原来的值

127.0.0.1:6379> getset test ok

(nil)

127.0.0.1:6379> getset test change

"ok"

4.设置指定位置的字符 setrange

setrange key offeset value

127.0.0.1:6379> set setstrange best

OK

127.0.0.1:6379> get setstrange

"best"

127.0.0.1:6379> setrange setstrange 0 p

(integer) 4

127.0.0.1:6379> get setstrange

"pest"

5.获取部分字符串 getrange

getrange key start end

start和end分别是开始和结束的偏移量,偏移量从0开始计算

127.0.0.1:6379> set setgetrange hello

OK

127.0.0.1:6379> get setgetrange

"hello"

127.0.0.1:6379> getrange setgetrange 0 1

"he"

内部编码

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

·int:8个字节的长整型。

·embstr:小于等于39个字节的字符串。

·raw:大于39个字节的字符串。

127.0.0.1:6379> set key1 2022

OK

127.0.0.1:6379> set key2 hello,world

OK

127.0.0.1:6379> set key3 this string is greater than 39 isisisisiisisisisisisiisisisisisis(error) ERR syntax error

127.0.0.1:6379> set key3 this string is greater than 39 isisisisiisi(error) ERR syntax error

127.0.0.1:6379> set key3 thisstringisgreaterthanlslslsllslslslsllslslslsllslsls

lsl

OK

127.0.0.1:6379> object encoding key1

"int"

127.0.0.1:6379> object encoding key2

"embstr"

127.0.0.1:6379> object encoding key3

"raw"

127.0.0.1:6379> STRLEN key3

(integer) 57

127.0.0.1:6379> STRLEN key2

(integer) 11

典型使用场景

1.缓存功能

Redis作为缓存层,MySQL作为存储层,绝大部分请求的数据都是从Redis中获取。由于Redis具有支撑高 并发的特性,所以缓存通常能起到加速读写和降低后端压力的作用。

2.计数

许多应用都会使用Redis作为计数的基础工具,它可以实现快速计数、 查询缓存的功能,同时数据可以异步落地到其他数据源

3.共享Session

等等

redis(二)-----redis基本数据类型之字符串的更多相关文章

  1. redis(二)redis+TCMALLOC高性能的缓存服务器的安装配置

    安装  1准备编译环境    yum -y install gcc gcc+ gcc-c++ openssl openssl-devel pcre pcre-devel  2 下载源码包(由于goog ...

  2. Redis(二):Redis的九大应用场景

    毫无疑问,Redis开创了一种新的数据存储思路,使用Redis,我们不用在面对功能单调的数据库时,把精力放在如何把大象放进冰箱这样的问题上,而是利用Redis灵活多变的数据结构和数据操作,为不同的大象 ...

  3. 跟着大彬读源码 - Redis 5 - 对象和数据类型(上)

    相信很多人应该都知道 Redis 有五种数据类型:字符串.列表.哈希.集合和有序集合.但这五种数据类型是什么含义?Redis 的数据又是怎样存储的?今天我们一起来认识下 Redis 这五种数据结构的含 ...

  4. Redis记录-Redis介绍

    Redis是一个开源,高级的键值存储和一个适用的解决方案,用于构建高性能,可扩展的Web应用程序. Redis有三个主要特点,使它优越于其它键值数据存储系统 - Redis将其数据库完全保存在内存中, ...

  5. Redis系列(二):Redis的数据类型及命令操作

    原文链接(转载请注明出处):Redis系列(二):Redis的数据类型及命令操作 Redis 中常用命令 Redis 官方的文档是英文版的,当然网上也有大量的中文翻译版,例如:Redis 命令参考.这 ...

  6. Redis 数据类型分析 字符串 哈希 列表 集合 有序集合 优缺点 分析 注意事项 存储结构

    一.提高Redis使用性能秘诀 KEY尽量少的原则,能放在1个KEY的就放入1个KEY,KEY开销很大尽量减少与Redis发生的交互次数,能批量的就批量,能事务.管道的就事务.管道从业务架构分析确定使 ...

  7. Redis入门教程(二)— 基本数据类型

    阅读以下内容时,手边打开一个redis-cli一起输入,输入命令敲击回车键前在心中想好你的答案,如果结果不合你的预期,请分析原因,使极大地提高学习效率.如果没有条件,每个数据类型后有代码运行结果,供你 ...

  8. Redis 设计与实现 6:五大数据类型之字符串

    前文 Redis 设计与实现 2:Redis 对象 说到,五大数据类型都会封装成 RedisObject. typedef struct redisObject { unsigned type:4; ...

  9. redis学习教程二《四大数据类型》

    redis学习教程二<四大数据类型>  四大数据类型包括:字符串    哈希    列表   集合一 : Redis字符串         Redis字符串命令用于管理Redis中的字符串 ...

随机推荐

  1. yum是什么?repo文件详解,epel简介,yum源的更换,repo和epel区别

    yum是什么?repo文件详解,epel简介,yum源的更换,repo和epel区别 简单概括: repo和epel的关系 repo是配置源的,即配置从哪里下载包(以及依赖关系)的. epel是作为桥 ...

  2. java单元测试调用mybatis接口并执行

    今天想使用单元测试类,存储一些数据到mysql,可是,一直在报错,org.springframework.beans.factory.NoSuchBeanDefinitionException: No ...

  3. 本地Java大数据环境基础配置(Maven)

    注:图片如果损坏,点击文章链接:https://www.toutiao.com/i6812623309138559500/ 创建项目 准备pom.xml文件配置(附在文档最后) 在下载jar过程中极其 ...

  4. PPT制作手机手指滑动效果

    原文链接:https://www.toutiao.com/i6495304998786695694/ 上一节我们完成了手机滑动粗糙效果,这部分我们将给动画添加一个手指的图片. 首先,选择"插 ...

  5. Python与Javascript相互调用超详细讲解(2022年1月最新)(一)基本原理 Part 1 - 通过子进程和进程间通信(IPC)

    TL; DR 适用于: python和javascript的runtime(基本特指cpython[不是cython!]和Node.js)都装好了 副语言用了一些复杂的包(例如python用了nump ...

  6. Web开发之response

    Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象.和代表响应的response对象. 我们要获取客户机提交过来的数据,只需要找request对象就行 ...

  7. Cesium源码剖析---Post Processing之物体描边(Silhouette)

    Cesium在1.46版本中新增了对整个场景的后期处理(Post Processing)功能,包括模型描边.黑白图.明亮度调整.夜视效果.环境光遮蔽等.对于这么炫酷的功能,我们绝不犹豫,先去翻一翻它的 ...

  8. Cesium入门6 - Adding Imagery - 添加图层

    Cesium入门6 - Adding Imagery - 添加图层 Cesium中文网:http://cesiumcn.org/ | 国内快速访问:http://cesium.coinidea.com ...

  9. golang中的标准库template

    html/template包实现了数据驱动的模板,用于生成可对抗代码注入的安全HTML输出.它提供了和text/template包相同的接口,Go语言中输出HTML的场景都应使用text/templa ...

  10. gin中绑定uri

    package main import ( "github.com/gin-gonic/gin" "net/http" ) type Person struct ...