0
点赞
收藏
分享

微信扫一扫

Redis 基础

是她丫 2022-03-12 阅读 110



点击关注公众号,k8s优秀车间主任及时送达

Redis 概况


  • Redis 是一个开源的 key-value 存储系统。
  • 和 Memcached 类似,它支持存储的 value 类型相对更多,包括 string(字符串)、
  • list(链表)、set(集合)、zset(sorted set --有序集合)和 hash(哈希类型)。
  • 这些数据类型都支持 push/pop、add/remove 及取交集并集和差集及更丰富的操作,
  • 而且这些操作都是原子性的。
  • 在此基础上,Redis 支持各种不同方式的排序。
  • 与 memcached 一样,为了保证效率,数据都是缓存在内存中。
  • 区别的是 Redis 会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记
  • 录文件。
  • 并且在此基础上实现了 master-slave(主从)同步。
  • Redis默认启动端口6379。
  • Redis 默认有16个数据库,类似数组下标从0开始,初始默认用0号库。


官方概况

Redis 基础_数据库


Redis优势


  • 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
  • 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
  • 原子 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。
  • 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。


Redis 基础命令


select

select 命令用于切换数据库,格式:select​<dbid>​。如:

Redis 基础_redis_02


redis-cli

redis-cli 是redis的客户端命令

直接在shell中输入redis-cli即可。如:

Redis 基础_字符串_03


dbsize

dbsize查看当前数据库的key的数量。如:

Redis 基础_数据库_04


flushdb

flushdb 清空当前数据库。如

Redis 基础_字符串_05

flushall

通杀全部数据库。


keys *

keys * 查看当前数据库所有key (匹配:keys *1)。如:

Redis 基础_数据库_06


exists

exsits  ​<key>​ 判断某个key是否存在,如果key值不存在则返回值为0,存在返回值为1。如:

Redis 基础_字符串_07


type

type  ​<key>​查看你的key什么类型。如:

Redis 基础_数据库_08


del

del  ​<key>​ 删除指定key 数据。如:

Redis 基础_redis_09


unlink

unlink ​<key>​ 根据value 选择非阻塞删除,仅将 keys 从 keyspace 元数据中删除,真正的删除会在后续异步操作。


expire

expire ​<key>​ 10 10 秒钟:为给定的 key 设置过期时间。如:

Redis 基础_字符串_10


ttl key

ttl key  查看还有多少秒过期,-1 表示永不过期,-2 表示已过期。如:

Redis 基础_数据库_11


Redis字符串(String)



  • String 是 Redis 最基本的类型,你可以理解成与 Memcached 一模一样的类型,一个 key 对应一个 value。
  • String 类型是二进制安全的。意味着 Redis 的 string 可以包含任何数据。比如 jpg 图片 或者序列化的对象。
  • String 类型是 Redis 最基本的数据类型,一个 Redis 中字符串 value 最多可以是 512M。


字符串常用命令


set

set  ​<key><value>​ 设置指定key 的值。如:

Redis 基础_数据库_12

Redis 基础_数据库_13


  • NX:当数据库中 key 不存在时,可以将 key-value 添加数据库
  • XX:当数据库中 key 存在时,可以将 key-value 添加数据库,与 NX 参数互斥
  • EX:key 的超时秒数
  • PX:key 的超时毫秒数,与 EX 互斥


get

get ​<key>​ 查询对应键值。如:



append

append  ​<key><value>​,将指定的 value 追加到该 key 原来值(value)的末尾。如:

Redis 基础_redis_14


strlen

strlen ​<key>​获得值的长度。如:

Redis 基础_字符串_15


setnx

setnx ​<key><value>​ 只有在 key 不存在时 设置 key 的值。如:

Redis 基础_redis_16


incr

incr ​<key>​将 key 中储存的数字值增 1 只能对数字值操作,如果为空,新增值为 1。如:

Redis 基础_redis_17


decr

decr  ​<key>​ 将 key 中储存的数字值减 1 只能对数字值操作,如果为空,新增值为-1。如:

Redis 基础_数据库_18


incrby

incrby  key increment将 key 中储存的数字值增减。自定义步长。如:

Redis 基础_redis_19


原子性

Redis 基础_redis_20

所谓原子操作是指不会被线程调度机制打断的操作;

这种操作一旦开始,就一直运行到结束,中间不会有任何 context switch (切换到另 一个线程)。


  1. 在单线程中, 能够在单条指令中完成的操作都可以认为是"原子操作",因为中 断只能发生于指令之间。
  2. 在多线程中,不能被其它进程(线程)打断的操作就叫原子操作。Redis 单命令的原子性主要得益于 Redis 的单线程。


案例:

java 中的 i++是否是原子操作?不是 i=0;两个线程分别对 i 进行++100 次,值是多少?2~200

Redis 基础_数据库_21


mset

mset 命令用于同时设置一个或多个 key-value 对。如:

Redis 基础_字符串_22


msetnx

msetnx同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在,原子性,有一个失败则都失败。如:

Redis 基础_数据库_23


getrange

Getrange 命令用于获取存储在指定 key 中字符串的子字符串。字符串的截取范围由 start 和 end 两个偏移量决定(包括 start 和 end 在内)。如:

Redis 基础_redis_24



setrange

Setrange 命令用指定的字符串覆盖给定 key 所储存的字符串值,覆盖的位置从偏移量 offset 开始。如:

Redis 基础_数据库_25


setnx

Setnx(SET if Not eXists) 命令在指定的 key 不存在时,为 key 设置指定的值。如:

Redis 基础_数据库_26


getset

Getset 命令用于设置指定 key 的值,并返回 key 的旧值。如:

Redis 基础_字符串_27


数据结构

String 的数据结构为简单动态字符串(Simple Dynamic String,缩写 SDS)。是可以 修改的字符串,内部结构实现上类似于 Java 的 ArrayList,采用预分配冗余空间的方式 来减少内存的频繁分配。

Redis 基础_redis_28

如图中所示,内部为当前字符串实际分配的空间 capacity 一般要高于实际字符串长度 len。当字符串长度小于 1M 时,扩容都是加倍现有的空间,如果超过 1M,扩容时一次 只会多扩 1M 的空间。需要注意的是字符串最大长度为 512M。


举报

相关推荐

redis基础

Redis基础

Redis 基础使用

Redis—基础篇

redis基础操作

Redis基础操作

Redis基础入门

0 条评论