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
删除哈希中指定一个或多个字段