【Redis】Redis基础
2021/8/7 2:08:07
本文主要是介绍【Redis】Redis基础,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
文章目录
- 一:Redis前言
- 二:NoSQL
- 1、NoSQL的特点
- 2、NoSQL的四大分类
- 三:Redis基础
- 1、Redis基本概念
- 2、Redis的基本操作
- 切换数据库
- 查看数据库大小
- 查看所有的keys
- 清除数据库
- 3、Redis是单线程的
- 4、Redis的五种基本类型
- (1)字符串string
- set / get
- exists
- append
- strlen
- incr / decr
- incrby / decrby
- getrange
- setrange
- setex / ttl
- setnx
- mset / mget
- getset
- (2)列表list
- lpush / rpush / lrange
- lpop / rpop
- lindex
- llen
- lrem
- rpoplpush
- lset
- (3)集合set
- sadd
- smembers
- sismember
- scard
- srem
- srandmember
- spop
- (4)哈希hash
- hset / hget
- hmset / hmget
- hgetall
- hdel
- hexitsts
- hkeys / hvals
- hsetnx
- (5)有序集合zset
- zadd
- zrange
- zrangebyscore
- zrem
- zcard
- zcount
一:Redis前言
- 单机MySQL时代
该模式存在瓶颈:
- 数据量太大,一个机器放不下
- 数据的索引太大,一机器的内存放不下
- 访问类(读写)太大,一个服务器承受不住
- 缓存+读写分离
- 网站上的访问80%以上都是在读、每次都去查询数据库,效率很低,引入缓存机制,第一次去MySQL中读取数据,将数据返回给用户的同时,将数据在缓存中存储下来,第二次访问,就可以直接在缓存中读取
- 分库分表+集群
二:NoSQL
NOSQL(NOT Only SQL) 泛指非关系型数据库
1、NoSQL的特点
- 方便扩展(数据之间没有关系)
- 大数据量高性能(Redis 写入速度8w/s,读取速度 11w/s)
- 数据类型是多样性的,不需要事先设计数据库,随取随用
- 存储方式多样,键值对、列存储、文档存储、图形数据库
- 没有固定的查询语句
2、NoSQL的四大分类
- key-value键值对数据库:Redis、memcache
- 文档性数据库:MongoDB 是基于分布式文件存储的数据库
- 列存储数据库:HBase
比如滴滴行程路线:userId+序列化 每一秒的经纬度 10.3434 12.3445、12.3536 13.4356 等连接起来组成形成路线 - 图形数据库:(朋友圈的社交网络,用户推荐) Neo4j四种分类的比较
三:Redis基础
1、Redis基本概念
- Redis是一个开源的(BSD协议),内存中的数据结构存储系统,可以用来作为数据库,缓存和消息中间件
- 它支持多种类型的数据结构,如 字符串(Strings)、散列(Hashes)、 列表(Lists)、 集合(Sets)、有序集合(Sorted sets)与范围查询Bitmaps、HyperLogLogs 和 地理空间(Geospatial) 索引半径查询。
- Redis 内置了复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions) 和不同级别的磁盘持久化(persistence) --RDB和AOP, 并通过Redis哨兵(Sentinel)和自动分区(Cluster)提供高可用性(high availability)。
Redis中数据存放在内存中,也提供了Redis的持久化的方式是数据存储到磁盘,它以key-value形式存储,提供丰富的数据类型可以使用多种开发场景(支持String、list、set、hash等数据结构),并且Redis性能极高,redis 写入速度8w次/s,读取速度11w次/s,Redis具有原子性,Redis支持数据备份,集群高可用的功能。
2、Redis的基本操作
Redis默认是有16个数据库,默认使用的是第0个数据库,可以通过select 切换数据库,Redis的命令大小写不敏感的
切换数据库
切换数据库 格式:select index
查看数据库大小
查看数据库大小 格式:dbsize
查看所有的keys
查看所有的key 格式:keys *
清除数据库
清空当前的数据库 格式:flushdb
清空所有的数据库 格式:flushall
3、Redis是单线程的
-
Redis是基于内存操作的,CPU不是Redis性能瓶颈,Redis的瓶颈就是根据机器的内存和网络带宽,CPU不是性能瓶颈,就可以使用单线程的
-
Redis的数据都是存放在内存中,所以说单线程去操作效率就是最高的,相比多线程,减少了CPU上下文切换耗时,对于内存系统而言,没有上下文切换的效率就是最高的,多次读写都是在同一个CPU
4、Redis的五种基本类型
Redis键命令的基本语法: COMMAND KEY_NAME
示例如下:
基本命令:
SET 设置key GET 查看key对应值 EXPIRE 设置key的过期时间 TTL 查看key剩余时间 EXISTS 判断当前key是否存在 KEYS * 查看所有的key DEL 删除当前key TYPE 查看key存储的value类型
(1)字符串string
set / get
设置值 格式:set key value 获取值 格式:get key
exists
判断key是否存在 格式 exists key
append
追加字符串,如果key不存在,相当于是set命令 格式:append key apendvalue
strlen
获取字符串的长度 格式:strlen key
incr / decr
对value值进行自增1操作(如果key不存在,会被初始化为0) 格式: incr key 对value值进行自减1操作 格式:decr key
incrby / decrby
设置加减的步长 格式:incrby key num decrby key num
getrange
获取给定范围的字符串值 格式:getrange key start stop
setrange
从指定的位置开始替换字符串的值 格式:setrange key offset value
setex / ttl
设置过期时间 格式: setex key seconds values 查看剩余时间 格式:ttl key
setnx
setnx(set if not exists) 如果指定的key不存在则设置,存在的失败 格式: setnx key value (分布式锁经常使用)
mset / mget
同时设置多个值 格式:mset key1 value1 key2 value2 ... 同时获取多个值 格式:mget key1 key ...
getset
先获取值在设置值 格式:getset key value
应用场景:
- 计数器(分散数、统计数)
- 通常来保存单个字符串或者JSON字符串数据(短信验证码)
(2)列表list
类似于linkedlist链表结构,可以添加元素到列表的头部或者是尾部,同样头部和尾部都可以进行获取,可以用来作为栈、队列、阻塞队列
lpush / rpush / lrange
从列表的左侧插入值 格式:lpush key value 从列表的右侧插入值 格式:rpush key value 从列表中获取指定范围的值 格式:lrange key start stop
lpop / rpop
从列表的左侧移除值 格式:lpop key 从列表右侧移除值 格式:rpop key
lindex
获取指定下标的值 格式:lindex key index
llen
获取列表中元素的个数 格式:llen key
lrem
已移除列表中的元素 格式:lrem key count value
rpoplpush
移除列表中最后一个元素,将他添加到另一个列表中 格式:rpoplpush key1 key2
lset
根据下标替换列表中的值 格式:lset key index value
应用场景:
- 对数据量大的集合进行删减
- 列表数据显示:评论列表、关注列表、留言列表
list底层是一个链表,在l链表插入或者改动值,效率高,中间位置来修改,相对效率低一些
队列:
lpush \ rpop
栈:
lpush \ lpop
(3)集合set
set中元素不能重复的
set实现是基于哈希表结构实现,在修改、添加等操作复杂度是O(1)
sadd
在set集合中添加数据 格式:sadd key value
smembers
获取set集合中所有值 格式:smembers key
sismember
判断某个值是否在set中 格式:sismember key value
scard
获取set中元素个数 格式:scard key
srem
删除set中元素 格式:srem key value
srandmember
从set中随机获取值 格式:srandmember key count
spop
随机删除指定的元素 格式:spop key [count]
应用场景:
- 利用唯一性:可以统计访问网站的所有独立的ip
- 对集合间进行求交集、并集、差集 方便实现共同挂住,共同喜欢,二度好友
应用:
(4)哈希hash
hash是一个map集合,是key-value的map集合
hset / hget
插入和获取哈希的值 hset key field value /hget key field
hmset / hmget
批量的插入和获取 格式:hmset key field1 value1 field2 value2 .... 获取格式: hmget key field1 field2 ...
hgetall
获取hash中所有的值 格式:hgetalll key
hdel
删除指定的filed 的哈希键值对 格式:hdel key field
hexitsts
判断哈数中字段是否存在 格式:hexists key field
hkeys / hvals
获取哈数中所有字段或者值 格式 :hkeys key /hvals key
hsetnx
如果存在,则失败,如果不存在,则添加成功 格式:hsetnx key field value
应用场景:
- hash中存储经常变更的对象,比如用户信息: user :name-value age-value ,sex-value
- hash适合存储对象 ,String适合存储字符串
(5)有序集合zset
- 每个元素都会关联一个double类型的分数,Redis正是通过分数为集合中的成员进行从小到大的排序
- 有序集合的成员是唯一的,但分数是可以重复
- 有序集合中的命令都是以z开头的
zadd
添加一个元素 格式:zadd key score value
zrange
获取zset中一定范围内的值 格式:zrange key start stop
zrangebyscore
将zset中的值按照从小到大排序数据 格式 zrangebyscore min max
zrem
删除zset中指定的元素 格式:zrem key value
zcard
zcount
根据score的值来统计给定区间的元素的个数 格式:zcount key min max
应用场景:
- 对于需要排序的场景下可以使用zset. 比如微博的实时新闻可以以发表时间作为score来存储,获取时就自动按时间来排好序
这篇关于【Redis】Redis基础的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-08阿里云Redis项目实战入门教程
- 2024-11-08阿里云Redis资料:新手入门与初级使用指南
- 2024-11-08阿里云Redis教程:新手入门及实用指南
- 2024-11-07阿里云Redis学习入门:新手必读指南
- 2024-11-07阿里云Redis学习入门:从零开始的操作指南
- 2024-11-07阿里云Redis学习:初学者指南
- 2024-11-06阿里云Redis入门教程:轻松搭建与使用指南
- 2024-11-02Redis项目实战:新手入门教程
- 2024-10-22Redis入门教程:轻松掌握数据存储与操作
- 2024-10-22Redis缓存入门教程:快速掌握Redis缓存基础知识