Redis教程

【Redis】Redis基础

本文主要是介绍【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前言

  1. 单机MySQL时代
    在这里插入图片描述
    该模式存在瓶颈:
  • 数据量太大,一个机器放不下
  • 数据的索引太大,一机器的内存放不下
  • 访问类(读写)太大,一个服务器承受不住
  1. 缓存+读写分离
    在这里插入图片描述
  • 网站上的访问80%以上都是在读、每次都去查询数据库,效率很低,引入缓存机制,第一次去MySQL中读取数据,将数据返回给用户的同时,将数据在缓存中存储下来,第二次访问,就可以直接在缓存中读取
  1. 分库分表+集群
    在这里插入图片描述

二: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基础的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!