String 数据结构是简单的 key-value 类型,value 不仅可以是 String,也可以是数字(当数字类型用 Long 可以表示的时候encoding 就是整型,其他都存储在 sdshdr 当做字符串)。

一、应用场景举例

String类型的是Redis所有数据结构中使用最为频繁的,也是最简单的数据结构,正所谓大道至简。

1、使用key-value来缓存一些不常改变的数据或,以减轻数据库的压力,如缓存组织架构信息、缓存权限配置信息、缓存用户访问次数、单点登录缓存用户sessionKey等,这种方式比较简单。

2、使用redis的原子性特性进行访问控制,如限制用户点击频率(每10秒可以点击一次)可用以下方式:

127.0.0.1:6379> setnx "order:confirm:{userId}" 1

(integer) 1

127.0.0.1:6379> expire "order:confirm:{userId}" 10

(integer) 1

以上操作中只有setnx成功的线程才允许继续执行下去,否则,将直接提示用户“点击频率过快”

因为 setnx是原子操作,所以只有一个线程可以设置成功,其它线程设置失败,符合要求

当线程setnx成功后,将可以执行接下来的操作,并为缓存key设置过期时间,过期后刚才设置的缓存失效,可以进行下一次点击

3、使用setbit和getbit命令来实现布隆过滤器,例如缓存所有商品id,防止缓存击穿问题

将所有商品编号n存到bitmap的第n位,1表示存在,这里假设有两个商品(12345,12346)

127.0.0.1:6379> setbit goodsIds 12345 1

(integer) 0

127.0.0.1:6379> setbit goodsIds 12346 1

(integer) 0

判断商品id是否存在

127.0.0.1:6379> getbit goodsIds 12345

(integer) 1

127.0.0.1:6379> getbit goodsIds 12347

(integer) 0

127.0.0.1:6379>

二、下表列出了 redis string基本的相关命令:

序号

命令

举例

1

SET key value

设置指定 key 的值

127.0.0.1:6379> set name 'xiaoming'

OK

2

GET key

获取指定 key 的值。

127.0.0.1:6379> get name

"xiaoming"

3

GETRANGE key start end

返回 key 中字符串值的子字符

127.0.0.1:6379> getrange name 4 8

"ming"

4

GETSET key value

将给定 key 的值设为 value ,并返回 key 的旧值(old value)。

127.0.0.1:6379> getset name 'xiaohong'

"xiaoming"

5

GETBIT key offset

对 key 所储存的字符串值,获取指定偏移量上的位(bit)。

127.0.0.1:6379> setbit video 100 1

(integer) 0

127.0.0.1:6379> getbit video 100

(integer) 1

6

MGET key1 [key2..]

获取所有(一个或多个)给定 key 的值。

127.0.0.1:6379> mget name name1

1) "xiaoming"

2) "xiaohong"

7

SETBIT key offset value

对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)。

127.0.0.1:6379> setbit video 100 1

(integer) 0

127.0.0.1:6379> getbit video 100

(integer) 1

8

SETEX key seconds value

将值 value 关联到 key ,并将 key 的过期时间设为 seconds (以秒为单位)。

127.0.0.1:6379> setex name 10 xiaoming

OK

9

SETNX key value

只有在 key 不存在时设置 key 的值。

127.0.0.1:6379> setnx xiaoming_age 10

(integer) 1

127.0.0.1:6379> setnx xiaoming_age 18

(integer) 0

10

SETRANGE key offset value

用 value 参数覆写给定 key 所储存的字符串值,从偏移量 offset 开始。

127.0.0.1:6379> setrange name 3 le

(integer) 8

127.0.0.1:6379> get name

"xialeing"

11

STRLEN key

返回 key 所储存的字符串值的长度。

127.0.0.1:6379> strlen name

(integer) 8

12

MSET key value [key value ...]

同时设置一个或多个 key-value 对。

127.0.0.1:6379> mset name xiaoming name1 xiaohong

OK

13

MSETNX key value [key value ...]

同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在。

127.0.0.1:6379> msetnx name xiaoming name5 xiaogang

(integer) 0

127.0.0.1:6379> get name5

(nil)

14

PSETEX key milliseconds value

这个命令和 SETEX 命令相似,但它以毫秒为单位设置 key 的生存时间,而不是像 SETEX 命令那样,以秒为单位。

127.0.0.1:6379> psetex name 1000 xiaoming

OK

15

INCR key

将 key 中储存的数字值增一。

127.0.0.1:6379> set age 10

OK

127.0.0.1:6379> incr age

(integer) 11

16

INCRBY key increment

将 key 所储存的值加上给定的增量值(increment) 。

127.0.0.1:6379> set age 10

OK

127.0.0.1:6379> incrby age 2

(integer) 12

17

INCRBYFLOAT key increment

将 key 所储存的值加上给定的浮点增量值(increment) 。

127.0.0.1:6379> set weight 40

OK

127.0.0.1:6379> incrbyfloat weight 1.5

"41.5"

18

DECR key

将 key 中储存的数字值减一。

127.0.0.1:6379> set age 10

OK

127.0.0.1:6379> decr age

(integer) 9

19

DECRBY key decrement

key 所储存的值减去给定的减量值(decrement) 。

127.0.0.1:6379> set age 18

OK

127.0.0.1:6379> decrby age 8

(integer) 10

20

APPEND key value

如果 key 已经存在并且是一个字符串, APPEND 命令将指定的 value 追加到该 key 原来值(value)的末尾。

127.0.0.1:6379> append name -xionghaizi

(integer) 19

127.0.0.1:6379> get name

"xiaoming-xionghaizi"

Redis 5种数据结构及其使用场景举例--STRING的更多相关文章

  1. redis五种数据结构及使用场景

    string(字符串) 存储最简单的key-value结构. value可以是字符串.整数或者浮点数. 可以对整个字符串或者字符串的一部分执行操作: 对整数和浮点数执行自增或者自减操作. 使用场景: ...

  2. 2 万字 + 20张图| 细说 Redis 九种数据类型和应用场景

    作者:小林coding 计算机八股文网(操作系统.计算机网络.计算机组成.MySQL.Redis):https://xiaolincoding.com 大家好,我是小林. 我们都知道 Redis 提供 ...

  3. Redis中5种数据结构的使用场景介绍

    转载于:http://www.itxuexiwang.com/a/shujukujishu/redis/2016/0216/108.html?1455861435 一.redis 数据结构使用场景 原 ...

  4. Redis中5种数据结构的使用场景

    一.redis 数据结构使用场景 原来看过 redisbook 这本书,对 redis 的基本功能都已经熟悉了,从上周开始看 redis 的源码.目前目标是吃透 redis 的数据结构.我们都知道,在 ...

  5. Redis 中 5 种数据结构的使用场景介绍

    这篇文章主要介绍了Redis中5种数据结构的使用场景介绍,本文对Redis中的5种数据类型String.Hash.List.Set.Sorted Set做了讲解,需要的朋友可以参考下 一.redis ...

  6. redis的5种数据结构的使用场景介绍

    一.redis 数据结构使用场景 原来看过 redisbook 这本书,对 redis 的基本功能都已经熟悉了,从上周开始看 redis 的源码.目前目标是吃透 redis 的数据结构.我们都知道,在 ...

  7. Redis学习笔记之Redis中5种数据结构的使用场景介绍

    原来看过 redisbook 这本书,对 redis 的基本功能都已经熟悉了,从上周开始看 redis 的源码.目前目标是吃透 redis 的数据结构.我们都知道,在 redis 中一共有5种数据结构 ...

  8. redis 五种数据结构详解(string,list,set,zset,hash)

    redis 五种数据结构详解(string,list,set,zset,hash) Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存 ...

  9. 2.Redis五种数据结构

    2.Redis五种数据结构2.1 预备2.1.1 全局命令2.1.2 数据结构和内部编码2.1.3 单线程架构2.2 字符串2.2.1 命令2.2.2 内部编码2.2.3 典型使用场景2.3 哈希2. ...

随机推荐

  1. (转)Elasticsearch 的坑爹事——记录一次mapping field修改过程

    Elasticsearch 的坑爹事 本文记录一次Elasticsearch mapping field修改过程 团队使用Elasticsearch做日志的分类检索分析服务,使用了类似如下的_mapp ...

  2. 正态分布及3Sigma原理

    针对这个问题,用一两句话是难以说清楚的,这是数理统计学的内容,当质量特性呈正态分布时(实际上,当样本足够大时,二项分布.泊松分布等均趋近于正态分布),3Sigma水平代表了99.73%的合格率

  3. recv函数返回值说明

    recv函数 int recv( SOCKET s, char FAR *buf, int len, int flags); 不论是客户还是服务器应用程序都用recv函数从TCP连接的另一端接收数据. ...

  4. 《Kalchbrenner N, Grefenstette E, Blunsom P. A convolutional neural network for modelling sentences》

    Kalchbrenner’s Paper Kal的这篇文章引用次数较高,他提出了一种名为DCNN(Dynamic Convolutional Neural Network)的网络模型,在上一篇(Kim ...

  5. css3 弹性盒模型 变化

    如果你使用google搜索Flexbox,你会发现很多过时的信息.这里将告诉你如何迅速的辨别你需要的信息. 如果你正在查找有关于Flexbox的博客资料,你看到了“display:box;”或者“bo ...

  6. 2016-2017-2 20155309南皓芯java第五周学习总结

    教材内容总结 这一周学习的进度和前几周比较的话是差不多的,都是学习两章. 异常处理 1.理解异常架构 2.牚握try...catch...finally处理异常的方法 3.会用throw,throws ...

  7. python webdriver firefox 登录126邮箱,先添加联系人,然后进入首页发送邮件,带附件。

    代码:#encoding=utf-8from selenium import webdriverfrom selenium.webdriver.common.keys import Keysfrom ...

  8. python服务器端、客户端的模型,客服端发送请求,服务端进行响应(web.py)

    服务器端.客户端的模型,客服端发送的请求,服务端的响应 相当于启动了一个web server install web.py 接口框架用到的包 http://webpy.org/tutorial3.zh ...

  9. jquery基础框架

    (function(window,undefined){ var arr = [], push = arr.push, slice = arr.slice; //首先要做的就是封装一个parseHtm ...

  10. [转] Python的import初探

    转载自:http://www.lingcc.com/2011/12/15/11902/#sec-1 日常使用python编程时,为了用某个代码模块,通常需要在代码中先import相应的module.那 ...