Redis介绍


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支持数据备份,集群高可用的功能

Redis基本操作

Redis默认是有16个数据库,默认使用的是第0个数据库,可以通过select 切换数据库,Redis的命令大小写不敏感的

Redis服务端启动:

redis-server redis.windows.conf

在这里插入图片描述

Redis客户端启动:

redis-cli -h IP地址 -p 端口 -a 密码
如果是登录远程redis需要使用-h参数,我们本次登录本机redis则不需要使用-h参数。
本地客户端登录用redis-cli 密码登陆(redis-cli -a password)
在这里插入图片描述

Redis关闭 :

通过客户端使用shutdown命令关闭redis服务。
在这里插入图片描述

切换数据库:

select index(0-15)
在这里插入图片描述

查看数据库大小

dbsize
在这里插入图片描述

查看所有的keys

keys *
在这里插入图片描述

清空数据库

清空当前数据库:flushdb
清空所有数据库:flushall
在这里插入图片描述

Redis是单线程

Redis是基于内存操作的,CPU不是Redis性能瓶颈,Redis的瓶颈就是根据机器的内存和网络带宽,CPU不是性能瓶颈,就可以使用单线程的
Redis的数据都是存放在内存中,所以说单线程去操作效率就是最高的,相比多线程,减少了CPU上下文切换耗时,对于内存系统而言,没有上下文切换的效率就是最高的,多次读写都是在同一个CPU

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
特点:设置时key存在则value新值覆盖旧值
获取key不存在返回nil
在这里插入图片描述

exists

判断key是否存在 格式 exists key
存在返回 1
不存在返回 0
在这里插入图片描述

append

追加字符串,如果key不存在,相当于是set命令 格式:append key apendvalue
返回值是新字符串的长度
在这里插入图片描述

strlen

获取字符串的长度 格式:strlen key
在这里插入图片描述

incr decr

对value值进行自增1操作(如果key不存在,会被初始化为0) 格式: incr key
对value值进行自减1操作 格式:decr key
在这里插入图片描述
如果key不存在,会被初始化为0
在这里插入图片描述

incrby decrby

设置加减的大小 格式:incrby key num decrby key num
在这里插入图片描述
注意:我们也可通过incrby 负数来实现减法操作
同样也可以通过decrby 负数来实现加法操作
在这里插入图片描述

getrange

获取给定范围的字符串值 格式:getrange key start stop0
注意 0代表起始位置 -1代表终止位置
在这里插入图片描述

setrange

从指定的位置开始替换字符串的值 格式:setrange key offset value
注意:新数据多长就只替换多长数据 原不被替换的数据保持不变
在这里插入图片描述

setex ttl

设置过期时间 格式: setex key seconds values
查看剩余时间 格式:ttl key
注意:如果剩余时间为-2 代表已经过期,get就查询不到了
举例:验证码验证
在这里插入图片描述

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(-1代表最后一位)
在这里插入图片描述

lpop rpop

从列表的左侧移除值 格式:lpop key
从列表右侧移除值 格式:rpop key
在这里插入图片描述

lindex

获取指定下标的值 格式:lindex key index
注意:下表从零开始,如果超过索引位置返回nil
在这里插入图片描述

llen

获取列表中元素的个数 格式:llen key
在这里插入图片描述

lrem

已移除列表中的元素 格式:lrem key count value
注意:count表示移除的个数
在这里插入图片描述

ltrim

截取列表中的值 格式:ltrim key start stop
在这里插入图片描述

rpoplpush

移除列表中最后一个元素,将他添加到另一个列表中 格式:rpoplpush key1 key2
在这里插入图片描述

lset

根据下标替换列表中的值 格式:lset key index value
在这里插入图片描述
应用场景:
对数据量大的集合进行删减
列表数据显示:评论列表、关注列表、留言列表

list底层是一个链表
在链表插入或者改动值,效率高,中间位置来修改,相对效率低一些

队列:
lpush \rpop

栈:
lpush \ lpop

3、 集合 set

set中元素不能重复的
set实现是基于哈希表结构实现,在修改、添加等操作复杂度是O(1)

sadd smembers

在set集合中添加数据 格式:sadd key value
获取set集合中所有值 格式:smembers key
注:sadd添加时,value不能重复添加
在这里插入图片描述

sismember

判断某个值是否在set中 格式:sismember key value
在这里插入图片描述

scard srem

scard:获取set中元素个数 格式:scard key
srem 删除set中元素 格式:srem key value
在这里插入图片描述

srandmember spop

srandmember:从set中随机获取指定个数的值  格式:srandmember key  count
spop 随机删除指定个数的元素    格式:spop  key  [count]

注意 count:表示数量
在这里插入图片描述

sdiff sinter sunion

sdiff:求多个集合的差集
sinter 求多个集合的交集
sunion: 求多个集合的并集

在这里插入图片描述

应用场景:
利用唯一性:可以统计访问网站的所有独立的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

如果指定field存在,则添加失败,如果不存在,则添加成功 格式:hsetnx key field value
在这里插入图片描述
应用场景:
hash中存储经常变更的对象,比如用户信息: user :name-value age-value ,set-value
hash适合存储对象 ,String适合存储字符串

5、有序集合 zset

每个元素都会关联一个double类型的分数,Redis正是通过分数为集合中的

zadd

zadd :添加一个元素 格式:zadd key score member

zrange

zrange:获取指定key内的指定范围的元素 格式:zrange key start stop
注:zset根据指定分数的大小排序
在这里插入图片描述

zrangebyscore

将zset中的值按照从小到大排序数据 格式 zrangebyscore min max
如:zrangebyscore myzset -inf +inf

zrem

删除zset中指定的元素 格式:zrem key value

zcard

查看zset集合中元素的个数 格式:zcard key

zcount

根据score的值来统计给定区间的元素的个数 格式:zcount key min max

应用场景:
对于需要排序的场景下可以使用zset. 比如微博的实时新闻可以以发表时间作为score来存储,获取时就自动按时间来排好序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值