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. ...
随机推荐
- keepalived+mysql 高可用集群
mysql 为主主模式参考 https://my.oschina.net/sanmuyan/blog/877373 192.168.100.129 mysql 主节点/keepalived 主节点 1 ...
- 基于comet服务器推送技术(web实时聊天)
http://www.cnblogs.com/zengqinglei/archive/2013/03/31/2991189.html Comet 也称反向 Ajax 或服务器端推技术.其思想很简单:将 ...
- 2018-2019-2 网络对抗技术 20165324 Exp1:PC平台逆向破解
2018-2019-2 网络对抗技术 20165324 Exp1:PC平台逆向破解 实验: 要求: 掌握NOP, JNE, JE, JMP, CMP汇编指令的机器码(0.5分) 掌握反汇编与十六进制编 ...
- #C++初学记录(深度搜索#递归)
深度搜索 走地图的题目是深度搜索里比较容易理解的题目,更深层次的是全排列和七皇后等经典题目,更加难以理解,代码比较抽象. 题目:红与黑 蒜厂有一间长方形的房子,地上铺了红色.黑色两种颜色的正方形瓷砖. ...
- 26最短路径之Floyd算法
Floyd算法 思想:将n个顶点的图G“分成”很多子图 每对顶点vi和vj对应子图Gij(i=0,1,…,n-1和j=0,1,…,n-1) 每对顶点vi和vj都保留一条顶点限于子图Gij中的最短路径P ...
- 新版.Net开发必备十大工具(转)
Snippet Compiler Snippet Compiler是一个基于 Windows 的小型应用程序,你可以通过它来编写.编译和运行代码.如果你具有较小的代码段,并且你不想创建完整的 Visu ...
- 彻底明白Flink系统学习5:window、Linux本地安装Flink
http://www.aboutyun.com/thread-26393-1-1.html 问题导读 1.如何在window下安装Flink? 2.Flink本地安装启动命令与原先版本有什么区别? 3 ...
- Linux服务器---基础设置
Centos分辨率 virtualbox里新安装的Centos 7 的分辨率默认的应该是800*600. 如果是‘最小化安装’的Centos7 进入的就是命令模式 .如果安装的是带有GUI的 ...
- 使用echo命令清空tomcat日志文件
使用echo命令清空日志文件echo -n "" > /server/tomcat/logs/catalina.out ==>要加上"-n"参数,默 ...
- linux 判断文件最后更新时间 实现监控日志是否有输出功能
linux 判断文件最后更新时间 实现监控日志是否有输出功能. 需求:监控log.txt日志文件,超过一分钟没输出内容就认为是停了,则自动启动程序. 用stat 可以看文件的更新时间stat -c % ...