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. ...
随机推荐
- makefile 中wildcard
在Makefile规则中,通配符会被自动展开.但在变量的定义和函数引用时,通配符将失效.这种情况下如果需要通配符有效,就需要使用函数“wildcard”,它的用法是:$(wildcard PATTER ...
- [LeetCode] 225. Implement Stack using Queues_Easy tag: Design
Implement the following operations of a stack using queues. push(x) -- Push element x onto stack. po ...
- APPIUM Android 定位方式
原文地址https://www.cnblogs.com/sundalian/p/5629500.html 1.定位元素应用元素 1.1通过id定位元素 Android里面定位的id一般为resrouc ...
- canvas实现验证码功能
我们在做一些后台系统登录功能的时候,一般都会用到验证码,最多的就是后台生成的验证码图片返回给前端的.也可以不调用后端接口,前端使用canvas直接生成验证码. 由于功能过于简单,不需要多少代码和文字说 ...
- 何为仿射变换(Affine Transformation)
http://www.cnblogs.com/ghj1976/p/5199086.html 变换模型是指根据待匹配图像与背景图像之间几何畸变的情况,所选择的能最佳拟合两幅图像之间变化的几何变换模型.可 ...
- BP神经网络原理详解
转自博客园@编程De: http://www.cnblogs.com/jzhlin/archive/2012/07/28/bp.html http://blog.sina.com.cn/s/blog ...
- zookeeper 安装以及集群搭建
安装环境: jdk1.7 zookeeper-3.4.10.tar.gz VM虚拟机redhat6.5-x64:192.168.1.200 192.168.1.201 192.168.1.202 ...
- linux复制指定目录下的全部文件到另一个目录中,linux cp 文件夹
linux复制指定目录下的全部文件到另一个目录中复制指定目录下的全部文件到另一个目录中文件及目录的复制是经常要用到的.linux下进行复制的命令为cp.假设复制源目录 为 dir1 ,目标目录为dir ...
- Gatling新一代压力测试工具,新一代服务器性能测试工具Gatling
Gatling新一代压力测试工具新一代服务器性能测试工具Gatlinghttp://www.infoq.com/cn/articles/new-generation-server-testing-to ...
- thinkphp相关
thinkphp相关1.thinkphp调试sql方法:echo M("table_name")->getLastSql(); 2. 条件查询设置多个条件参数的写法:(1). ...