Redis 5种数据结构及其使用场景举例--STRING
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 |
设置指定 key 的值 |
127.0.0.1:6379> set name 'xiaoming' OK |
|
2 |
获取指定 key 的值。 |
127.0.0.1:6379> get name "xiaoming" |
|
3 |
返回 key 中字符串值的子字符 |
127.0.0.1:6379> getrange name 4 8 "ming" |
|
4 |
将给定 key 的值设为 value ,并返回 key 的旧值(old value)。 |
127.0.0.1:6379> getset name 'xiaohong' "xiaoming" |
|
5 |
对 key 所储存的字符串值,获取指定偏移量上的位(bit)。 |
127.0.0.1:6379> setbit video 100 1 (integer) 0 127.0.0.1:6379> getbit video 100 (integer) 1 |
|
6 |
获取所有(一个或多个)给定 key 的值。 |
127.0.0.1:6379> mget name name1 1) "xiaoming" 2) "xiaohong" |
|
7 |
对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)。 |
127.0.0.1:6379> setbit video 100 1 (integer) 0 127.0.0.1:6379> getbit video 100 (integer) 1 |
|
8 |
将值 value 关联到 key ,并将 key 的过期时间设为 seconds (以秒为单位)。 |
127.0.0.1:6379> setex name 10 xiaoming OK |
|
9 |
只有在 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 |
用 value 参数覆写给定 key 所储存的字符串值,从偏移量 offset 开始。 |
127.0.0.1:6379> setrange name 3 le (integer) 8 127.0.0.1:6379> get name "xialeing" |
|
11 |
返回 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 |
这个命令和 SETEX 命令相似,但它以毫秒为单位设置 key 的生存时间,而不是像 SETEX 命令那样,以秒为单位。 |
127.0.0.1:6379> psetex name 1000 xiaoming OK |
|
15 |
将 key 中储存的数字值增一。 |
127.0.0.1:6379> set age 10 OK 127.0.0.1:6379> incr age (integer) 11 |
|
16 |
将 key 所储存的值加上给定的增量值(increment) 。 |
127.0.0.1:6379> set age 10 OK 127.0.0.1:6379> incrby age 2 (integer) 12 |
|
17 |
将 key 所储存的值加上给定的浮点增量值(increment) 。 |
127.0.0.1:6379> set weight 40 OK 127.0.0.1:6379> incrbyfloat weight 1.5 "41.5" |
|
18 |
将 key 中储存的数字值减一。 |
127.0.0.1:6379> set age 10 OK 127.0.0.1:6379> decr age (integer) 9 |
|
19 |
key 所储存的值减去给定的减量值(decrement) 。 |
127.0.0.1:6379> set age 18 OK 127.0.0.1:6379> decrby age 8 (integer) 10 |
|
20 |
如果 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的更多相关文章
- redis五种数据结构及使用场景
string(字符串) 存储最简单的key-value结构. value可以是字符串.整数或者浮点数. 可以对整个字符串或者字符串的一部分执行操作: 对整数和浮点数执行自增或者自减操作. 使用场景: ...
- 2 万字 + 20张图| 细说 Redis 九种数据类型和应用场景
作者:小林coding 计算机八股文网(操作系统.计算机网络.计算机组成.MySQL.Redis):https://xiaolincoding.com 大家好,我是小林. 我们都知道 Redis 提供 ...
- Redis中5种数据结构的使用场景介绍
转载于:http://www.itxuexiwang.com/a/shujukujishu/redis/2016/0216/108.html?1455861435 一.redis 数据结构使用场景 原 ...
- Redis中5种数据结构的使用场景
一.redis 数据结构使用场景 原来看过 redisbook 这本书,对 redis 的基本功能都已经熟悉了,从上周开始看 redis 的源码.目前目标是吃透 redis 的数据结构.我们都知道,在 ...
- Redis 中 5 种数据结构的使用场景介绍
这篇文章主要介绍了Redis中5种数据结构的使用场景介绍,本文对Redis中的5种数据类型String.Hash.List.Set.Sorted Set做了讲解,需要的朋友可以参考下 一.redis ...
- redis的5种数据结构的使用场景介绍
一.redis 数据结构使用场景 原来看过 redisbook 这本书,对 redis 的基本功能都已经熟悉了,从上周开始看 redis 的源码.目前目标是吃透 redis 的数据结构.我们都知道,在 ...
- Redis学习笔记之Redis中5种数据结构的使用场景介绍
原来看过 redisbook 这本书,对 redis 的基本功能都已经熟悉了,从上周开始看 redis 的源码.目前目标是吃透 redis 的数据结构.我们都知道,在 redis 中一共有5种数据结构 ...
- redis 五种数据结构详解(string,list,set,zset,hash)
redis 五种数据结构详解(string,list,set,zset,hash) Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存 ...
- 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. ...
随机推荐
- Ubuntu单用户模式(安全模式)
说下我遇到的情况,ubuntu服务器,防火墙关闭,连的外网.服务器中毒,病毒自动生成用户,然后病毒进程开启启动,进程启动后,cpu立马占满,服务器立马卡死,本想着服务器启动后通过top命 ...
- CentOS6.5安装RHadoop
1.首先安装依赖包(各个节点都要安装) [root@Hadoop-NN-01 ~]$ yum install gcc-gfortran #否则报”configure: error: No F77 co ...
- Oracle的FIXED_DATE参数
今天发现一个有意思的问题, 我们知道,在Oracle数据库中正常执行 select sysdate from dual 都可以返回当前主机的系统时间. 正常修改系统时间,对应的查询结果也会变成修改后的 ...
- c++中的构造(包括移动),赋值(包括移动),析构详解
这五种操作:构造(包括移动),赋值(包括移动),析构其实就是定义了对一个对象进行构造,赋值,析构时的行为.理解这些行为并不复杂,复杂的是理解在继承下这些行为的表现.需要注意的是他们并不会被继承(传统意 ...
- 3:3 OGNL 表达式一
一: 用例 (直接链式访问属性名,其实内部还是的调用set,get方法实现数据的流动); 二: 注意:表达式里面是没有方法的,只能点属性, 访问列表: (访问的时候加上#,表示访问非值栈的内容.) 访 ...
- 20155222 2016-2017-2 《Java程序设计》第8周学习总结
20155222 2016-2017-2 <Java程序设计>第8周学习总结 教材学习内容总结 Java NIO(New IO)是一个可以替代标准Java IO API的IO API(从J ...
- Linux命令: touch tem.txt创建txt文件
touch tem.txt 创建txt文件
- Python:在windows下创建虚拟环境
我们在用python开发的时候,随着开发应用的增多,比如这个项目用django开发后台,之后又用scrapy来开发爬虫应用等,如果不用虚拟环境这些软件包都会被放到python的site-package ...
- python进程join()函数理解
Join()是主程序等我这个进程执行完毕了,程序才往下走
- Java SE 基础知识(一)
一.基础知识 1. Java SE : Java Standard Edition Java ME : Java Micro Edition Java EE : Java Enterprise Edi ...