redis | 青训营

46 阅读5分钟

Redis数据库

Redis初识

Redis全称为:Remote Dictionary Server(远程数据服务),该软件使用C语言编写,Redis是一个key-value存储系统,其有以下特点。

  • 1:性能高,单线程非常适合读多写少的场景,可以减轻数据库压力,
  • 2.集群分布式存储,可以横向拓展,可以做到高可用.
  • 3.数据结构类型丰富数据类型
  • 4.支持数据持久化
  • 5.支持事务(一般不用)一般通过lua脚本去实现

Redis数据类型和命令

Redis 目前有9种数据类型和

**5种常见类型:**String(字符串),Hash(哈希),List(列表),Set(集合)、Zset(有序集合)

**4种新增类型:**BitMap(2.2 版新增)、HyperLogLog(2.8 版新增)、GEO(3.2 版新增)、Stream(5.0 版新增)

基本命令

redis-cli 进入Redis命令行界面

root@bc2c25de5155:/data# redis-cli
127.0.0.1:6379>
auth [username] password ` 默认用户是`default
127.0.0.1:6379> auth default 123456
OK
127.0.0.1:6379> auth 123456
OK

dbsize 擦看数据库的key数量

127.0.0.1:6379> dbsize
(integer) 1

select index选择数据库 默认是0

127.0.0.1:6379> select 0
OK

help @基本数据类型 查看命令

127.0.0.1:6379> help @string

flushall 删除所有key

keys * 查看所有的key

exit or quit退出命令行

字符串

String 是最基本的 key-value 结构,key 是唯一标识,value 是具体的值,value其实不仅是字符串, 也可以是数字(整数或浮点数),value 最多可以容纳的数据长度是 512M

**底层实现:**String 类型的底层的数据结构实现主要是 int 和 SDS(简单动态字符串)。

基本命令

SET

语法 (不强制大小写)

SET key value [EX seconds|PX milliseconds|EXAT timestamp|PXAT milliseconds-timestamp|KEEPTTL] [NX|XX] [GET]

EX:表明过期时间,单位是秒 和 setex 相同

PX:单位毫秒

EXAT:设置时间到某个时间戳(秒级)

PXAT:设置时间到某个时间戳(毫秒级)

NX :当键k不存在时,设置键;设置成功返回ok,不成功时返回nil;和SETNX等价

XX: 与NX相反只在键已经存在时, 才对键进行设置操作

GET: 返回之前设的值

ttl 查看Key的过期时间(ms) -1是永久 -2是不存在或着已过期

XX与NX选项: NX当键k不存在时,设置键 ; XX则在这个k存在时设置

GET 会返回之前的value 如果key不存在SET不会失败

SETEX

语法: setex key seconds value

和 set key value ex 一样

PSETEX

语法:psetex key milliseconds value

和 set key value px 一样

MSET

语法: MSET key value [key value ...]

同时设置多个键值对 返回OK

MSETNX

语法:msetnx key value [key value ...]

msetnx a 1 b 2 c 3 批量设置键值对,当所有key都不存在时返回1,否则返回0

127.0.0.1:6379> msetnx a 1 b 2 c 3
(integer) 1
127.0.0.1:6379> msetnx a 1 b 2 c 3
(integer) 0
GET

语法:GET key

GETEX

语法:GETEX key [EX seconds|PX milliseconds|EXAT timestamp|PXAT milliseconds-timestamp|PERSIST]

  • 用于获取k的值,并设置或者移除过期时间,参数类似于set
  • EX,PX,EXAT,PXAT 和set的相同
  • PERSIST移除k的过期时间

相当于或值并且重新设置过期时间

GETSET

语法 getset key value

和 set key value get 相同

GETRANGE

语法:getrange key start end

截取字符串 下标从0开始

SETRANGE

语法: setrange key offset value

setrange 用value从偏移量(offset)开始(包括offset),覆盖key的值

127.0.0.1:6379> set key abc
OK
127.0.0.1:6379> setrange key 2 def
(integer) 5
127.0.0.1:6379> get key
"abdef"
STRLEN

语法 strlen key

strlen key 返回键key存储的值的长度,不存在的k返回0

INCR

语法incr key

incr 对key的值加1,并返回加1后的结果;如果k的值是字符串,无法加1,则提示错误

INCRBY

语法 incrby key increment

类似 INCR 只不过可以设置任意数

127.0.0.1:6379> get k
"8"
127.0.0.1:6379> incrby k  2
(integer) 10
INCRBYFLOAT

语法:incrbyfloat key increment

增加浮点值或者加整型值

127.0.0.1:6379> get k
"0.3"
127.0.0.1:6379> incrbyfloat k 0.2
"0.5"
127.0.0.1:6379> incrbyfloat k 1
"1.5"
DECR

语法 decr key

值减一 类似incr

DECRBY

语法 : decrby key decrement

自定义减值 类似incrby

APPEND

语法 append key value

127.0.0.1:6379> set k 12
OK
127.0.0.1:6379> append k 345
(integer) 5
127.0.0.1:6379> get k
"12345"

DEL

语法 del key 删除值

127.0.0.1:6379> del k
(integer) 1
127.0.0.1:6379> get k
(nil)

基本命令

HSET

语法 hset key field value

一个key的值可以有多个 field但一个 field只能有一个 value 可以和 go中的map 一起理解

HSETNX

语法 hsetnx key field value

设置哈希的一个字段,当指定的字段不存在时才会被设置

HMSET

语法: hmset key field value [field value ...]

HGET

语法: hget key field

HkEYS

语法:hkeys key

该命令的作用是:获取哈希的所有字段,但是不获取值

HEXISTS

语法:hexists key field

该命令的作用是:判断字段是否存在于指定哈希中

HMGET

语法 : hmget key field [field ...]

获取指定哈希中的多个字段

HSTRLEN

语法 : hstrlen key field

该命令的作用是:获取指定哈希中字段的长度,

HVALS

语法: hvals key

该命令的作用是:获取指定哈希的所有值,不获取字段名称

HINCRBY

语法: hincrby key field increment

和 incryby类似 将指定哈希中的指定字段的值加一个指定的整型值

HINCRBYFLOAT

语法: hincrbyfloat key field increment

将指定哈希中的指定字段的值加一个指定的浮点型值 也可以加整型值

HDEL

语法: hdel key

删除哈希中指定一个或多个字段