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. ...
随机推荐
- Period(sdut2476)
[题目大意]:给定一个字符串,求到哪一位时的字串是前几位循环组成的,并求出循环次数. 思路:求每个前缀的最小循环周:从i到n枚举len,如果len%(len-next[len])==0,则这个前缀是由 ...
- (Power Strings)sdutoj2475
#include <stdio.h>#include <string.h>#include <stdlib.h>char a[1000001];int next[1 ...
- 图结构练习——判断给定图是否存在合法拓扑序列(sdutoj)
#include<stdio.h>#include<string.h>int d[15],map[15][15],vis[15];int main(){ int i,j, ...
- liferay6.1.2的API
http://docs.liferay.com/portal/6.1/javadocs/overview-summary.html
- VS2010/MFC编程入门之五十一(图形图像:GDI对象之画刷CBrush)
上一节中鸡啄米主要讲的是画笔CPen的用法,前面也说了,GDI对象中最常用的就是画笔和画刷,本节就讲讲画刷CBrush. 鸡啄米依然是通过实例的方式来说明画刷的用法.此实例要实现的功能是,对话框上有一 ...
- sql server数据库备份单个表的结构和数据生成脚本
1.使用场景:sql server数据库备份单个表的结构和数据,在我们要修改正式系统的数据的一天或者多条某些数据时候,要执行update语句操作,安全稳健考虑,最好先做好所修改的表的结构和数据备份! ...
- 精力管理 | 迅速恢复精力的N个技巧,四个关键词以及自我管理的方法和工具列表
精力管理 | 迅速恢复精力的N个技巧,所谓坚持,是坚定的“持有”,这个“持”字很值得琢磨——不是扛.不是顶,而是“持”这样一个半放松的状态.如果你没做好自己该做的事情,如果你自己没有成长起来,随着年龄 ...
- Js基础知识1-数组操作全解
数组操作全解 js变量类型 var string; var name = "student",age=12; //underfined.null.boolean.string.nu ...
- linux环境下安装jdk1.6
卸载rpm版的jdk: #rpm -qa|grep jdk 显示:jdk1.6.0_29-fcs 卸载:#rpm -e --nodeps jdk1.6.0_29-fcs 1.从sun公司网站www.s ...
- java笔试题三(javaWeb)
1.讲一下Servlet的执行过程,doGet和doPost的区别. 执行过程: 比如注解配置版本,先继承httpServlet,一旦发送get请求 调用,再执行post方法. doGet和doPos ...