一、Redis是什么
redis是一个开源的、使用C语言编写的、支持网络交互的、可基于内存也可持久化的Key-Value数据库(非关系型数据库)。
二、为什么要使用Redis
Redis优势有以下几点:
- 速度快,因为数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1);
- 支持丰富数据类型,支持string,list,set,sorted set,hash, bitmaps, hyperloglogs 和 地理空间(geospatial);
- 支持事务,操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行;
- 丰富的特性:可用于缓存,消息,按key设置过期时间,过期后将会自动删除;
三、数据类型使用场景及常用操作命令
1、操作String:
(1)使用场景:
常规key-value缓存应用。常规计数: 微博数, 粉丝数。
(2)常用操作命令:
1、设定key持有指定的字符串value,如果该key存在则进行覆盖操作,总是返回OK
set key value
2、获取key的value
如果与该key关联的value不是String类型,redis将返回错误信息,因为get命令只能用于获取String value;如果该key不存在,返回null。
get key
3、先获取该key的值,然后在设置该key的值
getset key value
4、将指定的key的value原子性的递增1
如果该key不存在,其初始值为0,在incr之后其值为1。如果value的值不能转成整型,如hello,该操作将执行失败并返回相应的错误信息
incr key
5、将指定的key的value原子性的递减1
如果该key不存在,其初始值为0,在incr之后其值为-1。如果value的值不能转成整型,如hello,该操作将执 行失败并返回相应的错误信息。
decr key
6、将指定的key的value原子性增加increment
如果该key不存在,器初始值为0,在incrby之后,该值为increment。如果该值不能转成整型,如hello则失败并返回错误信息
incrby key increment
7、将指定的key的value原子性减少decrement
如果该key不存在,器初始值为0,在decrby之后,该值为decrement。如果该值不能 转成整型,如hello则失败并返回错误信息
decrby key decrement
8、如果该key存在,则在原有的value后追加该值;如果该key不存在,则重新创建一个key/value
append key value
2、操作List
(1)使用场景:
因为list是有序的,比较适合存储一些有序且数据相对固定的数据。如省市区表、字典表等。
(2)常用操作命令:
1、在指定的key所关联的list的头部插入所有的values
如果该key不存在,该命令在插入的之前创建一个与该key关联的空链表,之后再向该链表的头部插入数据。插入成功,返回元素的个数。
lpush key value1 value2...
2、在该list的尾部添加元素
rpush key value1、value2…
3、获取链表中从start到end的元素的值
start、end可为负数,若为-1则表示链表尾部的元素,-2则表示倒数第二个,依次类推…
lrange key start end
4、仅当参数中指定的key存在时(如果与key管理的list中没有值时,则该key是不存在的)在指定的key所关联的list的头部插入value
lpushx key value
5、仅当参数中指定的key存在时(如果与key管理的list中没有值时,则该key是不存在的)在指定的key所关联的list的尾部插入value。
rpushx key value
6、返回并弹出指定的key关联的链表中的第一个元素,即头部元素
lpop key
7、从尾部弹出元素
rpop key
8、将链表中的尾部元素弹出并添加到头部
rpoplpush resource destination
9、返回指定的key关联的链表中的元素的数量
llen key
10、设置链表中的index的脚标的元素值,0代表链表的头元素,-1代表链表的尾元素
lset key index value
3、操作Set
(1)使用场景:
set 的内部实现是一个 value永远为null的HashMap,实际就是通过计算hash的方式来快速排重的,这也是set能提供判断一个成员是否在集合内的原因。在获取交集,并集,差集时可用set,可以计算共同喜好,全部的喜好,自己独有的喜好等功能
(2)常用操作命令:
1、向set中添加数据,如果该key的值有则不会重复添加
sadd key values[value1、value2……]
2、删除set中的指定成员
srem key members[member1、menber2…]
3、获取set中所有的成员
smembers key
4、判断参数中指定的成员是否在该set中,1表示存在,0表示不存在或者该key本身就不存在(无论集合中有多少元素都可以极速的返回结果)
sismember key menber
5、集合的差集运算 A-B,返回key1与key2中相差的成员,而且与key的顺序有关。即返回差集。
sdiff key1 key2
6、集合的交集运算
sinter key1 key2 key3…
7、集合的并集运算
sunion key1 key2 key3…
8、随机返回set中的一个成员
srandmember key
4、操作hash
(1)使用场景:
一般key为ID或者唯一标识,value对应的就是详情了。如商品详情,个人信息详情,新闻详情等
(2)常用操作命令:
1、为指定的key设定field/value对
hset key field value
2、为指定的key设定多个field/value对
hmset key field1 value1 field2 value2 field3 value3
3、返回指定的key中的field的值
hget key field
4、获取key中的多个field值
hmget key field1 field2 field3
5、获取所有的key
hkeys key
6、获取所有的value
hvals key
7、获取key中的所有field 中的所有field-value
hgetall key
8、可以删除一个或多个字段,返回是被删除的字段个数
hdel key field[field…]
9、删除整个list
del key
5、操作sortedset
(1)使用场景:
sorted set多了一个权重参数score,集合中的元素能够按score进行排列。可以做排行榜应用,取TOP N操作
(2)常用操作命令:
1、将所有成员以及该成员的分数存放到sorted-set中。如果该元素已经存在则会用新的分数替换原有的分数。返回值是新加入到集合中的元素个数。(根据分数升序排列)
zadd key score member score2 member2…
2、返回指定成员的分数
zscore key member
3、获得集合中的成员数量
zcard key
4、移除集合中指定的成员,可以指定多个成员
zrem key member[member…]
5、获取集合中角标为start-end的成员,[withscore]参数表明返回的成员包含其分数。
zrange key strat end [withscores]
6、按照排名范围删除元素
zremrangebyrank key start stop
7、按照分数范围删除元素
zremrangescore key min max