「这是我参与11月更文挑战的第5天,活动详情查看:2021最后一次更文挑战」
redis基本概念
redis默认16个数据库
基于内存的key-value数据库
支持数据持久化
基于c语言编写的,可以支持多种语言的api 最高写入每秒11万次,读取 81000次
命令不区分大小写
默认端口:6379
什么是redis
官方解释:redis即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、“Key-Value”数据库,并提供多种语言的API;redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件。
简单点来讲就是我们可以把Redis看作是一个Map,我们需要任何数据都是需要通过Key去拿到里面的Value值
Value支持的数据类型有:String、List、Set、ZSet、Hash、Geo、HyperLogLog、Bitmaps
redis是单线程还是多线程?
redis是单线程的(在redis 6.0之后也支持了多线程)
Redis:单线程为什么还那么快?
1、高性能的服务器不一定就是多线程就快!
2、多线程会在CPU上下文切换的时候消耗时间,多线程不一定就要比单线程效率高
官方回答:
由于Redis是基于内存的操作,因此CPU并不是Redis的瓶颈。 Redis的瓶颈很可能是机器内存或网络带宽的大小。 既然单线程易于实现并且CPU不会成为瓶颈,那采用单线程解决方案是合乎逻辑的了。
操作redis基本命令
切换数据库:select +切换的数据库序号
插入数据 set
获取数据 get
keys 命令查看所有的key
expire key 时间(秒)设置某个key的过期时间||剩余时间
ttl key 查看某个key的过期时间
exists key 判断这个key是否存在,存在返回1、不存在返回0
清除当前数据库:flushdb
清空全部数据库: flushall
Redis常用数据类型操作
String
• append key +追加的字段 在该String的后面添加字符串,如果当前没有字符串的key,那么作用就相当于set
• strlen 查询字符串的长度
• incr 数值+1
• decr 数值-1
• incrby key +数值 该key增加多少
• decrby key +数值 该key减多少
• getrange key +开始下标 +结束下标(结束数值为-1时截取所有字符串) 获取字符串时,截取其中长度
• setrange key +下标 +修改后的字符串 修改该key中该下标开始的字符串
• **setnx key **+时间(秒) +设置的值 另外一种用法 setnx key +值,如果当前key不存在那么就新建,如果存在set失败
• mset key1 value1 key2 value2 批量set
• mget key1 key2 批量获取值
也可以把其中的key设置成一个对象: mset user:1:name zhangsan user:1:age 2(user:{id}:{filed})\
注意:
mset 和 mget 都是原子性操作,要么一起成功要么一起失败
String的使用场景:
a. 计数器
b. 统计多单位的数量
c. 粉丝数
对象缓存储存
List
• 在redis里面,我们可以把list玩成栈,队列,阻塞队列!
• lpush list +key 将一个值或者多个值,插入到列表头部(左) 类似于双向链表
• rpush list +key 将一个值或者多个值,插入到列表头部(右) 两边都可以插入
• lpop list 移除 list 的第一个元素
• rpop list 移除 list 的最后一个元素
• lindex list +下标 通过下标获得 list 中某一个值!
• llen list 返回列表的长度
• lrange list +移除的数量 +移除的key 移除list集合中指定个数的value,精确匹配
• ltrim list +start +end 通过下标截取指定的长度,这个list已经改变了,截断了,只剩下截取后的元素
• rpoplpush 移除列表的最后一个元素,并添加一个新的元素
○ 或者rpoplpush +移除的列表 +转移后的列表 #移除列表的最后一个元素,将他移动到新的列表中
• exists +列表 #判断该列表是否存在\
总结: 实际上list是一个链表 ,before Node after left right都可以插入值
如果key不存在,创建新的链表
如果key存在,新增内容
如果移除了所有值,空链表,也代表不存在!
在两边插入或者改动值,效率最高!中间元素,相对来说效率低一些
可以当作消息队列使用:每次插入用 lpush 从左插入,每次读取用 rpush 从右读取实现消息队列机制
也可以当作栈使用,先进后出,后进先出
Set
• 所有的命令都是s开头的
• sadd set +元素 #set中添加元素
• smembers +set #查看指定set的值
• sismember +set +指定得值 #判断某一个值是不是存在set集合中
• srem +set +指定元素 #移除该set中指定的元素
• srandmember +set # 随机抽选出一个元素 +数值 #随机抽取指定个数的元素




近期评论