文档章节

redis(2)、redis数据类型

haoran_10
 haoran_10
发布于 2016/07/15 16:38
字数 1869
阅读 15
收藏 1

#程序员薪资揭榜#你做程序员几年了?月薪多少?发量还在么?>>>

 

  • 一、字符串(Strings)
  • 二、列表(Lists)
  • 三、哈希(Hashes)
  • 四、集合(Sets)
  • 五、有序集合(Sorted sets)
  • 六、位图(bitmaps)
  • 七、HyperLogLogs
  • 八、地理位置(geospatial) 还在开发中

零、redis key

redis key是二进制安全的,所有的二进制序列都可以做为key值,空字符串也可以。

使用规则&建议:

(1)、key的长度不要太长,占内存,查找消耗大。

(2)、key的长度太短也不好,不利于阅读。

(3)、制定好key书写规范,约定好,利于开发,利于阅读。

(4)、key值设置要低于512MB。


一、字符串(Strings)

字符串结构是redis最简单的一种类型,Memcached缓存数据库也支持这一种(事实上Memcached是追崇极简设计哲学)。

使用SET  GET 可以操作strings


tips:

a、SET 结构可以是任意值

b、不能超过512M

(1)、setnx

当前key存在时,设置不会成功,返回0

当前key不存在时,设置成功,返回1

 这个命令可以构建分布式锁,而且redis官网并且给出了方案,而且方案很有借鉴性,关于基于redis setnx 构建分布式锁会单独研究。

http://www.redis.io/commands/setnx  

http://redis.io/topics/distlock 

 (2)、当value是整数类型时,有一些专门的原子性的指令来操作这些数据

 这个命令可以做一些统计性的工作,并且是原子性,多个客户端同时操作也是安全的。

incr、decr、incrby、decrby。其实这四个命令原理都一样,只不过换个样子罢了。

 (3)、对key设置新的值,并且返回原先旧的值

 (4)、MSET MGET 批量操作

 mset key1,val1...  后面key和value对应好

mget key1,key2...参数为一个数组,返回值也是一个数组

 (5)、EXISTS 是否存在某key,DEL 删除某key



 初次操作是存在的,删除之后,在查询就不存在了。

 (6)、TYPE 查看key对应的值的数据类型

 (7)、expire TTL  PERSIST 

expire 生效时间,时间粒度可以单独设置

TTL 查看key剩余时间

PERSIST  把key设为永久

 
 

当我设置key之后,并且设置key5秒后失效。5秒内查看key时,是存在的,5秒后查询key,已经不存在了,已经失效了。

 
 设置key60秒后失效,12秒过后查看key的时效。


二、列表(Lists)

redis的列表是基于链表实现的,这样添加数据和删除数据的时候速度非常迅速,但是基于下标索引查询数据的时候则会慢很多,如果有这样的需要使用sorted set。

(1)、使用LPUSH 可以在列表的左端插入数据,RPUSH可以在列表的右端插入数据,    LRANGE可以从左端查询数据。

LPUSH key value [value ...]  从左端插入数据,可以同时插入多个数据

RPUSH key value [value ...]  从右端插入数据,可以同时插入多个数据

LRANGE key start stop        从左端开始插入数据,start是开始的坐标,stop是结束的坐标,都可以为负数。负数则代表反着方向。

 ---->[c][b][a]  从左边先进入的元素排在右端。

 (2)、LPOP,RPOP,这两个指令,可以从list中取出数据,很有用处

LPOP key  从key中左端取出list的一个数据,并且返回

RPOP key 从key中右端取出list的一个数据,并且返回 

 
 

从左边取数据,则为c。

可以直接理解为队列。

 (3)、基于redis list push pop这几组命令,可以构建异步的生产者消费者系统。

生产者线程使用LPUSH把需要处理的数据插入队列中,消费者线程只要观察到队列中有数据,就可以取出数据就行处理。

关于基于redis list构建生产者消费者系统,也会另起篇幅进行研究。

 (4)、也可以基于redis list构建分页系统。

存储数据之后,使用lrange 命令构建分页系统。

 (5)、LTRIM 对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。

LTRIM key start stop   start 是开始下标  stop是结束下标

 (6)、阻塞的list操作

BRPOP key [key ...] timeout  如果key对应的list中没有数据,则会一直阻塞。如果设置了超时时间,在超时时间前一直阻塞。

BLPOP 同理。

可以和push 结合着用,消费者阻塞式去数据。不建议使用。


  三、哈希(Hashes)

hash顾名思义,就是键值对。

有四个最常用的命令

 HSET key field value   

HGET key field

HMSET key field value [field value ...]

HMGET key field [field ...]

一个key下面,有N个键值对,类似于一个hashmap,有多个key和value

hmset hmget 多个参数进行操作



 

 strings 的一些纯粹的set get 操作,尽量转移到hash数据,内存低,效率高。


  四、集合(Sets)

redis sets 是无序的集合,可以通过SADD 命令插入数据,主要提供了检查某个value是否存在该sets中,两个sets之间的交集,并集,差集,

基于这个特性可以用在一些关系相关的应用系统。比如微博中A和B共同关注的人等等。

  (1)、SADD key member [member ...]  往key对应的sets添加元素,可以添加多个元素。

(2)、SMEMBERS key  查询key对应的sets中所有的元素

(3)、SISMEMBER key member 查询key对应的sets中是否拥有member这个元素

(4)、SPOP key [count]  随机从key对应的sets中取出一个元素,并且删除。后面[count]参数,3.0版本还不能用,以后的版本会支持。

(5)、SRANDMEMBER key [count] 随机从key对应的sets中取出一个元素,但是不删除。后面[count]参数,3.0版本还不能用,以后的版本会支持。

(6)、SINTER key [key ...] 从多个key对应的sets中取交集

(7)、SUNIONSTORE destination key [key ...] 从多个key对应的sets中取并集,并且赋予一个新的sets

(8)、SDIFF key [key ...] 取多个sets差集 

 


五、有序集合(Sorted sets)

sorted sets 是sets 和hashs的混合,功能也比较强大。

关键在于我们在插入sorted sets集合时,可以对某个元素进行设置score,这就是为什么像hashs,就像键值对一样绑在一起。

sorted seds 是基于跳跃表和hash表,时间复杂度为O(log(N)) ,不过也是值得的,插入一个元素,就已经排好序了。这对于构建排序系统,非常有用,因为排序系统一旦排好序之后,变更频率较低,读取较多。

sorted sets 基于score的排序规则如下:

  • 分数越大,排序靠前
  • 分数相同,按照元素的strings的英文字母升序排列,那个元素的英文字母在前,那个元素就排在前。

(1)、ZADD key score member [score member ...]  往key对应的sorted sets 往添加元素,可以添加多个

(2)、ZRANGE key start stop [WITHSCORES] 根据下标索引,返回数据

(3)、ZREMRANGEBYSCORE key min max 从sorted sets 中删除元素根据min~max之间

(4)、ZRANK key member 返回某个元素在sorted sets中的排名

(5)、ZREVRANK key member 返回某个元素在sorted sets中的倒叙排名


六、位图(bitmaps)

效率最高的存储方式,精通之后,如有打通任督二脉。。。不扯了, http://www.cnblogs.com/riskyer/p/3228651.html


七、HyperLogLogs

  http://www.cnblogs.com/ysuzhaixuefei/p/4052110.html

 

© 著作权归作者所有

haoran_10
粉丝 27
博文 89
码字总数 82446
作品 0
杭州
程序员
私信 提问
加载中

评论(0)

redis(Springboot中封装整合redis,java程序如何操作redis的5种基本数据类型)

平常测试redis操作命令,可能用的是cmd窗口 操作redis,记录一下 java程序操作reids, 操作redis的方法 可以用Jedis ,在springboot 提供了两种 方法操作 RedisTemplate 和StringRedisTempla...

osc_otkk1ufm
2019/02/15
2
0
python:redis操作、redis 迁移

一、数据库: 数据库分为关系型、非关系型(No sql) 关系型:mysql、Oracal   1.要用sql查询、各个表之间有联系   2.速度相较于非关系型的数据库较慢 非关系型:例如mangoDB、redis、m...

osc_g60o43ee
2019/07/03
2
0
Redis基础入门,Redis的优点也特点,Redis五种数据类型

Redis是一个开源,高级的键值存储和一个适用的解决方案,用于构建高性能,可扩展的Web应用程序。 1、Redis的主要特点 Redis有三个主要特点,使它优越于其它键值数据存储系统 - Redis将其数据...

osc_41dppmun
2018/06/28
4
0
【Redis】一、Redis简介及五种数据类型

(一)Redis简介   Redis(Remote Dictionary Server)是一个使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value的开源数据库,并提供多种语言的API。 ...

osc_1n1oxqjf
2019/06/03
4
0
21.9 redis介绍;21.10 redis安装;21.11 redis持久化;21.12

21.9 redis介绍 1. Redis和Memcached类似,也属于k-v数据存储 2. Redis官网redis.io, 当前最新稳定版4.0.1 3. 支持更多value类型,除了和string外,还支持hash、lists(链表)、sets(集合)...

主内安详
2018/05/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

【JAVA习题五】将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。

import java.util.Scanner;public class Fenjieshu分解数 { public static void main(String[] args) { // TODO Auto-generated method stub Scanner n=new Scanner(Sy......

osc_7rnzlqhm
刚刚
0
0
Eclipse 安装Web Service、Axis2插件

Eclipse 安装Web Service、Axis2插件 一. 下载Apache Axis2及相关插件 下载地址: http://axis.apache.org/axis2/java/core/download.cgi 二. 解压 axis2-eclipse-codegen-plugin-1.7.3.zip......

osc_8hwmnuba
2分钟前
0
0
CAD如何输入文本?迅捷CAD编辑器文本输入更快捷

在CAD文件中,如何输入文本呢?相信很多小伙伴们,对于如何使用“迅捷CAD编辑器”给CAD文件输入文本,还是有些不够清楚的。那么,下面小编就给小伙伴们分享一下,如何使用它更快捷地输入文本...

深蓝月上
2分钟前
0
0
【金融】京东白条分期支付业务流程

1.京东白条分期支付业务流程 2.京东白条分期支付前端页面截图(H5) 2.1 京东商城 京东商城仅商详模块展示白条分期详情。包含: 2.2 京东数科(收银台) 2.2.1 判断是否登录 如果用户未登录,...

osc_wxsc35it
3分钟前
0
0
PDF怎么修改表单?高效办公就选这款PDF编辑器软件

在PDF文档中,怎么进行修改表单的操作呢?想要高效率的办公,小伙伴们就选择这款PDF编辑器软件吧。当面对一些需要进行修改表单操作的PDF文档,办公室小伙伴们是不是经常会感觉到头疼,不知道...

开源86
3分钟前
11
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部