Redis基本类型一共有五类:

  • 字符串类型(string);
  • 散列类型(hash);
  • 列表类型(list);
  • 集合类型(sort);
  • 有序集合类型(zset);

在redis中,所有的类型都是被以键值对形式存放,类型只体现在键值对的值上。

如列表类型,数据格式如下。它的整体存放仍然是key-value的格式,只不过它的value里面是一个列表类型。

如散列类型,数据格式如下。它的整体存储也是遵照key-value的格式,但是它的value存放是散列类型。

其他的几种数据类型类似,都是将各自的特点体现在了value里面。且每一种数据类型不能存在互相包含的关系。如Java中可以如下方式定义集合,在List对象中保存Map对象,Map对象中又可以保存List对象。

List<Map<String, List<String>>> list;

而在Redis中,不能存在如上那样的数据类型互相包含的关系,如列表类型的列表中,只能存放字符串,如散列类型的键值对的键和值,也都只能存放字符串。

字符串类型

字符串类型是Redis里面最简单地一种数据类型。它的值部分只存放一个字符串。

常用命令:

set key value;添加或修改一个字符串类型。如果key存在,则是修改,如果不存在,则是添加。

get key;获取一个字符串类型的value。

mset key value [key1 value1...];添加或修改一个或多个字符串类型。

mget key [key1...];获取多个字符串类型的value,以列表形式返回。

strlen key;返回字符串长度,不存在返回0。

append key value;向指定字符串后面添加字符串,如果key不存在,该命令等同set。

setnx key value;如果key不存在,则添加,如果key已存在,则不做任何操作。

由于Redis中没有数字类型,因此如果我们要计算数字类型,可以在字符串类型中进行处理。

整数型

incr key;自增1,如果key不存在,会先自动创建并设置它的value为0,然后进行incr key操作。

decr key;自减1,如果不存在,处理如上。

incrby key incrememt;增加incrememt,值增加前和增加后都必须是整数。如果key不存在,处理如上。

decrby key decrememt;减去decrememt,值减去前和减去后都必须是整数。如果key不存在,处理如上。

浮点型

incrbyfloat key incrememt;增加incrememt。这里的值和incrememt可以是整数也可以是浮点数。如果key不存在,同样处理。

散列类型

散列类型是以散列表存放的数据,它的时间复杂度是0(1),如果发生hash碰撞,会以单向链表的形式进行处理。

也因此,可以将散列类型的内部重新当成是一个字符串类型的key-value,许多常用命令与字符串类型差异不大。

常用命令:

hset key field value;添加

hget key field;获取

hmset key field value [field1 value1...];批量添加

hmget key field [field...];批量获取

hsetnx key field value;如果key不存在,则添加,如果key已存在,则不做任何操作

hincrby key field increment;对字段field的值增加整数increment。要求field原本对应的值也必须是整数。

上面六个命令在字符串类型中有类似的命令,因为散列的数据格式也是key-value,和字符串类型的格式十分相似,因此处理方法也大多相似。

hgetall key;获取所有的字段与值

hexists key field;判断某个字段是否存在

hlen key;获取字段数量。

hkeys key;获取所有字段名

hvals key;获取所有的字段值

列表类型

列表类型是一个有序可重复的双向链表,它对两头的操作是非常快速的,但是越往中间速度越慢。

常用命令:

lpush key value [value1...];从左边添加一个或多个值

rpush key value [value1...];从右边添加一个或多个值

lpop key;从左边弹出一个值。

rpop key;从右边弹出一个值。

llen key;获取列表长度。和散列类型一样,都通过*len key返回value中的元素数量。

lrange key start stop;获取从下标start到stop所有的元素(包括了start和stop)。下标按从左到右的顺序,0作为第一个下标。如果是按照从右到左的顺序,则是-1作为第一个下标。

lrem key count value;删除|count|个等于指定value的元素。如果count大于0,从左边开始,如果count小于0,从右边开始。当count等于0时,会删除所有等于value的元素。

lindex key index;获取列表中指定位置的值,如果index大于等于0,从左边开始,第一个元素下标是0。如果index小于0,则从右边开始,第一个元素下标是-1。

lset key index value;更新下标为index的元素的value,index可以为正为负。

ltrim key start stop;只保留start到stop的元素,其余全部删除。

linsert key before|after value1 value2;从左到右,在第一次出现的value1值的前面或后面插入value2值,只会插入一个元素。

rpoplpush source destination;将source中最右的元素弹出并添加到destination的左边。可以对source和destination使用同一个列表,用作轮训功能。

集合类型

集合类型具有无序性和唯一性。它是采用散列形式实现,添加的元素作为散列的key,值都是空。

常用命令:

sadd key member [member...];添加一个或多个元素

srem key member [member...];删除一个或多个元素。不写member默认删除所有元素。

smembers key;返回集合中所有的元素。

sismember key member;判断元素是否在集合中

scard key;返回集合中元素的个数。

spop key;从集合中随机弹出一个元素,并删除。

srandmember key [count];从集合中随机获取|count|个元素。假如count不存在,获取1个元素。如果count为正数,获取count个不重复元素。如果count为负数,获取-count个可重复元素。

PS:在集合中的随机并不是每个元素的概率相等。由于它是使用散列加链表的形式存放数据,因此会先在有元素的hash值中进行一个随机,找到对应的hash位置,hash位置存放的是链表,再次对链表上的元素进行随机。有的链表元素多,里面元素的选中概率就低,有的链表元素少,里面元素的选中概率就高。因此集合中每一个元素的随机概率并不相等。

集合的计算:

sdff key1 [key2..];计算key1与一个或多个集合的差集。

sinter key1 [key2...];计算多个集合的交集。

sunion key1 [key2...];计算多个集合的并集。

sdiffstore|sinterstore|sunionstore destination key [key2...];计算多个集合的差集|交集|并集,并将结果存放在新集合destination中。

有序集合类型

有序集合类型是在集合类型的基础上,增加了一个数字类型的分数score用来对元素进行排序,元素是有序不可重复的,分数可以重复,可以是整数也可以是浮点数。

常用命令:

zadd key score member [score member...];添加一个或多个元素和它们的分数。

zrem key member [member...];删除一个或多个元素。不写member默认删除所有元素。

zremrangebyrank key start stop;删除从小到大排序的下标从start到stop的元素。

zremrangebyscore key min max;删除从小到大排序的分数在min到max的元素。

scard key;返回集合中有多少个元素

zrank key member;返回元素从小到大的排名。

zrevrank key member;返回元素从大到小的排名。

zscore key member;返回元素的分数。

zincrby key incrememt member;给元素加分

zcount key min max;返回分数范围在[min,max]里的元素个数。

排序:

zrange key start stop [withscore];返回按从小到大顺序排列的下标从start到stop的元素,如果添加了withscore,还会返回它们的分数。

zrevrange key start stop [withscore];返回按从大到小熟悉怒排序的下标从start到stop的元素,添加withscore会返回分数。

zrangebyscore key min max [withscore] [limit offset count];返回按从小到大顺序排列的分数从min到max的元素,添加withscore会返回分数,添加limit

会从第offset个元素开始,返回count个元素。

zrevrangebyscore key max min [withscore] [limit offset count];返回按从大到小顺序排列的分数从max到min的元素,其余与上条类似,这里要注意的是max参数在min参数之前。

有序集合运算:

zinterstore destination numberkey key [key...] [weight] [aggregate sum|min|max];取多个集合的交集保存在新集合destination中,不添加aggregate参数时,分数会默认进行sum,weight代表每个集合的分数权重,范围从0到1,默认是1,会在aggregate之前将分数乘以权重。

zunionstore destination numberkey key [key...] [weight] [aggregate sum|min|max];取并集,与上一条类型。

Redis基本类型与常用命令的更多相关文章

  1. [置顶] Redis String类型数据常用的16条命令总结

    Redis String类型数据常用的16条命令总结 描述:String 类型是最简单的类型,一个Key对应一个Value,String类型是二进制安全的.Redis的String可以包含任何数据,比 ...

  2. redis学习(二) redis数据结构介绍以及常用命令

    redis数据结构介绍 我们已经知道redis是一个基于key-value数据存储的数据结构数据库,这里的key指的是string类型,而对应的value则可以是多样的数据结构.其中包括下面五种类型: ...

  3. Redis的数据类型及其常用命令

    快速入门Redis 首先安装redis: windows下安装redis Linux下安装redis 1. 什么是redis Redis属于nosql(非关系型数据库) 关系型数据库是基于关系表的数据 ...

  4. 解析Redis操作五大数据类型常用命令

    摘要:分享经常用到一些命令和使用场景总结,以及对Redis中五大数据类型如何使用cmd命令行的形式进行操作的方法. 本文分享自华为云社区<Redis操作五大数据类型常用命令解析>,作者:灰 ...

  5. redis学习-集合set常用命令

    redis学习-集合set常用命令   1.sadd:添加一个元素到集合中(集合中的元素无序的并且唯一) 2.smembers:查看集合中所有的元素(上图事例) 3.srem:删除结合中指定的元素 4 ...

  6. redis学习-散列表常用命令(hash)

    redis学习-散列表常用命令(hash)   hset,hmset:给指定散列表插入一个或者多个键值对 hget,hmget:获取指定散列表一个或者多个键值对的值 hgetall:获取所欲哦键值以及 ...

  7. 【redis】05Redis的常用命令及高级应用

    Redis常用命令     Redis提供了非常丰富的命令,对数据库和个中数据类型进行操作, 这些命令呢,可以在Linux终端使用. 分为两大类的命令,一种是键值相关的命令,一种是服务器相关的命令, ...

  8. redis的安装和常用命令

    一.redis的安装 1.windows安装redis 下载地址:https://github.com/MSOpenTech/redis/releases. Redis 支持 32 位和 64 位.这 ...

  9. Linux+Redis实战教程_day01_常用命令【重点】

    3.常用命令[重点] Linux命令中参数,一般都是无序的.特殊情况下除外 3.1.磁盘管理命令 ls命令:列出目录内容 参数: -a 查询所有文件和文件夹.包含隐藏的 -l 查询详细列表    ls ...

随机推荐

  1. <a>标签的SEO优化细节

    <a>标签的SEO优化细节 如果需要在新窗口中打开链接,我们使用的方法是在a上加上taget=“_blank”,但很多人不知道这是不符合w3c的规范的,在使用严格的DOCTYPE(xhtm ...

  2. netty 使用Java序列化

    SubscribeReq package com.zhaowb.netty.ch7_1; import java.io.Serializable; public class SubscribeReq ...

  3. Spark如何读写hive

    原文引自:http://blog.csdn.net/zongzhiyuan/article/details/78076842 hive数据表建立可以在hive上建立,或者使用hiveContext.s ...

  4. Linux操作系统系列-Linux发布Web项目

    安装JDK 下载jdk 验证是否安装JDK java 如果已经安装了jdk查看已经安装的版本 java -version 如果安装不是所需要的 卸载当前java SDK 通过rpm查看已经安装包 (r ...

  5. SpringCloud学习笔记《---04 Hystrix---》基础篇

  6. [模拟退火][UVA10228] A Star not a Tree?

    好的,在h^ovny的安利下做了此题 模拟退火中的大水题,想当年联赛的时候都差点打了退火,正解貌似是三分套三分,我记得上一道三分套三分的题我就是退火水过去的... 貌似B班在讲退火这个大玄学... 这 ...

  7. jvisualvm 工具使用【转】

    VisualVM 是Netbeans的profile子项目,已在JDK6.0 update 7 中自带(java启动时不需要特定参数,监控工具在bin/jvisualvm.exe). https:// ...

  8. 前端-form表单与CSS

    目录 form表单 表单属性 label标签 input标签 select 下拉框标签 textarea多行文本 提交 Flask 结合form表单 初探 CSS介绍以及基本选择器 基本选择器 组合选 ...

  9. c++ static关键字的作用

    1.被申明的函数或值无法被其他源文件使用 2.static的第二个作用是保持变量内容的持久.(static变量中的记忆功能和全局生存期) 存储在静态数据区的变量会在程序刚开始运行时就完成初始化,也是唯 ...

  10. 洛谷P5341 [TJOI2019]甲苯先生和大中锋的字符串

    原题链接P5341 [TJOI2019]甲苯先生和大中锋的字符串 题目描述 大中锋有一个长度为 n 的字符串,他只知道其中的一个子串是祖上传下来的宝藏的密码.但是由于字符串很长,大中锋很难将这些子串一 ...