Redis数据结构&命令手册

Redis数据结构

  Redis可以存储键与5种不同数据结构之间的映射,这五种数据结构类型分别为STRING(字符串)、LIST(列表)、SET(集合)、HASH(散列)、ZSET(有序集合)。

  

STRING字符串

LIST列表

SET集合

HASH散列

Order-set有序集合

STRING字符串

1.set

set key value [ex 秒数]/[px 毫秒数] [nx]/[xx]
作用:创建string类型数据类型键值对
例子:
Set a ex :10秒有效
Set a px :9秒有效
注:ex,px不要同时写,否则以后面的有效期为准
Set a ex px :实际有效期为9秒
nx:表示key不存在时,执行操作
Xx:表示key存在时,执行操作

2.mset

mset multi set :一次性设置多个键值
作用:一次设置多个键值对
例子:mset key1 v1 key2 v2...

3.get

get key
作用获取单个key的值

4.mget

mget key1 key2 ...
作用获取多个key的值

5.append

append key value
作用:把value追加到key的原值上

6.setrange

setrange key offset value
作用把字符串的offset偏移字节改成value(替换) set word hello
get word
hello
setrange word ??
get word
he??o 注意:如果偏移量》字符长度,该字符自动补0x00
set word hello
setrange word !
get word
hello\x00!

7.getrange

getrange key start stop
作用:获取字符串中【start,sop】范围的值
注意:对于字符串的下标,左数从0开始,右数从-1开始 set area chinese
getrange area
hine
getrange area -
Chine
注意:
.start>=length,则返回空字符串
.stop>=length,则截取至字符结尾
.如果start所处位置在stop右边,返回空字符串

8.getset

getset key newvalue
作用:获取并返回旧值,设置新值
set status sleep
getset status wakeup
Sleep
get status
wakeup
getset status working

9.incr 

incr key 
作用:增加key的大小,增加1

10.decr

decr key
作用:减少key的大小,减少1

11.decrby

decrby key value
作用:减少key的大小,减少value

12.incrby

incrby key value
作用:增加key的大小,增加value

13.incrbyfloat&decrbyfloat

incrbyfloat key value
作用:增加key的大小,增加value,value为float类型

14.setbit

setbit key offset value
设置offset对应二进制位上的值
返回:该位上的旧值
注意:如果offset过大,则会在中间填充0
Offset最大为2^-,可以推算出字符串的值最大为512M set char A
setbit char
get char
a set char a
setbit char 0
get char
A

15.bitop

bitop operation destkey key1 [key2 ...]
作用:对key1,key2、keyN左operation,并将结果保存到destkey上
operation可以是AND、OR、NOT、XOR

LIST列表

  Redis对链表(linked-list)结构的支持使得它在键值存储的世界中独树一帜。一个列表可以有序地存储多个字符串。

1.lpush

lpush key value
作用:在链表头部插入数据
lpush character a

2.rpush

rpush key value
作用:在尾部插入数据
rpush character b

3.lpop&rpop

lpop key
作用:返回并删除链表头的元素
rpop key
作用:返回并删除链表尾的元素

4.lrange

lrange key start stop
作用:返回链表中【start stop】的元素
注:左数从0开始,右数从-1开始
例子:
lrange character

5.lrem

lrem key count value:从key链表中删除value值
注:删除count的绝对值个value后结束
Count> 从表头删除
Count< 从表尾删除
lrem key a:从头开始删除两个a
lrem key - a:从尾开始删除两个a

6.ltrim

ltrim key start stop
作用:剪切key对应的链接剪切【start,stop】一段,并把该段重新赋给key

7.lindex

lindex key index
作用:返回index索引上的值
例子:
lindex key

8.llen

llen key 
作用:返回链表长度

9.linsert

linsert key after|before search value
在key链表中寻找search,并在search值前后,插入value
注:如果在链表中有多个相同的值,一旦找到一个search后,命令就结束了,因此不会插入多个value
rpush num
linsert num before linsert num after

10.rpoppush

rpoplpush source dest
作用:将一个(source)链表尾部的元素删除并添加到另一个链表(dest)的头部

例子:
rpush task a b c d
rpush job rpoplpush task job 场景:task+job完成安全的队列 .rpoplpush task job
.接收返回值,并做业务处理
.如果成功,rpop job清除任务,如果不成功,下次从job里再次取任务

11.brpop&blpop

brpop,blpop key timeout
等待弹出key的尾/头元素
Timeout为等待超时时间
如果timeout为0,一直等待
场景:长轮询Ajax在线聊天

SET集合

Redis地集合和列表都可以存在多个字符串,它们之间的不同在于,列表可以存储多个相同的字符串,而集合则通过使用散列来保证自己存储的每个字符串都是各不相同的(这些散列表只有键,但没有与键相关联的值)

Redis集合使用无序方式存储元素,所以用户不能使用列表那样,将元素推入集合的某一端,或者从集合的某一端弹出元素。

集合的性质:

  1. 无序性
  2. 确定性:
  3. 唯一性

注:在string和link的命令中,可以通过range来访问string中的某个字符或某几个元素,但,因为集合的无序性,无法通过下标或范围来访问部分元素

因此想访问元素,要么随机选一个,要么都选

1.sadd

sadd key value1 value2
作用:创建集合并往集合key中增加元素

2.srem

srem value1 value2
作用:删除集合中集为value1 value2的元素
返回值:忽略不存在的元素后,真正删除掉的元素的个数

3.spop

spop key
作用:返回并删除集合key中1个随机元素

4.srandmember

srandmember  key
作用:返回集合key中随机的1一个元素

5.sismember

sismember key value
作用:判断value是否key集合
是返回1,否返回0

6.srandmember

srandmember key
作用:返回集合key中随机的一个元素

7.sismember

sismember key value
作用:判断value是否在key集合中
是返回1,否返回0

8.smembers

smembers key
作用:返回集合中的所有元素

9.scard

scard key
作用:返回集合中元素的个数

10.smove

smove source dest value
作用:把source中的value删除,并添加到dest集合中

11.sinter

Sinter key1 key2 key3
作用::求出key1 key2 key3 三个集合中的交集,并返回
例子:
sadd s1
sadd s2
sadd s3
sinter s1 s2 s3

12.sinterstore

sinterstore dest key1 key2 key3
作用:求出key1,key2,key3 三个集合中的交集,并赋值给dest

13.suion

suion key1 key2...keyn
作用:求出key1,key2,keyn的并集,并返回

14.sdiff

sdiff key1 key2 key3
作用:求出key1与key2,key3的差集

HASH散列

Redis的散列可以存储多个键值对之间的映射,和字符串一样,散列存储既可以是字符串又可以是数字值,并且用户同样可以对散列的数字值执行自增操作或者自减操作。

1.hset

hset key field value
作用:把key中 field域的值设为value
注:如果没有field域,直接添加,如果有,则覆盖原field域的值

2.hmset

hmset key field1 value1 [field2 value2 field3 value3 ......fieldn valuen]
作用:设置field1->N个域。对应的值是value->N

3.hget

hget key field
作用:返回key中的field域的值

4.hmget

hmget key field1 field2 fieldN
作用:返回key中的field fieldN域的值

5.hgetall

hgetall key
作用:返回key中所有域与其值

6.hdel

hdel key field
作用:删除key中field域

7.hlen

hlen key
作用:返回key中元素的数量

8.hexists

hexists key field
作用:判断key中有没有field域

9.hincrby

hincrby key field value
作用:是把key中的field域的值增长整型值value

10.hincrbyfloat

hincrbyfloat key field value
作用:是把key中的field域增长浮点值value

11.hkeys

hkeys key
作用:返回key中所有field

12.kvals

kvals key
作用:返回key中所有value

Order-set 有序集合

有序集合和散列一样,都用于存储键值对:有序集合的键被称为成员(member),每个成员都是各不相同的;而有序集合的值则被称为分值(socre),分值必须为浮点数。

有序集合是redis里面唯一一个既可以根据成员访问元素(这一点和散列一样),又可以根据分值以及分值的排列顺序来访问元素的结构。

1.zadd

zadd key score1 value1 score2 value2...
作用:创建并添加元素
例子:
zadd class lily lucy lie

2.zrem

zrem key value1 value2...
作用:删除集合钟的元素

3.zremrangebyscore

zremrangebyscore key min max
作用:按照socre来删除元素,删除score在[min,max]之间的元素

4.zremrangebyrank 

zremrangebyrank key start end
作用:按排名删除元素,删除名次[start,end]之间的元素

5.zrank

zrank key member
作用:查询member的排名(升序0名开始)

6.zrevrank

zrevrank key memeber
作用:查询member的排名(降序0名开始)

7.zrange

zrange key start stop [withscores]
作用:把集合排序后,返回名次[start stop]的元素
默认是升序排列
withscores:是把score也打印出来

8.zrevrange

zrevrange key start stop
作用:把集合降序排序取名字[start,stop]之间的元素

9.zrangbyscore

zrangbyscore key min max [withscores] [limit offset N]
作用:集合(升序)排序后取socre在[min,max]内的元素
并跳过offset个,取出N个

10.zcard

zcard key
作用:返回元素个数

11.zcount

zcount key min max
作用:返回[min,max]区间内元素的数量

12.zinterstore

zinterstore destination numkeys key1 [key2...]
[WEIGHTS weight [weight ...]]
[aggreagte sum|min|max] 求key1,key2的交集,key1,key2的权重分别是weight1,weight2
聚合方法:sum、min、max
聚合的结果保存在dest集合内
Numkeys:计算交集的key的个数
weights,aggregate如何理解?
如果有交集,交集元素又有score,score怎么处理? zadd lisi cat dog horse
zadd wang cat dog horse donkey
zinterstore result lisi wang
zrange result - [withscores] zinterstore result lisi wang aggregate min
zrange result - [withscores] zinterstore result lisi wang aggregate max
zrange result - [withscores]

Redis数据结构&命令手册的更多相关文章

  1. Redis常用命令手册:服务器相关命令

    Redis提供了丰富的命令(command)对数据库和各种数据类型进行操作,这些command可以在Linux终端使用.在编程时,比如各类语言包,这些命令都有对应的方法.下面将Redis提供的命令做一 ...

  2. redis常用命令手册大全

    一.五种数据类型1.Redis字符串StringString 是最简单的类型,你可以理解成与 Memcached 是一模一样的类型,一个 key 对应一个value,其上支持的操作与 Memcache ...

  3. 分布式缓存技术redis学习系列(二)——详细讲解redis数据结构(内存模型)以及常用命令

    Redis数据类型 与Memcached仅支持简单的key-value结构的数据记录不同,Redis支持的数据类型要丰富得多,常用的数据类型主要有五种:String.List.Hash.Set和Sor ...

  4. 分布式缓存技术redis学习(二)——详细讲解redis数据结构(内存模型)以及常用命令

    Redis数据类型 与Memcached仅支持简单的key-value结构的数据记录不同,Redis支持的数据类型要丰富得多,常用的数据类型主要有五种:String.List.Hash.Set和Sor ...

  5. 深入剖析Redis系列:Redis数据结构与全局命令概述

    前言 Redis 提供了 5 种数据结构.理解每种数据结构的特点,对于 Redis 的 开发运维 非常重要,同时掌握 Redis 的 单线程命令处理 机制,会使 数据结构 和 命令 的选择事半功倍. ...

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

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

  7. RedisTemplate访问Redis数据结构(介绍和常用命令)

    Redis 数据结构简介 Redis 可以存储键与5种不同数据结构类型之间的映射,这5种数据结构类型分别为String(字符串).List(列表).Set(集合).Hash(散列)和 Zset(有序集 ...

  8. 第18章 Redis数据结构常用命令

    18-1 字符串的一些基本命令 18-1 :配置Spring关于Redis字符串的运行环境 <bean id="poolConfig" class="redis.c ...

  9. 3年Java开发都知道的Redis数据结构和通用命令

    Redis的数据结构 Redis支持多种不同的数据结构,包括5种基础数据结构和几种比较复杂的数据,这些数据结构可以满足不同的应用场景. 五种基础数据结构 String:字符串,是构建其他数据结构的基础 ...

随机推荐

  1. LBS 基于位置的服务

    LBS (Location Based Services)基于位置的服务 基于位置的服务,它是通过电信移动运营商的无线电通讯网络(如GSM网.CDMA网)或外部定位方式(如GPS)获取移动终端用户的位 ...

  2. MySQL主从服务器的原理和设置

    一 主从配置的原理     mysql的Replication是一个异步的复制过程,从一个mysql instance(Master)复制到另一个mysql instance(Slave), 在mas ...

  3. 错误 NETSDK1007 找不到“E:\Project\MyProject\MyProject.Common\MyProject.Utility.csproj”的项目信息。这可以指示缺少一个项目引用。 MyProject.Data C:\Program Files\dotnet\sdk\2.2.107\Sdks\Microsoft.NET.Sdk\targets\Microsof

    因为对MyProject.Data引用的项目MyProject.Common进行了重命名为MyProject.Utility,导致这个错误 解决办法: 1.找到MyProject.Data中的E:\P ...

  4. spring 中的一些注解功能--不定更新

    1@Qualifier注解? 下面的示例将会在Customer的person属性中自动装配Person的值. public class Customer { @Autowired private Pe ...

  5. 修改web项目发布路径

    Eclipse中用Tomcat发布的Web项目,更改其部署路径 我的Eclipse的工作目录是D:/workspace先配置Tomcat 选择你的tomcat版本 点击next 这里先不要把项目添加进 ...

  6. 在JavaScript中引用类型和值类型的区别

    一.存储方式不一样 基本数据类型 变量存储的是简单的数据段,存储的是具体的值,是轻量级的数据存储方式 引用类型 引用类型的值,可以由多个值构成的对象,引用类型的变量存储的是对象引用地址.引用类型是重量 ...

  7. JAVA中对null进行强制类型转换(null可以强转为任意对象,并执行对象的静态方法)

    今天很好奇,对null进行强转会不会抛错.做了如下测试得到的结果是, 如果把null强转给对象,是不会抛异常的,本身对象是可以为null的. 但是如果是基本类型,比如 int i = (Integer ...

  8. 阶段3 1.Mybatis_05.使用Mybatis完成CRUD_7 Mybatis中参数的深入-使用实体类的包装对象作为查询条件

    pojo对象就是实体类 综合查询-实体类包装起来做查询 新建实体类QueryVo 提供一个User对象属性,并生成getter和setter 测试 修改dao接口中的返回类型为List<User ...

  9. 使用 go protoc --go_out 输出的 *.pb.go文件时报 undefined: proto.ProtoPackageIsVersion3

    事情是这样的:我参考go的 grpc 实现 https://grpc.io/docs/quickstart/go/ Download the example The grpc code that wa ...

  10. cocos2dx基础篇(19) 基本动作CCAction

    [3.x]     (1)去掉"CC"     (2)新增了一些动作:(精力有限,新增的动作请自行摸索) > EaseBezierAction > EaseQuadra ...