Redis知识点整理-从入门到与SpringBoot集成实践(附带目录)

1 什么是Redis

    Redis 是 C 语言开发的一个开源的(高性能键值对(key-value)的内存数据库,可以用作数据库、缓存、消息中间件等。它是一种 NoSQL(not-only sql,泛指非关系型数据库)的数据库。性能优秀,数据在内存中,读写速度非常快。单进程单线程,是线程安全的。丰富的数据类型,支持字符串(strings)、散列(hashes)、列表(lists)、集合(sets)、有序集合(sorted sets)等。支持数据持久化。可以将内存中数据保存在磁盘中,重启时加载。主从复制,哨兵,高可用。可以用作分布式锁。可以作为消息中间件使用,支持发布订阅。
Redis 是单线程的!
    1、误区1:高性能的服务器一定是多线程的?
    2、误区2:多线程(CPU上下文会切换!)一定比单线程效率高! 先去CPU>内存>硬盘的速度要有所了解!
为什么Redis是单线程的速度还那么快?
    1 Redis是将所有的数据全部放在内存中的,所以说使用单线程去操作效率就是高的;
    2 当多线程的时候要有线程切换的问题,同时要考虑线程安全问题,这些都是耗时的。

2 Redis 能为我们做什么?

    1 缓存,毫无疑问这是Redis当今最为人熟知的使用场景。再提升服务器性能方面非常有效;
    2排行榜,如果使用传统的关系型数据库来做这个事儿,非常的麻烦,而利用Redis的SortSet数据结构能够非常方便搞定;
    3计算器/限速器,利用Redis中原子性的自增操作,我们可以统计类似用户点赞数、用户访问数等,这类操作如果用MySQL,频繁的读写会带来相当大的压力;限速器比较典型的使用场景是限制某个用户访问某个API的频率,常用的有抢购时,防止用户疯狂点击带来不必要的压力;
    4 好友关系,利用集合的一些命令,比如求交集、并集、差集等。可以方便搞定一些共同好友、共同爱好之类的功能;
    5 简单消息队列、消息中间键,除了Redis自身的发布/订阅模式,我们也可以利用List来实现一个队列机制,比如:到货通知、邮件发送之类的需求,不需要高可靠,但是会带来非常大的DB压力,完全可以用List来完成异步解耦;
    6 持久化RDB AOF;
    7 分布式锁;

3 五种基本数据类型

    Redis的键值可以使用物种数据类型:字符串,散列表,列表,集合,有序集合。本文详细介绍这五种数据类型的使用方法。
字符串类型
    字符串是Redis中最基本的数据类型,它能够存储任何类型的字符串,包含二进制数据。可以用于存储邮箱,JSON化的对象,甚至是一张图片,一个字符串允许存储的最大容量为512MB。字符串是其他四种类型的基础,与其他几种类型的区别从本质上来说只是组织字符串的方式不同而已。
基本命令
字符串操作:

SET 赋值,用法: SET key value
GET 取值,用法: GET key
INCR 递增数字,仅仅对数字类型的键有用,相当于Java的i++运算,用法: INCR key
INCRBY 增加指定的数字,仅仅对数字类型的键有用,相当于Java的i+=3,用法:INCRBY key increment,意思是key自增increment,increment可以为负数,表示减少。
DECR 递减数字,仅仅对数字类型的键有用,相当于Java的i–,用法:DECR key
DECRBY 减少指定的数字,仅仅对数字类型的键有用,相当于Java的i-=3,用法:DECRBY key decrement,意思是key自减decrement,decrement可以为正数,表示增加。
INCRBYFLOAT 增加指定浮点数,仅仅对数字类型的键有用,用法:INCRBYFLOAT key increment
APPEND 向尾部追加值,相当于Java中的”hello”.append(“ world”),用法:APPEND key value
STRLEN 获取字符串长度,用法:STRLEN key
MSET 同时设置多个key的值,用法:MSET key1 value1 [key2 value2 ...]
MGET 同时获取多个key的值,用法:MGET key1 [key2 ...]

散列类型

    散列类型相当于Java中的HashMap,他的值是一个字典,保存很多key,value对,每对key,value的值个键都是字符串类型,换句话说,散列类型不能嵌套其他数据类型。一个散列类型键最多可以包含2的32次方-1个字段。
基本命令:

HSET 赋值,用法:HSET key field value
HMSET 一次赋值多个字段,用法:HMSET key field1 value1 [field2 values]
HGET 取值,用法:HSET key field
HMGET 一次取多个字段的值,用法:HMSET key field1 [field2]
HGETALL 一次取所有字段的值,用法:HGETALL key
HEXISTS 判断字段是否存在,用法:HEXISTS key field
HSETNX 当字段不存在时赋值,用法:HSETNX key field value
HINCRBY 增加数字,仅对数字类型的值有用,用法:HINCRBY key field increment
HDEL 删除字段,用法:HDEL key field
HKEYS 获取所有字段名,用法:HKEYS key
HVALS 获取所有字段值,用法:HVALS key
HLEN 获取字段数量,用法:HLEN key

列表类型

    列表类型(list)用于存储一个有序的字符串列表,常用的操作是向队列两端添加元素或者获得列表的某一片段。列表内部使用的是双向链表(double linked list)实现的,所以向列表两端添加元素的时间复杂度是O(1),获取越接近列表两端的元素的速度越快。但是缺点是使用列表通过索引访问元素的效率太低(需要从端点开始遍历元素)。所以列表的使用场景一般如:朋友圈新鲜事,只关心最新的一些内容。借助列表类型,Redis还可以作为消息队列使用。
基本命令

LPUSH 向列表左端添加元素,用法:LPUSH key value
RPUSH 向列表右端添加元素,用法:RPUSH key value
LPOP 从列表左端弹出元素,用法:LPOP key
RPOP 从列表右端弹出元素,用法:RPOP key
LLEN 获取列表中元素个数,用法:LLEN key
LRANGE 获取列表中某一片段的元素,用法:LRANGE key start stop,index从0开始,-1表示最后一个元素
LREM 删除列表中指定的值,用法:LREM key count value,删除列表中前count个值为value的元素,当count>0时从左边开始数,count<0时从右边开始数,count=0时会删除所有值为value的元素
LINDEX 获取指定索引的元素值,用法:LINDEX key index
LSET 设置指定索引的元素值,用法:LSET key index value
LTRIM 只保留列表指定片段,用法:LTRIM key start stop,包含start和stop
LINSERT 像列表中插入元素,用法:LINSERT key BEFORE|AFTER privot value,从左边开始寻找值为privot的第一个元素,然后根据第二个参数是BEFORE还是AFTER决定在该元素的前面还是后面插入value
RPOPLPUSH 将元素从一个列表转义到另一个列表,用法:RPOPLPUSH source destination

集合类型

    集合在概念在高中课本就学过,集合中每个元素都是不同的,集合中的元素个数最多为2的32次方-1个,集合中的元素师没有顺序的。
基本命令

SADD 添加元素,用法:SADD key value1 [value2 value3 ...]
SREM 删除元素,用法:SREM key value2 [value2 value3 ...]
SMEMBERS 获得集合中所有元素,用法:SMEMBERS key
SISMEMBER 判断元素是否在集合中,用法:SISMEMBER key value
SDIFF 对集合做差集运算,用法:SDIFF key1 key2 [key3 ...],先计算key1和key2的差集,然后再用结果与key3做差集
SINTER 对集合做交集运算,用法:SINTER key1 key2 [key3 ...]
SUNION 对集合做并集运算,用法:SUNION key1 key2 [key3 ...]
SCARD 获得集合中元素的个数,用法:SCARD key
SDIFFSTORE 对集合做差集并将结果存储,用法:SDIFFSTORE destination key1 key2 [key3 ...]
SINTERSTORE 对集合做交集运算并将结果存储,用法:SINTERSTORE destination key1 key2 [key3 ...]
SUNIONSTORE 对集合做并集运算并将结果存储,用法:SUNIONSTORE destination key1 key2 [key3 ...]
SRANDMEMBER 随机获取集合中的元素,用法:SRANDMEMBER key [count]&#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值