【Redis学习笔记】

redis命令中心(中文)
redis官网
1、基于内存的数据存储系统

2、基本数据类型:字符串、列表、集合、有序集合、哈希

3、五高级输数据类型:消息队列、地理空间、HyperLogLog、位图、位域

4、单例类无论调用多少次调用对象的方法,得到的结果还是内存中唯一的对象
使用super()new(cls)

5、redis中的中文都是使用二进制字符存储的,想要正常显示中文字符,则启动时加–raw,即redis-cli --raw

6、TTL key,返回值-1为没有设置过期时间,-2表示已经过期了

7、expire,设置过期时间

8、SETEX key time value:设置带有过期时间的键值对

9、SETNX key value:如果键已经存在,则此命令不做任何动作,如果不存在则设置

10、MSETNX key1 value1 key2 value2:具有原子性,要么都成功,要么都失败

11、keys *:获取所有的的key

12、redis不支持回滚,redis事务不满足原子性

13、redis事务执行失败时,会继续执行余下的命令

14、redis事务的命令出错时,则所有的命令不会被执行。

列表list

1、LPUSH list value:list左添加元素value

2、LRANGE list 0 -1:查询list所有元素

3、RPUSH list value:list右添加元素value

4、LINDEX list index:获取指定下标index的值

5、LPOP list:从队列的左边出队一个元素

6、LREM list number value:根据value移除指定的值,并移除number个,如果list中value的数量小于number个,则全部删除并返回删除的数量

7、LTRIME list start end:截取list[start:end]

8、 RPOPLPUSH oldlist newlist:移除列表oldlist中最后一个元素到newlist中

9、LSET list index value:更新list中下标为index的值为value

10、LINSERT list [before|after] 元素1 value:在list的元素1之前或者之后插入value

集合set

1、SADD set value,设置集合set

2、SMEMBERS set,查看集合中的元素

3、SISMEMBER set values:查看value是否在集合set中

4、SREM set value:删除集合中的元素value

5、SRANDMEMBER set member:随机显示member个set中的元素,不写member则默认1

6、SPOP member:随机删除member个元素,不写member就随机删除

7、SMOVE oldset newset value:指定oldset中元素value移动到newset中,如果newset已存在,则向后添加,不存在则创建添加

8、SDIFF set1 set2:set1和set2之间的差集

9、SINTER set1 set2:sert1和set2之间的交集

10、SUNION set1 set2:set1和set2的并集

有序集合sorted set(由分数和成员组成)

1、ZADD zset score mumber:添加集合元素

2、ZRANGE zset start end:查看集合[start: end]中的元素,只输出成员,不输出分数

3、ZRANGE zset start end WITHSCORES:输出带分数的集合

4、ZSCORE zset mumber:查看成员mumber的分数

5、ZRANK zset mumber:查看成员mumber的排序注意:有序集合中的排序是从小到大来排序的,返回的是排序的index

6、ZREVRANK zset mumber:返回从大到小排序的index

哈希HASH

1、HSET hashname key value:创建哈希中的键值对

2、HFET hashname key:获取哈希中某个键的value

3、HDEL hashname key:删除hash中的某个键值对

4、HGETALL hashname :获取该hashname所有的键值对

5、HEXISTS hashname key:判断该hash中是否存在某个键,(1:存在,0:不存在)

6、HKEYS hashname:获取所有键

7、HLEN hashname:索取所有键值对的数量

发布订阅模式

1、SUBCRIBE channel:订阅频道,订阅频道的终端可以有多个

2、PUBLISH channel:向频道发布消息

消息队列Stream(解决了订阅模式的弊端,可以持久化存储)

1、XADD stream * key value:*表示自动生成递增消息id,如XADD stream1 * course python

1.1、XADD stream number key value:自定义id为number的消息,如XADD stream1 123-1 course python
注意:id的格式需要:“整数-整数”,第一个整数代表时间戳,第二个整数代表序列号

2、XLEN stream:看到消息的数量

3、XRANGE stream - +:- +代表显示所有的消息

4、XDEL stream id:删除该id的消息

5、XTRIM srteam MXALEN 0:代表删除所有的消息,返回值为删除消息的数量,即所有消息的数量

6、XRANGE COUNT number BLOCK milesecond STREAM stream 0
其中:COUNT number:代表一次读取number条消息
BLOCK milesecond:代表如果没有消息,堵塞milesecond毫秒
STREAM stream 0:代表读取stream流,0代表index,从头读取,1就是从第二条数据读取,$代表读取最新的

7、XGROUP CREATE stream group id:创建消费者组

8、XINFO GROUPS stream:返回组的相关信息

9、XGROUP CRETAECONSUMER stream group consumer1:为group添加一个消费者

10、XREADGROUP GROUP group consumer COUNT 2 BLOCK 1000 STREAMS stream

地理空间Geospatial(存储地理位置信息的存储结构,并且可以对地理位置计算操作)

1、GEOADD geo 经度 维度 cityname:可以向geo添加一个地理位置信息

2、 GEOADD geo 经度 维度 cityname 经度 维度 name 经度 维度 name :添加多个地理位置信息

3、GEOPOS geo cityname:获取cityname的经纬度

4、GEODIST geo cityname1 cityname2 [M|KM|FT|MI]::返回两个城市间的直线距离,默认单位是米

5、GEOSEARCK geo FROMMEMBER cityname BYRADIUS 300 KM:围绕cityname圆形300KM内的城市

6、GEORADIUS city 120 38 1000 km:查看指定经纬度的1000KM范围内有哪些城市

7、GEORADIUS city 120 38 1000 km withcoord withdist withhash count 2
withcoord:返回城市的name
withdist指定返回城市的’经纬度‘值
withhash指定返回城市的’经纬度‘的hash值,两个城市的hash值越’像‘,证明城市距离越近
count 2:指定返回城市的数量

8、GEORADIUSMEMBER city cityname 100 KM:查看cityname100KM范围内有哪些城市

9、ZREM city cityname:删除name为cityname的城市

HyperLogLog(用来做 基数统计的算法)

基数:一个集合中不重复元素的个数

1、PFADD key name1 name2 。。。:向key中添加元素

2、PFCOUNT key:查看key值的基数

3、PFMERGE newkey key1 key2:合并两个key,并将结果放到newkey中

位图(BitMap)

1、SETBIT key 0 1:设置某个偏移量的值,将key偏移量0的位置设置为1,最后两位就是:下标XX位置上设置为XX(后面的XX只能为0,1)

2、GITBIT key index:索取key偏移量为index的值

3、SET key 0101011:后面的0101011按照顺序存储进去

4、BITCOUNT key:统计key中有几个1

5、BITPOS key 0 start end:key中[start :end]第一个出现0的位置
BITPOS key 1 start end:key中[start :end]第一个出现1的位置

事务

1、multi:开启事务

2、exec:执行事务
2.1:编译时异常,代码有问题,或者命令有问题,所有的命令都不会被执行
2.2:运行时异常,非语法问题,其他的正确命令可以正常执行,所以redis的事务并不保证原子性

3、discard:放弃事务

4、watch key:监控key

主从复制

概念:将一台redis服务器的数据,复制到另一台redis服务器上,前者叫主节点(master),后者叫从节点(slave或者follower)
主从复制中数据的复制是单项的,只能是master到follower,每当一个从节点启动,就会触发一次全量复制;从节点会先写到磁盘中,再从本地磁盘写入到内存
主从复制实现了数据的热备份。(热备份概念:在系统正常运行的情况下备份)
master以写为主,slave以读为主,读写分离,负载均衡,master最好不要做任何持久化存储,特别是RDB,可以让slave做AOF

1、slaveof ip port:一次性设置,以ip port的主机位主节点,如果该从机关闭,则启动时需要重新配置,主机断开时,从机可以正常读原有的数据

2、修改配置文件:replicaof ip port、masterauth password:非一次性配置

3、SLAVEOF no one:让自己变为主节点

哨兵模式

概念:能够监控后台主节点是否故障,如果故障了根据哨兵的投票数量决定哪个从节点转为主节点。如果之后主节点修复了,就只能归并到新的主节点下,作为从节点。
哨兵是个独立的进程,可以独立运行
哨兵模式基于主从复制,相当于自动化版的主从复制
1、添加哨兵的配置文件:sentinel.conf
内容: sentinel monitor 被监控的名称 host port 1 (代表自动投1票选举host port为主节点)

2、redis-sentinel sentinel.conf:启动redis哨兵

RDB、AOF(redis两种持久化存储方式)

持久化:就是将内存的诗句写入到磁盘中,防止电脑异常内存数据丢失
RDB:Redis DataBase,redis服务器默认的持久化存储方式。一般是在一段时间间隔内对数据进行快照存储,通过配置文件中的save命令设置快照周期,生成文件dump.rdb

AOF:Append Only File,另一种持久化存储方式。记录每次对服务器的写操作,每次服务器重启时会重新运行这些命令以恢复原始数据,存储到文件.aof中

1、RDB适合大规模的数据存储,对数据的完整性要求不高,一般在从节点设置RDB持久化存储

2、AOF每次修改都会同步,文件的完整性较好,但性能、效率较慢。

3、两种方式都开启时,redis会优先选择AOF恢复数据
仅适用RDB时,当服务器宕机时可能会丢失部分数据
仅适用AOF时,每次写操作都会被记录,可能存在某个数据的重复操作,这就可能导致无效的重复数据

过期键的删除策略

1、定期删除:每个设置过期时间的key都创建一个定时器,到过期时间立即删除。此策略对内存友好,对CPU不友好,会消耗CPU去处理过期数据,占用一定的时间和吞吐量

2、惰性删除:每到对key发出请求时,才回去检查该key是否已过期,过期则删除。此策略CPU友好,对内存不友好,当大量访问已经过期删除的key再次被访问时,就不会被清除,占用大量内存

3、定时删除:每隔一定的时间时期,扫描expire命令中设置过期时间的key,过期则删除,此方法是两种方法的折中

redis一般使用惰性删除和定时删除结合

redis集群之间如何复制?-------异步复制

一般为什么要做redis分区

分区可以使redis服务器管理更大的内存。可以通过简单的增加计算机的数量来更加服务器的计算能力,服务器的网络带宽也会随着计算机和网卡的增加而增加。

redis有哪些分区方案?
分区的粒度是key,由于集合的key可能不在一个分区,所以在一些集合操作时,有些不方便,比如交集等

  • 客户端分区,在客户端就已经决定了写入哪个节点,读取哪个节点

  • 代理分区,客户端将读写请求发送给代理,由代理决定请求发送给哪个节点,然后根据rediss节点返回的信息返回给客户端

  • 查询路由,客户端发送请求,由redis服务器决定请求给哪个节点。

缓存雪崩

概念:缓存同一时间大面积失效,导致后面的请求都直接访问数据库,造成数据库压力大而崩掉

解决:1)避免key同一时间大面积失效,可以将key的过期时间随机
2)加锁排队
3)给每个key增加缓存标记,用来记录key是否失效,失效则即使更新缓存

缓存穿透

概念:请求缓存和数据库中都没有的数据,缓存中找不到的数据,会直接访问数据库,造成数据库压力大而崩掉

缓存击穿

概念:并发查同一条数据,缓存中没有但数据库中有,即同一时间并发用户多,又访问同一数据,而导致数据库压力大而崩溃
解决:1)可以设置热点数据永不过期,persist
2)访问加互斥锁

Redis回收使用的什么算法----LRU算法

LRU算法:Least Recently Used最近最少使用算法,是一种页面置换算法。该算法给每个页面设置一个访问字段t,用来记录最近一个访问的时间,当需要淘汰一个页面的时,就淘汰字段值t最大的。

Redis的数据淘汰机制(当内存大小达到一定量时)

全局key:
1、no-evication:新数据增加时报错,不淘汰内存中已有的数据
2、allkeys-lru:从数据集中淘汰最近最少用的数据
3、allkeys-random:从数据集随机淘汰
设置过期时间的key:
1、volatile-lru:从设置了过期时间的key中淘汰最近最少使用的数据
2、volatile-random:从设置了过期时间的key中最忌淘汰
3、volatile-ttl:从设置了过期时间的key中淘汰,过期时间较早的key

  • 25
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值