Redis的基本数据类型

Redis的基本数据类型

Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。 Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)。

字符串(Strings)

字符串是一种最基本的Redis值类型。Redis字符串是二进制安全的,这意味着一个Redis字符串能包含任意类型的数据,例如: 一张JPEG格式的图片或者一个序列化的Ruby对象。

一个字符串类型的值最多能存储512M字节的内容。

你可以用Redis字符串做许多有趣的事,例如你可以:

  • 利用INCR命令簇(INCR, DECR, INCRBY)来把字符串当作原子计数器使用。
  • 使用APPEND命令在字符串后添加内容。
  • 将字符串作为GETRANGE 和 SETRANGE的随机访问向量。
  • 在小空间里编码大量数据,或者使用 GETBIT 和 SETBIT创建一个Redis支持的Bloom过滤器

常用命令

描述命令备注
设置一个key的valueset key value
设置一个key的valueset key value nx只有当这个key不存在时,再进行插入
set key value xx只有当这个key存在时,再更新这个key的值
设置两个key的valuemset key1 value1 key2 value2新增两个key
msetnx key1 value1 key2 value2只有当这个key不存在时,再进行新增,
原子性操作,一个失败全部失败
在key后拼接值append key value
getrange key 0 4正向索引
getrange key 0 -1从第一个元素取到最后一个元素,-1为负向索引第一位
替换字符串setrange key 5 xxx
查看字符串长度strlen key
查看value编码object encoding key
将储存的值加上1incr key
decrby key 10将储存的值减去10
返回老的值,存进去新的值getset key value
设置该key的字节下的二进制索引对应值setbit key offset valueoffset:二进制索引下标
在该key的给定字节区间中查找二进制值的索引位 ,返回的是第一次出现的位置bitops key bit start endbit:所查找的二进制的值
start:开始检索的字节索引下标
end:结束检索的字节索引下标
在该key的给定字节区间中查找二进制每位下1出现的次数bitcount key start endstart:开始检索的字节索引下标
end:结束检索的字节索引下标
将多个key的二进制位进行按位与
或者按位或操作
bitop operation destkey k1 k2…operation:and :有0则0,全1为1
or:有1则1

列表(Lists)

Redis列表是简单的字符串列表,按照插入顺序排序。 你可以添加一个元素到列表的头部(左边)或者尾部(右边)。

LPUSH 命令插入一个新元素到列表头部,而RPUSH命令 插入一个新元素到列表的尾部。当 对一个空key执行其中某个命令时,将会创建一个新表。 类似的,如果一个操作要清空列表,那么key会从对应的key空间删除。这是个非常便利的语义, 因为如果使用一个不存在的key作为参数,所有的列表命令都会像在对一个空表操作一样。

常用命令

描述命令备注
添加元素lpush key value1 value2…lpush中的l :代表依次从左边添加元素
rpush key value1 value2…rpush中的r : 代表依次从右边添加元素
弹出一个元素lpop key从左边弹出一个元素
l操作:(同向命令)栈:后进先出
rpop key从右边弹出一个元素
r操作:(反向命令)队列:先进先出
取出元素lrange key 0 -1取出所有元素
l代表list,0和-1代表索引,正索引从0开始
负索引从-1开始
lindex key index取出对应下标的元素
更改元素lset key index更改对应下标的元素
移除元素lrem key count value将该key中移除count个value值
如果count为正数:从前往后移除
如果count为0:移除所有
如果count为负数:从后往前移除
ltrim key start end移除start和end两端的数据
插入元素linsert key berfore|after pivot value在该key的pivot(目标值)的前|后边
插入value,如果有多个pivot,那么在
第一个pivot前|后插入元素
统计list中有多少元素llen key
订阅keyblpop key … timeout订阅一个或多个key获取值,如果key不存在,
则进行阻塞等待,可以不设timeout

集合(Sets)

Redis集合是一个无序的字符串合集。你可以以O(1) 的时间复杂度(无论集合中有多少元素时间复杂度都为常量)完成 添加,删除以及测试元素是否存在的操作。

Redis集合有着不允许相同成员存在的优秀特性。向集合中多次添加同一元素,在集合中最终只会存在一个此元素。实际上这就意味着,在添加元素前,你并不需要事先进行检验此元素是否已经存在的操作。

一个Redis列表十分有趣的事是,它们支持一些服务端的命令从现有的集合出发去进行集合运算。 所以你可以在很短的时间内完成合并(union),求交(intersection), 找出不同元素的操作。

常用命令

描述命令备注
插入元素sadd key value…
查询元素smembers key
删除元素srem key value…移除该key中的value
获取两个key的交集sinter key…
获取两个key的交集存放在新的key中sinterstore key key1 key2取key1和key2的交集放在新创建的key中,
避免IO
获取多个key的并集sunion key…
获取多个key的并集存放在新的key中sunionstore key key1 key2
获取多个key的差集sdiff key1 key2通过调整key的位置,获取不同的外差
随机取key中元素srandmember key countcount为正数:取出一个去重的结果集
(不能超过已有集)
count为负数:取出一个带重复的结果集
(一定会满足你要的数量)
count为0:不返回
弹出一个元素spop key

哈希(Hashes)

Redis Hashes是字符串字段和字符串值之间的映射,所以它们是完美的表示对象(eg:一个有名,姓,年龄等属性的用户)的数据类型。

常用命令

描述命令备注
插入元素set key::param value给key增加属性param,并设置value
查看元素keys key*查看该key所有属性

有序集合(Sorted sets)

Redis有序集合和Redis集合类似,是不包含 相同字符串的合集。它们的差别是,每个有序集合 的成员都关联着一个评分,这个评分用于把有序集 合中的成员按最低分到最高分排列。

使用有序集合,你可以非常快地(O(log(N)))完成添加,删除和更新元素的操作。 因为元素是在插入时就排好序的,所以很快地通过评分(score)或者 位次(position)获得一个范围的元素。 访问有序集合的中间元素同样也是非常快的,因此你可以使用有序集合作为一个没用重复成员的智能列表。 在这个列表中, 你可以轻易地访问任何你需要的东西: 有序的元素,快速的存在性测试,快速访问集合中间元素!

描述命令备注
插入元素zdd key score value1 score value2…score:评分(用于排序)
查看元素(不带评分)zrange key start endstart、end:元素下标(默认按评分从小到大排序)
zrevrange key start end按评分从大到小排序
查看元素(带评分)zrange key start end withscores
按评分查看元素zrangebyscore key min maxmin、max:评分
取出key里value对应的分值zscore key value
取出key里value对应的排名zrank key value
给key的value对应评分增加数zincrby key number value
查看并集(默认将评分求和)
存放在新的key中
zunionstore key numberkey key1 key2…numberkey:几个key合并
zunionstore key numberkey key1 key2… weight number1 number2number1、number2:权重(例:如果为0.5就取评分的一半)
zunionstore key numberkey key1 key2… weight number1 number2 aggregate num|max|min评分求和|取最大|取最小
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

像鸟一样菜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值