官方文档
参考博客1
注意:
在 Redis 中,命令大小写不敏感。
我的云服务器是Ubuntu 18.04.1 LTS,以下的命令都是基于这个操作系统。
在下面地址下载好安装包后上传到linux中去:
https://github.com/redis/redis/archive/5.0.5.tar.gz
tar -zxvf redis-5.0.5.tar.gz
# 进入 Redis 的 src 目录
cd redis-5.0.5/src
# 进行安装
make && make install PREFIX=/usr/local/redis-5.0.5
# 看到多出来的文件
cd ../bin
ll
redis-cli 是客户端文件,redis-server 是服务端文件.
# step1:打开配置文件
vim /usr/local/redis-5.0.5/redis.conf
# step2:搜索daemonize配置
输入/daemonize就会定位到daemonize配置的位置
# step3:输入 a 进入文本编辑状态,将 no 修改为 yes
# step4:输入:wq回车保存
进行如上配置之后,启动 Redis 服务的时候将在后台运行。
cp redis-server /usr/local/bin/
cp redis-cli /usr/local/bin/
添加完成后在任何目录下输入 redis-server 可启动服务器,输入 redis-cli 可启动客户端。
# 先启动服务器
redis-server
# 然后另外开启一个终端启动服务端
redis-cli
# 用此命令启动客户端可以避免中文乱码问题
redis-cli --raw
/usr/local/redis-5.0.5/bin/redis-cli shutdown
# 安装 tcl
sudo apt-get install tcl -y
# 运行测试
/usr/local/redis-5.0.5
make test
我在测试过程中发生了报错:*** [err]: Active defrag in tests/unit/memefficiency.tcl defrag didn’t stop.
解决:https://blog.csdn.net/weixin_40747106/article/details/80414772
然后重新运行make test,成功。
# 查看Redis
ps -ef | grep redis
# 通过端口号检查 Redis 服务器状态:
netstat -nlt| grep 6379
传统的 key-value 是指支持使用一个 key 字符串来索引 value 字符串的存储,而 Redis 中,value 不仅仅支持字符串,还支持更多的复杂结构,包括列表、集合、哈希表等。
字符串类型的值最多能存储 512M 字节的内容。
# 将变量stringName的值设置为stringValue
set stringName stringValue
# 后面带一个nx参数,表示set 命令只有在没有相同 key 的情况下成功
set stringName stringValue nx
# 后面带一个xx参数,表示set 命令在有相同 key 值的情况下成功;如果后面不带xx或nx参数,默认将为这种效果
set stringName stringValue xx
示例:
root@instance-06frzma5:~# redis-cli
127.0.0.1:6379> set stringTest value0
OK
127.0.0.1:6379> get stringTest
"value0"
127.0.0.1:6379> set stringTest value1 nx
(nil)
127.0.0.1:6379> get stringTest
"value0"
127.0.0.1:6379> set stringTest value1 xx
OK
127.0.0.1:6379> get stringTest
"value1"
127.0.0.1:6379>
# stringName +1
incr stringName
# stringName +100
incr stringName 100
# stringName -1
decr stringName
# stringName -100
decrby stringName 100
示例:
127.0.0.1:6379> set index 0
OK
127.0.0.1:6379> incr index
(integer) 1
127.0.0.1:6379> incrby index 100
(integer) 101
127.0.0.1:6379> decr index
(integer) 100
127.0.0.1:6379> decrby index 20
(integer) 80
127.0.0.1:6379>
运用 mset 和 mget 命令可以一次性完成多个 key-value 的对应关系;使用 mget 命令,Redis 返回一个 value 数组。
127.0.0.1:6379> mset a 1 b hello c 2.0
OK
127.0.0.1:6379> mget a b c
1) "1"
2) "hello"
3) "2.0"
Redis Lists是简单的字符串列表。
# 向listName列表中从左边插入一个或多个元素
lpush listName 1 2 three four 5
# 查看列表中指定范围的元素,第一个数字0表示开始位置,第二个数字4表示结束位置;两个参数都可以为负数,表示倒数第几个元素
lrange listName 0 4
# 向listName列表中从右边插入一个或多个元素
rpush listName1 1 2 3 4 5
示例:
127.0.0.1:6379> lpush listName 1 2 three four 5
(integer) 5
127.0.0.1:6379> lrange listName 0 4
1) "5"
2) "four"
3) "three"
4) "2"
5) "1"
127.0.0.1:6379> rpush listName1 1 2 3 4 5
(integer) 5
127.0.0.1:6379> lrange listName1 0 4
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
127.0.0.1:6379> lrange listName1 0 -1
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
del表示清空列表,lpop表示从左边弹出一个元素,rpop表示从右边弹出一个元素。
127.0.0.1:6379> rpush list 1 2 3 4 5
(integer) 5
127.0.0.1:6379> lpop list
"1"
127.0.0.1:6379> lrange list 0 -1
1) "2"
2) "3"
3) "4"
4) "5"
127.0.0.1:6379> rpop list
"5"
127.0.0.1:6379> lrange list 0 -1
1) "2"
2) "3"
3) "4"
127.0.0.1:6379> del list
(integer) 1
127.0.0.1:6379> lrange list 0 -1
(empty list or set)
一个列表最多可以包含 4294967295(2 的 32 次方减一)个元素,这意味着它可以容纳海量的信息,最终瓶颈一般都取决于服务器内存大小。
Redis 提供了阻塞式访问 brpop 和 blpop 命令。用户可以在获取数据不存在时阻塞请求队列,如果在时限内获得数据则立即返回,如果超时还没有数据则返回 nil。
# 从左边弹出一个元素,若获取不到则等待times秒
blpop listName times
# 从右边弹出一个元素,若获取不到则等待times秒
brpop listName times
# 查看listName列表的长度(元素个数)
llen listName
哈希主要用来表示对象,它们有能力存储很多对象。
# 创建一个对象objName,att1、att2、att3表示它的三个属性,val1、val2、val3表示对应的属性值
hmset objName att1 val1 att2 val2 att3 val3
# 获取指定属性的值域
hget objName att1
# 获取对象的所有属性和对应的值域
hgetall objName
# 获取多个属性的值域
hmget objName att1 att2
示例:
127.0.0.1:6379> hmset student name tracy gender male
OK
127.0.0.1:6379> hgetall student
1) "name"
2) "tracy"
3) "gender"
4) "male"
127.0.0.1:6379> hget student name
"tracy"
127.0.0.1:6379> hget student gender
"male"
127.0.0.1:6379> hmget student name gender
1) "tracy"
2) "male"
127.0.0.1:6379> hmset student name tracy gender male age 18
OK
127.0.0.1:6379> hgetall student
1) "name"
2) "tracy"
3) "gender"
4) "male"
5) "age"
6) "18"
127.0.0.1:6379> hincrby student age 1
(integer) 19
127.0.0.1:6379> hincrby student age -1
(integer) 18
Redis Set是一个无序的字符串集合,其中不会出现重复的元素。
# 添加元素
sadd setName item1 item2 item3
# 查看所有元素
smembers setName
示例:
127.0.0.1:6379> sadd setName 1 2 null
(integer) 3
127.0.0.1:6379> smembers setName
1) "null"
2) "1"
3) "2"
127.0.0.1:6379> sismember setName 3
(integer) 0
127.0.0.1:6379> sismember setName 1
(integer) 1
匹配成功返回 1,匹配失败返回 0。
有序集合的每一个成员都关联了一个权值,这个权值被用来按照从最低分到最高分的方式排序集合中的成员。集合的成员是唯一的,但是权值可以是重复的。
# 往无序列表setName中添加一个元素item,score是一个参数(类型必须为小数或整数),用来作为排序依据。
zadd setName score item
示例:
127.0.0.1:6379> zadd setName 1 "wang"
(integer) 1
127.0.0.1:6379> zadd setName 2 "tuantuan"
(integer) 1
127.0.0.1:6379> zadd setName 3 "tuotuo"
(integer) 1
127.0.0.1:6379> zadd setName 0.2 "miao"
(integer) 1
一个是正序排序,一个是逆序排序。后面可以加一个withscores参数,会显示分数。
127.0.0.1:6379> zrange setName 0 -1
1) "miao"
2) "wang"
3) "tuantuan"
4) "tuotuo"
127.0.0.1:6379> zrevrange setName 0 -1
1) "tuotuo"
2) "tuantuan"
3) "wang"
4) "miao"
127.0.0.1:6379> zrevrange setName 0 -1 withscores
1) "tuotuo"
2) "3"
3) "tuantuan"
4) "2"
5) "wang"
6) "1"
7) "miao"
8) "0.20000000000000001"
127.0.0.1:6379> zrange setName 0 -1 withscores
1) "miao"
2) "0.20000000000000001"
3) "wang"
4) "1"
5) "tuantuan"
6) "2"
7) "tuotuo"
8) "3"
exists key:判断一个 key 是否存在,存在返回 1,否则返回 0。
del key:删除某个 key,或是一系列 key,比如:del key1 key2 key3 key4。成功返回 1,失败返回 0(key 值不存在)。
type key:返回某个 key 元素的数据类型(none:不存在,string:字符,list:列表,set:元组,zset:有序集合,hash:哈希),key 不存在返回空。
keys key—pattern:返回匹配的 key 列表,比如:keys foo* 表示查找 foo 开头的 keys。
randomkey:随机获得一个已经存在的 key,如果当前数据库为空,则返回空字符串。
clear:清除界面。
rename oldname newname:更改 key 的名字,新键如果存在将被覆盖。
renamenx oldname newname:更改 key 的名字,新键如果存在则更新失败。
dbsize:返回当前数据库的 key 的总数。
# 可以在创建key之后设置过期时间
expire keyName 5
# 也可以在创建key的同时设置过期时间
set keyName hello ex 5
127.0.0.1:6379> set str hello ex 100
OK
127.0.0.1:6379> ttl str
(integer) 78
flushdb:清空当前数据库中的所有键。 flushall:清空所有数据库中的所有键。
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> dbsize
(integer) 0
127.0.0.1:6379> set obj hello11
OK
127.0.0.1:6379> dbsize
(integer) 1
127.0.0.1:6379> flushall
OK
config get:用来读取运行 Redis 服务器的配置参数。
config set:用于更改运行 Redis 服务器的配置参数。
auth:认证密码。
刚开始时 Reids 并未设置密码,密码查询结果为空。
然后设置密码为 test111,再次查询报错。
经过 auth 命令认证后,可正常查询。
127.0.0.1:6379> config get requirepass
1) "requirepass"
2) ""
127.0.0.1:6379> config set requirepass test111
OK
127.0.0.1:6379> config get requirepass
(error) NOAUTH Authentication required.
127.0.0.1:6379> auth test111
OK
127.0.0.1:6379> config get requirepass
1) "requirepass"
2) "test111"
config get *max-*-entries*
127.0.0.1:6379> config get *max-*-entries*
1) "hash-max-ziplist-entries"
2) "512"
3) "set-max-intset-entries"
4) "512"
5) "zset-max-ziplist-entries"
6) "128"
config resetstat:重置数据统计报告,通常返回值为“OK”。
info 命令可以查询 Redis 几乎所有的信息,其命令选项有如下:
server: Redis server 的常规信息
clients: Client 的连接选项
memory: 存储占用相关信息
persistence: RDB and AOF 相关信息
stats: 常规统计
replication: Master/Slave 请求信息
cpu: CPU 占用信息统计
cluster: Redis 集群信息
keyspace: 数据库信息统计
all: 返回所有信息
default: 返回常规设置信息
本章第3节已经介绍了一种设置密码的方式,现在介绍另一种通过修改配置文件来设置密码的方式。
# 方式一:在redis-cli窗口中使用config set requirepass 密码内容
# 方式二:修改配置文件
# step1
grep -n requirepass /usr/local/redis-5.0.5/redis.conf
# step2
vim /usr/local/redis-5.0.5/redis.conf
# step3
把requirepass配置后面的密码内容修改为test111
# step4
在redis-server窗口按ctrl+C退出服务器,然后重新启动
# 方式一:在redis-cli窗口中使用auth 密码内容
# 方式二:在启动客户端时登录
# 启动客户端时登录
redis-cli -a test111