阅读 123

redis基本概念和操作命令

redis基本概念

redis默认16个数据库
基于内存的key-value数据库
支持数据持久化
基于c语言编写的,可以支持多种语言的api 写入每秒11万次,读取 81000次 命令不区分大小写
默认端口:6379

什么是redis

redis即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、“Key-Value”数据库,并提供多种语言的API;redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件。

redis是单线程还是多线程?

redis是单线程的,单线程基于内存操作,CPU不是redis的性能瓶颈,redis的瓶颈是基于机器的内存和网络带宽,所以可以使用单线程实现就使用单线程实现了。  (但是在redis6.0也支持了多线程)

Redis:单线程为什么还那么快?

1、高性能的服务器不一定就是多线程就快!
2、多线程会在CUP上下文切换的时候消耗时间,多线程不一定就要比单线程效率高!
官方回答:
由于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})\

注意:

msetmget 都是原子性操作,要么一起成功要么一起失败

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   # 随机抽选出一个元素 +数值 #随机抽取指定个数的元素

ZSet

有序的Set
zincrby zset 1 one              增长分数
zscore zset two  获取分数
zrange zset 0 -1 withscores     范围值
zrangebyscore zset 10 25 withscores 指定范围的值
zrangebyscore zset 10 25 withscores limit 1 2 分页
Zrevrangebyscore zset 10 25 withscores  指定范围的值
zcard zset  元素数量
Zcount zset 获得指定分数范围内的元素个数
Zrem zset one two        删除一个或多个元素
Zremrangebyrank zset 0 1  按照排名范围删除元素
Zremrangebyscore zset 0 1 按照分数范围删除元素
Zrank zset 0 -1    分数最小的元素排名为0
Zrevrank zset 0 -1  分数最大的元素排名为0

map

hdel key +keyName1 keyName2 // 删除一个或多个哈希表字段
hexists key keyName // 查看哈希表 key 中,指定的字段是否存在。
hget key keyName // 获取存储在哈希表中指定字段的值。hgetall key // 获取在哈希表中指定 key 的所有字段和值
hincrby key keyName increment //为哈希表 key 中的指定字段的整数值加上增量 increment
hincrbyfloat key keyName increment // 为哈希表 key 中的指定字段的浮点数值加上增量 increment
hkeys key // 获取所有哈希表中的字段
hlen key // 获取哈希表中字段的数量
hmget key keyName1 [keyName2] //获取所有给定字段的值
hmset key keyName1 value1 [keyName2 value2 ] // 同时将多个 field-value (域-值)对设置到哈希表 key 中。
hset key keyNamevalue //将哈希表 key 中的字段 keyName的值设为 value 。
hsetnx key keyNamevalue //只有在字段 keyName不存在时,设置哈希表字段的值。
hvals key //获取哈希表中所有值。
hscan key cursor [match pattern] [count count] //迭代哈希表中的键值对。


作者:噗滋噗滋
链接:https://juejin.cn/post/7026885677895647240

文章分类
代码人生
文章标签
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐