Redis安装与入门

目录

Windows 下载安装

 查看默认安装目录:usr/local/bin

redis 键(key) --(常用命令介绍)

redis 字符串(string) --(常用命令介绍)

redis 列表(List) --(常用命令介绍)

redis 集合(Set) --(常用命令介绍)

redis 哈希(Hash) --(常用命令介绍)

redis 有序集合Zset(sorted set) --(常用命令介绍)

redis的持久化保存策略

1. RDB ( Redis DataBase ) 持久方式

2. AOF ( APPEND ONLY MODE ) 持久方式


Windows 下载安装

下载地址:https://github.com/tporadowski/redis/releases

 查看默认安装目录:usr/local/bin

  •     redis-benchmark:服务启动起来后执行性能测试工具
  •     redis-check-aof:修复有问题的aof文件;
  •     redis-check-dump:修复有问题的dump.rdb文件;
  •     redis-cli:客户端,操作入口;
  •     redis-sentinel:redis集群使用;
  •     redis-server:Redis服务器启动命令;

redis 键(key) --(常用命令介绍)

  •     keys *:查看所有key;
127.0.0.1:6379> keys *
1) "name"
  •     exists key:判断某个key是否存在;
127.0.0.1:6379> exists name
(integer) 1
  •     move key dbID(0-15): 移除输入id的库;

  •     expire key 秒钟: 为给定的key设置过期时间,只能是已经存在的key值
#给name设定过期时间为一百秒
127.0.0.1:6379> expire name 100
(integer) 1
#ttl命令查看name的过期时间
127.0.0.1:6379> ttl name
(integer) 86
  •     ttl key: 查看还有多少秒过期,-1表示永不过期,-2表示已过期;
# -2表示已过期
127.0.0.1:6379> ttl name
(integer) -2
#设置age
127.0.0.1:6379> set age 20
OK
# -1表示永不过期
127.0.0.1:6379> ttl age
(integer) -1
  •     type key: 查看key的类型;
127.0.0.1:6379> type age
string

redis 字符串(string) --(常用命令介绍)

  •         setex:设置带过期时间的key,动态设置 : setex 键 秒值 真实值
127.0.0.1:6379> setex name 60 cyx
OK
127.0.0.1:6379> ttl name
(integer) 45
127.0.0.1:6379> get name
"cyx"
  •         setnx:只有在 key 不存在时设置 key 的值:setnx 键 值
#age已存在所以设置失败
127.0.0.1:6379> setnx age 99
(integer) 0
#不存在class则设置成功
127.0.0.1:6379> setnx class ruanjiangongcheng
(integer) 1
  •         mset:同时设置一个或多个 key-value 对。
127.0.0.1:6379> mset name cyx sex 1 address 22
OK
127.0.0.1:6379> keys *
1) "sex"
2) "age"
3) "address"
4) "class"
5) "name"
  •         mget:获取所有(一个或多个)给定 key 的值。
127.0.0.1:6379> mget name sex address
1) "cyx"
2) "1"
3) "22"
  •         msetnx:同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在(如果存在key,则都不会操作,因为msetnx是原子性型操作)。
#输入的key都不存在时,插入成功
127.0.0.1:6379> msetnx aa 1 bb 2 cc 3
(integer) 1
#输入的key有任意一个存在,则插入失败
127.0.0.1:6379> msetnx dd 4 ee 5 aa 2
(integer) 0
127.0.0.1:6379> keys *
1) "sex"
2) "cc"
3) "age"
4) "aa"
5) "address"
6) "bb"
7) "class"
8) "name"
  •         getset:将给定 key 的值设为 value ,并返回 key 的旧值(old value)。简单一句话,先get然后立即set。
127.0.0.1:6379> getset name chenyunxin
"cyx"
127.0.0.1:6379> get name
"chenyunxin"
  •          append:追加字符到指定key上。
#追加字符并返回追加后字符串长度
127.0.0.1:6379> append name isagoodman
(integer) 20
127.0.0.1:6379> get name
"chenyunxinisagoodman"
  •          strlen:返回字符串的长度。
127.0.0.1:6379> strlen name
(integer) 20
  •        incr: 自增 。(自增与自减都只能对数字进行操作
127.0.0.1:6379> set int 10
OK
127.0.0.1:6379> incr int
(integer) 11
# incrby 可以设置自增步长
127.0.0.1:6379> incrby int 5
(integer) 16
  •           decr:自减。
127.0.0.1:6379> decr int
(integer) 15
# decrby可以设置自减步长
127.0.0.1:6379> decrby int 5
(integer) 10
  •         getrange:截取字符串。
127.0.0.1:6379> get name
"chenyunxinisagoodman."
#字符串下标从0开始
127.0.0.1:6379> getrange name 0 7
"chenyunx"
#只截取结果,不改变key值
127.0.0.1:6379> get name
"chenyunxinisagoodman."
  •         setrange:替换字符串。
127.0.0.1:6379> get name
"chenyunxinisagoodman."
#从下标为10的字符开始往后替换,返回字符长度
127.0.0.1:6379> setrange name 10 change
(integer) 21
#会改变key值
127.0.0.1:6379> get name
"chenyunxinchangedman."

redis 列表(List) --(常用命令介绍)

  •         lpush:从list左侧加入元素
127.0.0.1:6379> lpush people cyx yjl
(integer) 2
127.0.0.1:6379> lrange people 0 1
1) "yjl"
2) "cyx"
  •         rpush:从list右侧加入元素
127.0.0.1:6379> rpush people xiaoming
(integer) 3
127.0.0.1:6379> lrange people 0 2
1) "yjl"
2) "cyx"
3) "xiaoming"
  •         lrange:从左侧开始查看list元素
127.0.0.1:6379> lrange people 0 2
1) "yjl"
2) "cyx"
3) "xiaoming"
  •         linsert:在list中的某个元素的前后添加新元素
127.0.0.1:6379> linsert people before cyx xiaogang
(integer) 4
127.0.0.1:6379> lrange people 0 3
1) "yjl"
2) "xiaogang"
3) "cyx"
4) "xiaoming"
127.0.0.1:6379> linsert people after cyx xiaohong
(integer) 5
127.0.0.1:6379> lrange people 0 4
1) "yjl"
2) "xiaogang"
3) "cyx"
4) "xiaohong"
5) "xiaoming"
  •          lset:设置list指定下标的value值
127.0.0.1:6379> lrange people 0 4
1) "yjl"
2) "xiaogang"
3) "cyx"
4) "xiaohong"
5) "xiaoming"
127.0.0.1:6379> lset people 1 change
OK
127.0.0.1:6379> lrange people 0 4
1) "yjl"
2) "change"
3) "cyx"
4) "xiaohong"
5) "xiaoming"
  •          llen:返回list长度
127.0.0.1:6379> llen people
(integer) 5
  •          lpop(移除最左)、rpop(移除最右):移除list元素,并返回被移除的元素
127.0.0.1:6379> lpush people test test
(integer) 7
127.0.0.1:6379> rpush people test test
(integer) 9
127.0.0.1:6379> lrange people 0 8
1) "test"
2) "test"
3) "yjl"
4) "change"
5) "cyx"
6) "xiaohong"
7) "xiaoming"
8) "test"
9) "test"
127.0.0.1:6379> lpop people
"test"
127.0.0.1:6379> rpop people
"test"
127.0.0.1:6379> lrange people 0 6
1) "test"
2) "yjl"
3) "change"
4) "cyx"
5) "xiaohong"
6) "xiaoming"
7) "test"
  •          lindex:获取指定下标的元素
127.0.0.1:6379> lrange people 0 6
1) "test"
2) "yjl"
3) "change"
4) "cyx"
5) "xiaohong"
6) "xiaoming"
7) "test"
127.0.0.1:6379> lindex people 1
"yjl"
  •          sort:获取排序后的list
127.0.0.1:6379> lpush num 10 30 20 40
(integer) 4
#升序
127.0.0.1:6379> sort num
1) "10"
2) "20"
3) "30"
4) "40"
#降序
127.0.0.1:6379> sort num desc
1) "40"
2) "30"
3) "20"
4) "10"
#英文排序
127.0.0.1:6379> sort people alpha
1) "change"
2) "cyx"
3) "test"
4) "test"
5) "xiaohong"
6) "xiaoming"
7) "yjl"
#sort排序不会改变原list
127.0.0.1:6379> lrange people 0 6
1) "test"
2) "yjl"
3) "change"
4) "cyx"
5) "xiaohong"
6) "xiaoming"
7) "test"
  •          ltrim:截取list
127.0.0.1:6379> lrange num 0 4
1) "40"
2) "20"
3) "30"
4) "10"
#截取下标0-2的元素,会改变list
127.0.0.1:6379> ltrim num 0 2
OK
127.0.0.1:6379> lrange num 0 2
1) "40"
2) "20"
3) "30"

 

redis 集合(Set) --(常用命令介绍)

  •         sadd:添加
# 添加 sadd
127.0.0.1:6379> sadd code java
(integer) 1
127.0.0.1:6379> sadd code python switch
(integer) 2
  •          smembers:查看
# 查看 smembers,这里就可以看出,set集合是无序的
127.0.0.1:6379> smembers code
1) "python"
2) "java"
3) "switch"
  •          srem:删除
# 删除
127.0.0.1:6379> srem code switch
(integer) 1
  •         scard:查看set长度
127.0.0.1:6379> scard code
(integer) 3
  •          sismenber:查看set集合中是否包含指定值
#检查 set 集合中是否包含指定的值 sismember,存在返回 1,不存在返回 0
127.0.0.1:6379> sismember code java
(integer) 1
  •         sdiff:取出两个集合中不同的元素(差集)
# 以第一个key为主,依次与每个key取差集
127.0.0.1:6379> sdiff key1 key2
1) "1"
2) "2"
127.0.0.1:6379> sdiff key1 key2 key3
1) "2"
127.0.0.1:6379> sdiff key2 key1 key3
1) "5"
  •         sinter:取出两个集合中相同的元素(交集)
# 以第一个key为主,依次与每个key取交集
127.0.0.1:6379> sinter key1 key2
1) "3"
2) "4"
127.0.0.1:6379> sinter key1 key3
1) "1"
127.0.0.1:6379> sinter key1 key2 key3
(empty list or set)
  •         sunion:取出两个集合中所有的元素(并集)
# 以第一个key为主,依次与每个key取并集
127.0.0.1:6379> sunion key1 key2
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"
127.0.0.1:6379> sunion key1 key2 key3
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"
7) "7"
8) "8"

redis 哈希(Hash) --(常用命令介绍)

  •         hset、hmset:设置,批量设置
127.0.0.1:6379> hset user name cyx
(integer) 1
127.0.0.1:6379> hmset user sex nan age 21
OK
  •         hget、hmget:获取,批量获取
# 通过key获取value
127.0.0.1:6379> hget user name
"cyx"
127.0.0.1:6379> hmget user name sex age
1) "cyx"
2) "nan"
3) "21"
  •            hkeys、hvals、hgetall:获取key与value
# 获取所有key
127.0.0.1:6379> hkeys user
1) "name"
2) "sex"
3) "age"
# 获取所有value
127.0.0.1:6379> hvals user
1) "cyx"
2) "nan"
3) "21"
# 获取所有key和value
127.0.0.1:6379> hgetall user
1) "name"
2) "cyx"
3) "sex"
4) "nan"
5) "age"
6) "21"
  •         hexists:查看是否存在
#存在则返回1,不存在则返回0
127.0.0.1:6379> hexists user name
(integer) 1
  •          hdel:删除
127.0.0.1:6379> hdel user name
(integer) 1
#返回删除数
127.0.0.1:6379> hdel user sex age
(integer) 2

 

redis 有序集合Zset(sorted set) --(常用命令介绍)

         zset 有序集合和 set 集合类似,都是不允许重复的值出现,只不过相比于 set 集合,zset 多了一个排序的功能,在添加值得时候需要关联一个 double 类型的分数(score),分数可以重复但value不允许重复,默认按照分数(score)从小到大排序

  •         zadd:添加元素,第一个是分值,第二个是 value
127.0.0.1:6379> zadd zset 1 cyx
(integer) 1
127.0.0.1:6379> zadd zset 2 yjl 3 zjl
(integer) 2
  •          zrem:删除元素
127.0.0.1:6379> zrem zset cyx
(integer) 1
#查看所有元素
127.0.0.1:6379> zrange zset 0 -1
1) "redis"
2) "yjl"
3) "zjl"
#查看集合元素
127.0.0.1:6379> zrange zset 0 -1
1) "redis"
2) "yjl"
3) "zjl"
#查看倒序集合
127.0.0.1:6379>  zrevrange zset 0 -1
1) "zjl"
2) "yjl"
3) "redis"
#查看带有分值的集合
127.0.0.1:6379> zrange zset 0 -1 withscores
1) "redis"
2) "1"
3) "yjl"
4) "2"
5) "zjl"
6) "3"
  •          zcard:获取集合中元素个数
127.0.0.1:6379> zcard zset
(integer) 3

redis的持久化保存策略

        我们都知道redis是一个NoSQL数据库,并且存取速度很快,而它存取速度快的原因,就是因为它是直接对内存中的数据进行读写操作,省略了从io读取数据的过程,速度就大大的提升了,那么,既然他的数据都是在内存中的,当断电后,内存数据就会被清空,为什么redis还能被称为数据库呢?这就是因为redis带有他自己的持久化保存策略,redis的持久化保存策略有两种,分别为 RDB AOF两种方式只能同时使用一种,redis 使用的 默认持久化方式为 RDB

1. RDB ( Redis DataBase ) 持久方式

        会单起一条线程,在指定的时间间隔内将内存中的数据以二进制形式写入、临时文件中,写入成功后默认存放到 redis 的安装目录下的 dump.rdb 文件中,如果你使用自己的配置启动的 redis,那么 dump.rdb 会和你的配置文件同级。RDB 的持久化有两种触发机制,一种是手动命令持久化,一种是自动持久化。

  • 手动持久化
  1. SAVE:命令会阻塞当前 redis 服务器,期间不能正常提供服务,直至数据保存完毕后恢复。
  2. BGSAVE:会执行 fork 子进程负责持久化操作,redis服务器可以正常执行命令。(最好使用BGSAVE

         除这种主动的持久化之外,一些其他的命令也会完成持久化的操作,例如:flushallshutdown 等等。

  • 自动持久化

        配置文件中的 SNAPSHOTTING 模块就是用来做 RDB 持久化的,里面有这样几句配置命令: 

################################ SNAPSHOTTING  ################################ 
# save 时间/s 数据修改次数
# 当数据在九百秒内有1次修改时,保存
save 900 1 
# 当数据在三百秒内有10次修改时,保存
save 300 10
# 当数据在60秒内有10000次修改时,保存
save 60 10000
# 当RDB最后一次保存失败后,是否停止接受数据,默认yes (否则没人知道它坏了)
stop-writes-on-bgsave-error yes
# 是否以压缩形式保存,默认为yes
rdbcompression yes
# 是否效验数据完整性,默认为yes
rdbchecksum yes
# 持久化保存文件名
dbfilename dump.rdb
# 持久化文件保存路径
dir ./

2. AOF ( APPEND ONLY MODE ) 持久方式

         AOF 的原理是将所有曾经使用过的存入操作的命令都记录下来,存放到 appendonly.aof 文件中。

############################## APPEND ONLY MODE ############################### 
# 是否开启AOF,默认为n
appendonly no
# 指定更新条件,可以选择三个值:
	# no:每次修改都同步,数据完整性强,性能偏低
	# always:每秒同步一次,数据完整性较好
	# everysec:让操作系统自己同步数据,消耗资源最低
appendfsync everysec
# 百分比,如果数据文件大小占据了指定百分比,会触发重写。
auto-aof-rewrite-percentage 100
# 必须满足最小大小才可以重写
auto-aof-rewrite-min-size 64mb

        AOF持久化效率更高,RDB更适合灾难性恢复。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值