redis区分大小写吗_Redis数据类型、消息模式以及事务

1a2a6309aa7b6f39f36174519454fec2.gif

Redis数据类型

命令大全:http://www.redis.cn/commands.html

存储数据是通过key-value格式存储数据的,其中value可以定义五种数据类型

string、hash、list、set、zset

在 redis 中的命令语句中,命令是忽略大小写的,而 key 是不忽略大小写的

1、string类型

赋值

set key value

取值

get key

取值并赋值

getset key value

递增数字

incr key

递减数字

decr key

增加指定的整数

incrby key increment

减少指定的整数

decrby key decrement

仅当不存在时赋值

setnx key value(设置成功返回1,失败返回0)

查看是否存在某个key

exist key

向尾部追加值(若不存在该键则设置为value,若存在则追加,返回值为追加后字符串的总长度)

append key value

获取键对应值的长度(若键不存在则返回0)

strlen key

同时设置多个键值

mset k1 v1 k2 v2 k3 v3

同时获取多个键值

mget k1 k3

应用:自增主键

2、hash类型

也叫散列类型,它提供了字段和字段值的映射。字段值只能是字符串类型,不支持散列类型、集合类型等其它类型

0b6b45edfeb1129a9dc9a3c7988afaa9.png

赋值

hset key field value(hset命令不区分插入和更新操作,当执行插入操作时hset命令返回1,当执行更新操作时返回 0 。)

设置多个字段值

hmset key field1 value1 field2 value2...

当字段不存在时赋值(类似 HSET,区别在于如果字段存在,该命令不执行任何操作;如果不存在则设置该字段值,并且返回0)

hsetnx key field value

获取一个字段值

hget key field

获取多个字段值

mget key field1 field2...

获取所有字段值

hgetall key

删除字段

hdel key field1 field2...

增加数字

hincrby key field increment

判断字段是否存在

hexists key field

只获取字段名或字段值

hkeys key

hvals key

获取所有字段(包括key和value)

hgetall key

应用:商品信息

注:

string类型和hash类型的区别

hash类型适合存储对象数据,尤其对象属性经常发生【增删改】操作的数据。 

string类型也可以存储对象数据,将java对象转成json字符串进行存储,适合【查询】操作。

3、list类型

ArrayList与LinkedList的区别

ArrayList使用数组方式存储数据,所以根据索引查询数据速度快,而新增或者删除元素时需要涉及到位移操作,所以比较慢。

LinkedList使用双向链表方式存储数据,每个元素都记录前后元素的指针,所以插入、删除数据时只是更改前后元素的指针指向即可,速度非常快。然后通过下标查询元素时需要从头开始索引,所以比较慢,但是如果查询前几个元素或后几个元素速度比较快。

list类型存储一个有序的字符串列表,常用的操作是向列表两端添加元素,或者获得列表的某一个片段。

列表类型内部是使用双向链表( double linked list )实现的,所以向列表两端添加元素的时间复杂度为0(1) ,获取越接近两端的元素速度就越快。这意味着即使是一个有几千万个元素的列表,获取头部或尾部的10条记录也是极快的

左侧添加元素

lpush key value1 value2 value3...

右侧添加元素

rpush key value1 value2 value3...

左侧从start到stop位置取出元素

lrange key start stop

弹出左边元素,并返回该值

lpop key

弹出右边元素,并返回该值

rpop key

获取列表中元素的个数

llen key

删除列表中指定个数的值(count大于0从列表左边开始删除,小于0从右边开始删除,等于0删除所有值为value的元素,返回的是实际删除的个数)

lrem key count value

获得指定索引的元素值

lindex key index

设置指定索引的元素值

lset key index value

应用:商品评论列表

4、set类型

集合类型,数据是不重复且没有顺序。

常用操作是向集合中加入或删除元素、判断某个元素是否存在等。操作的时间复杂度都为 0(1) (集合类型的 Redis 内部是使用值为空的散列表实现)。

添加元素

sadd key member1 member2...

删除元素

srem key member1 member2...

获得集合中的所有元素

smembers key

判断元素是否在集合中

sismember key member

差集key1-key2

sdiff key1 key2

交集key1和key2

sinter key1 key2

并集key1和key2

sunion key1 key2

获取集合中元素个数

scard key

从集合中弹出一个元素。(由于集合是无序的,所有SPOP命令会从集合中随机选择一个元素弹出)

spop key

5、zset类型

在 set 集合类型的基础上,有序集合类型为集合中的每个元素都 关联一个分数 ,这使得我们不仅可以完成插入、删除和判断元素是否存在在集合中,还能够获得分数最高或最低的前N个元素、获取指定分数范围内的元素等与分数有关的操作。

有序集合和列表类型有些相似,都是有序、都可以获得某一个范围的元素;但也有着很大区别(访问速度,内存消耗、元素位置):

列表类型是通过链表实现的,获取靠近两端的数据速度极快,而当元素增多后,访问中间数据的速度会变慢。

有序集合类型使用散列表实现,所有即使读取位于中间部分的数据也很快。

列表中不能简单的调整某个元素的位置,但是有序集合可以修改分数实现

有序集合要比列表类型更耗内存。

增加元素

zadd key score1 member1 score2 member2...

按照元素分数从小到大的顺序返回索引从start到stop之间的所有元素( 如果需要获得元素的分数的可以在命令尾部加上 WITHSCORES 参数)

zrange key start stop

按照元素分数从大到小的顺序返回索引从start到stop之间的所有元素( 如果需要获得元素的分数的可以在命令尾部加上 WITHSCORES 参数)

zrevrange key start stop

获取元素的分数

zcore key member

删除元素(当key存在但不是有序集合类型时,返回一个错误)

zrem key member1 member2...

获得指定分数范围的元素

zrangebyscore key min max [WITHSCORES]

增加某个元素的分数

zincrby key increment member

获取集合中元素的数量

zcard key

获取指定分数范围的元素个数

zcount key min max

应用:商品销售排行榜

6、通用命令

返回满足给定值的所有key

keys pattern

删除key

del key

确认key是否存在

exists key

expire(重点)

    Redis在实际使用过程中更多的用作缓存,然而缓存的数据一般都是需要设置生存时间的,即:到期后数据销毁。

    expire key seconds 设置key的生存时间(单位:秒)key在多少秒后会自动删除

    ttl key 查看key的生存时间

    prersist key 清除生存时间

    prepire key milliseconds 生存时间设置单位为:毫秒    

重命名key

rename oldkey newkey

显示key类型

type key

Redis消息模式

1、队列模式

使用list类型的lpush和rpop实现消息队列

消息接收方如果不知道队列中是否有消息,会一直发送rpop命令,如果这样的话,会每一次都建立一次连接,这样显然不好。

可以使用brpop命令,它如果从队列中取不出来数据,会一直阻塞,在一定范围内没有取出则返回null

2、发布订阅模式

订阅消息(subscribe)

dcff9050538510a0378a344d9bfeeb01.png

subscribe kkb-channel

发布消息(publish)

publish kkb-channel "hello"

Redis事务

1、redis事务介绍

通过MULTI 、EXEC、DISCARD和WATCH、UNWATCH这五个命令来完成的

Redis 的单个命令都是原子性的,所以这里需要确保事务性的对象是命令集合。

Redis 将命令集合序列化并确保处于同一事务的命令集合连续且不被打断的执行

Redis 不支持回滚操作

2、事务命令

MULTI

用于标记事务块的开始

Redis会将后续的命令逐个放入队列中,然后使用EXEC命令原子化地执行这个命令序列。

EXEC

在一个事务中执行所有先前放入队列的命令,然后恢复正常的连接状态

DISCARD

清除所有先前在一个事务中放入队列的命令,然后恢复正常的连接状态。

WATCH

当某个[事务需要按条件执行]时,就要使用这个命令将给定的[键设置为受监控]的状态。

watch key

注意事项:使用该命令可以实现 Redis 的乐观锁

UNWATCH

清除所有先前为一个事务监控的键。

Redis 不支持事务回滚(为什么呢)

大多数事务失败是因为语法错误或者类型错误,这两种错误,在开发阶段都是可以预见的

Redis 为了性能方面就忽略了事务回滚。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值