redis的数据结构

数据类型string

  • String是Redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value。
  • String类型是二进制安全的(序列化和反序列化后的结果是一致的)。意味着Redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。
  • String类型是Redis最基本的数据类型,一个Redis中字符串value最多可以是512M

get <key>: 查询对应键值

set <key>: 添加键值对

append <key> <value>: 把值追加到原值的末尾  ,不是相加  若key不存在会直接创建并赋值

strlen <key>: 获取值的长度 (单位字节)

setnx <key> <value>: 即key不存在会直接创建并赋值,存在就不进行操作

incr <key> :   原子性的加1 不会被打断,将 key 中储存的数字值增1,只能对数字值操作,如果为空,新增值为1

decr <key> : 将 key 中储存的数字值减1只能对数字值操作,如果为空,新增值为-1

incrby /decrby <key> <步长> : 将key 中存储的数字值增减,自定义步长   如: incrby k1 100 表示一次性增减100

mset <key1><value1> <key2><value2>.....   : MSET命令是一个原子(atomic)操作, 所有给定键key都会在同一时间内被设置, 不会出现某些键key被设置了,而有一些键key没有被设置的情况

mget <key1><key2>....  : MGET命令将返回一个列表, 列表中包含了所有给定键的值。如果给定的键里面, 有某个键不存在, 那么这个键对应的值将以特殊值 (nil)表示

msetnx <key1><value1> <key2><value2>...: 同时设置一个或多个key-value对,当且仅当所有给定key都不存在才能成功(具有原子性)

getrange <key><起始位置><结束位置>: 获取值的范围,类似java中的substring    (前后都包括)

setrange <key> <起始位置><value> :  从起始位置开始覆盖原来的值

setex <key><过期时间><value> : 设值的同时设置超时时间

getset <key><value> :  获取旧值的同时用新值代替旧值

数据类型List

  • 有序可以重复
  • 单键多值
  • Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边),它的底层实际是个双向链表,支持双向操作(java中是双向链表只支持单向操作),对两端的操作性能很高,通过索引下标的操作中间的节点性能会较差。
  • list类型的lpop和rpush(或者反过来,lpush和rpop)能实现队列的功能,故而可以用Redis的list类型实现简单的点对点的消息队列。不过我不推荐在实战中这么使用,因为现在已经有Kafka、NSQ、RabbitMQ等成熟的消息队列了,它们的功能已经很完善了,除非是为了更深入地理解消息队列,不然我觉得没必要去重复造轮子
  • Redis Rpop 命令用于移除列表的最后一个元素,返回值为移除的元素。brpop是rpop的阻塞版本。Redis Brpop 命令移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止

lpush/rpush <key><value1><value2><value3> : 从左边/右边插入一个或多个值

lpop/rpop <key> : 从左边/右边吐出一个值  注意:先吐出的是最后进入的那个值。如果值都吐完了,键也就消亡了

lpoplpush <key1><key2> : 从<key1>列表右边吐出一个值,插到<key2>列表左边

lrange <key> <index> : 按照索引下标获得元素(从左到右) ,如: lrange k2 0  1   表示获取下标0-1 的元素, lrange k2 0  -1  表示获取k2集合中的全集

lindex <key> <index> : 按照索引下标获得元素(从左到右)

linsert <key> before/after <value><newvalue> : 在旧值(任何元素)的左边/右边插入新值

lrem <key><n><vlaue> : 从左边删除n个value (从左到右) 如:lrem l2 2 A 表示从左边起删除2个A元素

实例:

// 错误信息入redis队列
try {
    redisSentinelProxy.Lpush(RedisKeyType.ERROR_MSG.getCode(), value);
} catch (Exception e) {
    logger.error("错误信息入redis队列异常:{}", e);
}


// 定时任务监听队列处理错误信息
Vaule orderAcess = redisSentinelProxy.bRpop(RedisKeyType.ORDER_ERROR_MSG.getCode(),0, Value.class);

数据类型set

  • set中的元素是无序的,不允许重复的
  • Redis的Set是string类型的无序集合。它底层其实是一个value为null的hash表,所以添加,删除,查找的复杂度都是O(1)

sadd <key><value1><value2>:  将一个或多个member元素加入到集合key中,已存在于集合的member元素将被忽略

smembers <key>: 取出该集合的所有值

sismember <key><value>:  判断集合<key>是否为含有该<value>值,有返回1,没有返回0

scard <key> : 返回该集合的元素个数

srem <key><vlaue1><value2> : 删除集合中的一个或多个元素

spop <key> : 随机从集合中吐出一个值 ,吐出后集合中就没了  如: spop k1 2 表示随机吐2个 

srandmember <key><n> : 随机从该集合中取出n个值,不会从集合中删除

smove <key1><key2><value> : 将key1集合里的<value> 值移到key2集合里 (是移动不是复制)

sinter <key1><key2> : 返回两个集合的交集元素

sunion <key1><key2> : 返回两个集合的并集元素

sdiff   <key1><key2>   : 返回两个集合的差集元素

数据类型 hash

  • Redis  hash 是一个键值对集合。 value 值本身也是一个k-v
  • Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。
  • 类似Java里面的Map<String,Object>

hset <key><field><value> : 给<key>集合中的<field>键赋值<value>,第二次添加会覆盖原来的值

hget <key1>  <field> : 从<key1>集合<field> 取出 value

hmset <key1>  <field1> <value1> <field2> <value2>... : 批量设置hash的值

hexists key <field> : 查看哈希表 key 中,给定域 field 是否存在

hkeys <key> : 列出该hash集合的所有field

hvals <key> : 列出该hash集合的所有value

hincrby <key><field><increment> : 为哈希表key中的域field的值上增量increment

hsetnx <key><field><value> : 将哈希表key中的域field的值设置为value,当且仅当域field不存在

数据类型 zset

  • 排好序的集合不能重复,score可以重复
  • zset 在set 集和基础上增加了一个分值(权重),用于排序、统计、区间查找
  • Redis有序集合zset与普通集合set非常相似,是一个没有重复元素的字符串集合。不同之处是每个成员都关联了一个评分(score) ,这个评分(score)被用来按照从最低分到最高分的方式排序集合中的成员。集合的成员是唯一的,但是评分可以是重复了
  • 因为元素是有序的, 所以你也可以很快的根据评分(score)或者次序(position)来获取一个范围的元素。访问有序集合的中间元素也是非常快的,因此你能够使用有序集合作为一个没有重复成员的智能列表

 

zadd <key><score1><value1><score2><value2>... : 将一个或多个 member 元素及其 score 值加入到有序集 key 当中

zrange <key><start> <stop> : 返回有序集合key中,下标在start 和stop之间的元素(正序)

                             zrevrange 表示逆序输出  

                             取热度前10名:用score排序,用zrevrange取前10名 

                             zrange key 0 -1 返回集合中全部的内容     

zrangebyscore key min max  : 返回所有score 值介于 min 和 max之间的成员(包含min和max 正序输出)

                            zrevrangebyscore 表示逆序输出  

                            工作中用的是这个而不是 zrange

zincrby <key><increment><value> : 为元素的score加上增量

zrem <key><value> : 删除该集合中,指定值的元素

                    redis中没有update操作,用zrem + zadd代替更新单个数据

zcount <key><min><max> : 统计该集合,score区间内的元素个数

zcard <key> : 获取集合中元素的个数

zrank <key><value> : 返回该值在集合中的排名,从0开始。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值