redis系统学习

1.什么是redis

Redis是一个开源的、高性能的、基于键值对的缓存与存储系统,通过提供多种键值数据 类型来适应不同场景下的缓存与存储需求。同时 Redis 的诸多高层级功能使其可以胜任消息 队列、任务队列等不同的角色。

Redis是REmote DIctionary Server(远程字典服务器)的缩写。

2.为什么要使用redis(特性)

a.以字典结构存储数据(字典是一些元素的集合,每一个元素都有一个称作为key的域,不同的元素key是不同的)

b.支持内存存储和数据持久化
redis的数据存储在内存中,由于内存的读写速度远快于硬盘,所以redis对于其他数据库有着明显的性能优势。
数据存储在内存中容易导致数据丢失,所以redis支持数据的持久化,可以将数据异步写入硬盘中。

c.功能丰富
c.1 redis可以为每一个元素的key设置生存时间,生存时间到期后自动删除key,并且支持持久化和有着5种丰富的数据类型,所以常用来作为缓存系统。
c.2 利用redis的列表类型键可以实现高效的队列。
c.3 redis支持“发布/订阅”的消息模式,可以实现聊天室系统。

d.简单稳定
直观的存储结构和提供了大量的类库,这些类库很好的封装了redis命令,使得程序和redis交互十分简单。
redis是C语言开发,只有3万多行代码,并且是开源的,方便开发人员学习已经优化。

3.redis数据类型详解

全局命令:
获取key:KEYS pattern
删除key:DEL key [key…]
判断一个键是否存在:EXISTS key
获取键值类型:TYPE key

3.1 字符串类型
字符串类型是 Redis 中最基本的数据类型,它能存储任何形式的字符串,包括二进制数 据。你可以用其存储用户的邮箱、JSON化的对象甚至是一张图片。一个字符串类型键允许 存储的数据的最大容量是512 MB。字符串类型是其他4种数据类型的基础,其他数据类型和字符串类型的差别从某种角度 来说只是组织字符串的形式不同,例如,列表是以列表的形式存储字符串,集合以集合的形式来存储字符串。
相关命令:
赋值:SET key value
取值:GET key
同时设置多个键值:MSET key1 value1 key2 value2 key3 value3
同时获取多个键值:MGET key1 key2 key3 key4
递增数字(每次加一):INCR key
字符串类型可以存储任何形式的字符串,当存储的字符串是整数类型形式的,redis提供了INCR命令,其作用是让键值递增,并返回递增后的值。
增加指定的整数:INCRBY key increment
递减数字(每次减一):DECR key
减少指定的整数:DECRBY key increment
增加指定的浮点数:INCRBYFLOAT key increment
向尾部追加值:APPEND key value (返回值是追加后字符串长度长度,如果value包含空格,value需要用双引号。)
获取字符串长度:STRLEN key
判断key是否存在:EXISTS key
位操作:一个字节由8个二进制位组成,Redis提供了4个命令可以直接对二进制位进行操作
GETBIT key offset
SETBIT key offset value
BITCOUNT key [start] [end]
BITOP operation destkey key [key …]

3.2散列类型
redis采用字典结构以键值对的形式存储数据,而散列类型(hash)的键值也是一种字典结构,存储了字段(key)和字段值(value)的映射,但字段值只能是字符串,不能是其他数据类型。键值对的个数最多为2^32-1个。
相关命令:
赋值:HSET key field value (字段已经存在的,会更新value)
字段不存在是赋值:HSETNX key field value (字段已经存在的,不会更新value)
多个字段同时赋值:HMSET key field1 value1 field2 value2 field3 value3
取单个字段的值:HGET key field
取多个字段的值:HMGET key field1 field2 field3
取所以字段的值:HGETALL key
增加数字:HINCRBY key field increment (没有HINCR,HDECR,HDECRBY命令)
判断field是否存在:HEXISTS key field
删除字段:HDEL key field
只获取字段名:HKEYS key
只获取字段值:HVALS key
获取字段的数量:HLEN key
3.3列表类型
列表类型可以存储一个有序的字符串列表,内部使用双向链表实现,所以向两端添加元素的时间复杂度是O(1),数据是有序不唯一的,最多可以存储2^31-1。
相关命令:
向列表左边添加元素:LPUSH key value [value…]
向列表右边添加元素:RPUSH key value [vlaue…]
从列表左边弹出元素:LPOP key
从列表右边弹出元素:RPOP key
获取列表的元素个数:LLEN key
获取列表片段:LRANGE key start stop (LRANGE命令支持负索引,表示从右边开始计算序数,例如:”-1“表示右边的第一个元素,”-2“表示右边的第二个元素,LRANGE numbers 0 -1 可以获取列表中的所有元素)
删除列表中指定的值:LREM key count value
LREM命令会删除列表中前count个值为value的元素,返回值是实际删除的元素个数。根 据count值的不同,LREM命令的执行方式会略有差异。
(1)当 count > 0时 LREM 命令会从列表左边开始删除前 count 个值为 value的元素。
(2)当 count < 0时 LREM 命令会从列表右边开始删除前|count|个值为 value 的元素。
(3)当 count = 0是 LREM命令会删除所有值为 value的元素。
获取指定索引的值:LINDEX key index
设置指定索引的值:LSET key indx value
保留列表指定的片段:LTRIM key start top (LTRIM 命令可以删除指定索引范围之外的所有元素)
向列表插入元素:LINSERT key BEFORE|AFTER pivot value
LINSERT 命令首先会在列表中从左到右查找值为 pivot 的元素,然后根据第二个参数是 BEFORE还是AFTER来决定将value插入到该元素的前面还是后面。
将元素从一个列表转到另一个列表:RPOPLPUSH source destination
先执行RPOP命令再执行LPUSH命令。RPOPLPUSH命令会先从source列表类型键的右边弹出一个元素,然后将其加入到destination列表类型键的左边,并返回这个元素的值,整个过程是原子的。
3.4集合类型
集合类型数据是无序唯一的,最多可以存储2^32-1条数据。
相关命令:
添加成员:SADD key member[member…]
获得集合中的所有成员:SMEMBERS key
判断元素是否在集合中:SISMEMBER key member
集合间的运算:
差集运算:SDIFF key [key…] (集合A与集合B的差集表示为A?B,代 表所有属于A且不属于B的元素构成的集合)
交集运算:SINTER key [key…] (集合A与集合B的交集表示为A ∩ B, 代表所有属于A且属于B的元素构成的集合)
并集运算:SUNION key [key…] (集合A与集合B的并集表示为A∪B, 代表所有属于A或属于B的元素构成的集合)
获取集合中的成员个数:SCARD key
进行集合运算并将结果存储:
SDIFFSTORE destination key [key …]
SDIFFSTORE命令和SDIFF命令功能一样,唯一的区别就是前者不会直接返回运算结果, 而是将结果存储在destination键中。
SINTERSTORE destination key [key …]
SDIFFSTORE命令常用于需要进行多步集合运算的场景中,如需要先计算差集再将结果 和其他键计算交集。
SUNIONSTORE destination key [key …]
SINTERSTORE和SUNIONSTORE命令与之类似,不再赘述。
随机获得集合中的元素:SRANDMEMBER key [count] (还可以传递count参数来一次随机获得多个元素)
从集合中弹出一个元素:SPOP key
3.5有序集合类型
在集合类型的基础上有序集合类型为集合中的每个元素都关联了一个分数,使得我们不仅可以完成插入,删除和判断元素是否存在等集合类型支持的操作,还能狗获得分数最高的前N个元素,获得指定分数范围内的元素等与分数相关的操作,有序集合的每个元素虽然不同,但他们的分数是可以相同的。使用散列表和跳跃表实现的,所以读取中间元素的速度也非常快。
相关命令:
增加元素:ZADD key score member [score member …]
获取元素的分数:ZSCORE key memeber
获得排名在某个范围的元素列表:ZRANGE key start stop [WITHSCORES]
获得指定分数范围的元素:ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count] (如果希望分数范围不包含端点值,可以在分数前加上“(”符号。min和max还支持无穷大,同ZADD命令一样,-inf和+inf分别表示负无穷和正无穷。如果需要同时获得元素的分数的话可以在 ZRANGE 命令的尾部加上 WITHSCORES 参 数,LIMIT offset count 与 SQL 中的用法基本相同,即在获得的元素列表的基础上向后偏移offset个元素,并且只获 取前count个元素。)
增加某个元素的分数:ZINCRBY key increment member (如果指定的元素不存在,Redis 在执行命令前会先建立它并将它的分数赋为 0 再执行操作。)
获得集合中元素的数量:ZCARD key
获得指定分数范围内的元素个数:ZCOUNT key min max
删除一个或多个元素:ZREM key member [member …]
按照排名范围删除元素:ZREMRANGEBYRANK key start stop (按照元素分数从小到大的顺序(即索引 0表示最小的值) 删除处在指定排名范围内的所有元素,并返回删除的元素数量。)
按照分数范围删除元素:ZREMRANGEBYSCORE key min max (会删除指定分数范围内的所有元素)
获得元素的排名:ZRANK key member
计算有序集合的交集:ZINTERSTORE destination numkeys key [key …] [WEIGHTS weight [weight …]] [AGGREGATE SUM|MIN|MAX]

发布了8 篇原创文章 · 获赞 0 · 访问量 202

猜你喜欢

转载自blog.csdn.net/weixin_43175427/article/details/104818830
今日推荐