Redis初识(安装与基本操作)

时间:2022-09-30 20:32:20

Redis安装

可以直接到redis.io(redis官网)上下载,当前比较新的版本是3.0.5,下载下来后是一个tar包,放到Linux环境下,使用的Linux环境是CentOS7,进行解压安装。

tar -zxf redis-3.0.5.tar.gz
cd redis-3.0.5
make

这个进行到make这一步就可以了,不需要执行make install操作,redis的服务端和CLI都位于当前目录下的src/目录,redis-server是服务器端,redis-cli是操作端。
redis.conf是配置文件,需要修改一下配置文件中的daemonize项,值由no修改为yes,这个配置项的作用是让redis服务启动后在后台运行。仅修改配置文件是不行的,要使修改起效,需要在启动的时候指定配置文件:

[root@localhost redis-3.0.5]# src/redis-server redis.conf 
[root@localhost redis-3.0.5]#

启动CLI,验证一下是否可用:

[root@localhost redis-3.0.5]# src/redis-cli 
127.0.0.1:6379> set name Inspur
OK
127.0.0.1:6379> get name
"Inspur"
127.0.0.1:6379>

好的,到这里Redis安装就已经成功了!

Redis基本操作

Redis的基本操作介绍包括如下几个方面:关键字(Keys)、字符串(String)、哈希表(Hashs)、列表(Lists)、集合(Sets)、有序集合(Sorted Sets)。下面依次来进行介绍。

关键字(Keys)

127.0.0.1:6379> get name    // 获取上节设置的key=>name的值
"Inspur"
127.0.0.1:6379> set name InspurBJ // 用set指令再次设置name的值,会覆盖掉原有的值
OK
127.0.0.1:6379> get name
"InspurBJ"
127.0.0.1:6379> exists name // exists检测key是否存在,存在返回1,不存在返回0
(integer) 1
127.0.0.1:6379> exists n
(integer) 0
127.0.0.1:6379> expire name 10 // expire设置key的存活时间,默认单位为秒
(integer) 1
127.0.0.1:6379> get name
"InspurBJ"
127.0.0.1:6379> get name // 10秒钟后,再获取key=>name的值,返回nil,redis中对很多未设置的都会返回nil
(nil)
127.0.0.1:6379> set name BeiJing
OK
127.0.0.1:6379> get name
"BeiJing"
127.0.0.1:6379> del name // del删除key
(integer) 1
127.0.0.1:6379> get name
(nil)
127.0.0.1:6379> set addr Qd
OK
127.0.0.1:6379> get addr
"Qd"
127.0.0.1:6379> dump addr // dump将给定的key序列化,返回序列化后的值
"\x00\x02Qd\x06\x00'9T\xb6\x84B\xd6\x03"
127.0.0.1:6379> get addr
"Qd"
127.0.0.1:6379> expire addr 30
(integer) 1
127.0.0.1:6379> ttl addr // ttl检测key的剩余存活时间,返回-1表示未设置存活时间,返回-2表示key不存在
(integer) 27
127.0.0.1:6379> get addr
"Qd"
127.0.0.1:6379> ttl addr
(integer) 1
127.0.0.1:6379> get addr
(nil)
127.0.0.1:6379> set level 5
OK
127.0.0.1:6379> get level
"5"
127.0.0.1:6379> move level 1 // move移动key到另一个数据库,redis打开后默认的数据库是0,这条指令的意思是将key=>level移动到数据库1
(integer) 1
127.0.0.1:6379> get level // move之后,数据库0中不再有key=>level
(nil)
127.0.0.1:6379> select 1 // 切换到数据库1
OK
127.0.0.1:6379[1]> get level // 数据库1中出现了key=>level
"5"
127.0.0.1:6379[1]> select 0 // 返回数据库0
OK
127.0.0.1:6379> set key1 pop
OK
127.0.0.1:6379> rename key1 key2 // rename将key1重命名为key2
OK
127.0.0.1:6379> exists key1
(integer) 0
127.0.0.1:6379> exists key2 // 重命名后,key2存在,key1不存在
(integer) 1
127.0.0.1:6379> type key2 // type获取key的类型
string
127.0.0.1:6379> lpush cc 5 9.2 10 8.6 3 // lpush是创建一个key=>cc的列表,这是列表部份的内容,为了演示sort排序,先加进来
(integer) 5
127.0.0.1:6379> sort cc // sort排序,可以对列表、集合、有序集合进行排序,默认升序
1) "3"
2) "5"
3) "8.6"
4) "9.2"
5) "10"
127.0.0.1:6379> sort cc desc // 使用desc可以降序排序,sort的使用和sql语句有很多相似之处,具体可查阅命令相关文档
1) "10"
2) "9.2"
3) "8.6"
4) "5"
5) "3"
127.0.0.1:6379>

字符串(String)

127.0.0.1:6379> set name lucy   // set是最基本的设置方法,设置一个key=>name的值为lucy
OK
127.0.0.1:6379> get name // get是最基本的获取方法,获取一个key=>name的值
"lucy"
127.0.0.1:6379> setex company 10 Inspur // setex是在设置key=>value时同步设置存活时间,默认单位为秒,它比关键字(keys)当中的expire优秀的一点是能够同步设置
OK
127.0.0.1:6379> ttl company
(integer) 7
127.0.0.1:6379> get company
(nil)
127.0.0.1:6379> mset kname lily kage 18 ksex wm // mset同时设置多个key=>value
OK
127.0.0.1:6379> mget kname kage ksex // mget同时获取多个key的值
1) "lily"
2) "18"
3) "wm"
127.0.0.1:6379> get name
"lucy"
127.0.0.1:6379> append name loves // append在key原本的值后面追加,不覆盖原值
(integer) 9
127.0.0.1:6379> get name
"lucyloves"
127.0.0.1:6379> strlen name // strlen获取key的value的长度
(integer) 9
127.0.0.1:6379> set ktime 10
OK
127.0.0.1:6379> get ktime
"10"
127.0.0.1:6379> incr ktime // incr值加1,与memcached所用的incr功能相同
(integer) 11
127.0.0.1:6379> get ktime
"11"
127.0.0.1:6379> decr ktime // decr值减1
(integer) 10
127.0.0.1:6379> get ktime
"10"
127.0.0.1:6379> incrby ktime 5 // incrby值加一个指定的数值
(integer) 15
127.0.0.1:6379> get ktime
"15"
127.0.0.1:6379> decrby ktime 6 // decrby值减一个指定的数值
(integer) 9
127.0.0.1:6379> get ktime
"9"
127.0.0.1:6379> set foo 'hello world'
OK
127.0.0.1:6379> get foo
"hello world"
127.0.0.1:6379> setrange foo 6 redis // setrange从偏移位开始替换值
(integer) 11
127.0.0.1:6379> get foo
"hello redis"
127.0.0.1:6379> strlen foo
(integer) 11
127.0.0.1:6379> setrange foo 15 best // setrange如果指定的偏移位超过字符串的长度,则不足的位由0替位
(integer) 19
127.0.0.1:6379> get foo
"hello redis\x00\x00\x00\x00best"
127.0.0.1:6379> getrange foo 0 11 // getrange获取两个偏移位之间的值
"hello redis\x00"
127.0.0.1:6379> getset foo kitty // getset重设一个key的值,并返回这个key之前的值
"hello redis\x00\x00\x00\x00best"
127.0.0.1:6379> get foo
"kitty"
127.0.0.1:6379>

哈希(Hash)

127.0.0.1:6379> hset myhash f1 babyGo   // hset是操作哈希所用,其作用与字符串中的set相同,指令中的myhash可以理解为哈希集,f1可理解为myhash哈希集里的键名,babyGo则是myhash哈希集当中f1键的值(可以把它当成PHP中的数组来理解,myhash是数组名,f1是key,babyGo是f1对应的value)
(integer) 1
127.0.0.1:6379> hget myhash f1 // hget是操作哈希所用,其作用与字符串中的get相同,获取myhash哈希集中f1键的值
"babyGo"
127.0.0.1:6379> hmset myhash f1 badBoy f2 goodGirl f3 godGirl // hmset是设置多个值,如果哈希集中原本存在这个键,那这个键的值将会被覆盖,例如f1
OK
127.0.0.1:6379> hmget myhash f1 f2 f3 // hmget获取多个值
1) "badBoy"
2) "goodGirl"
3) "godGirl"
127.0.0.1:6379> hexists myhash f1 // hexists检测哈希集中的某个键是否存在,存在返回1,不存在返回0
(integer) 1
127.0.0.1:6379> hexists myhash f4
(integer) 0
127.0.0.1:6379> hgetall myhash // hgetall获取哈希集中的所有键和值
1) "f1"
2) "badBoy"
3) "f2"
4) "goodGirl"
5) "f3"
6) "godGirl"
127.0.0.1:6379> hlen myhash // hlen获取哈希集中包含的键的数量
(integer) 3
127.0.0.1:6379> hkeys myhash // hkeys获取哈希集中的所有的键名
1) "f1"
2) "f2"
3) "f3"
127.0.0.1:6379> hdel myhash f2 // hdel删除指定的哈希集中的键
(integer) 1
127.0.0.1:6379> hkeys myhash
1) "f1"
2) "f3"
127.0.0.1:6379>

列表(List)

127.0.0.1:6379> lpush mylist tom jerry lucy lily    // lpush向一个列表中插入值,如果列表不存在则创建,插入值的顺序是从右至左
(integer) 4
127.0.0.1:6379> lindex mylist 0 // lindex获取指定列表的指定索引的值,下标从0开始
"lily"
127.0.0.1:6379> lrange mylist 0 -1 // lrange获取指定列表的两个偏移量之间的值,正数表示从头开始正数,负数表示从尾部开始倒数
1) "lily"
2) "lucy"
3) "jerry"
4) "tom"
127.0.0.1:6379> lpush mylist odom // 使用lpush从列表左侧插入值
(integer) 5
127.0.0.1:6379> rpush mylist kobe // 使用rpush从列表右侧插入值
(integer) 6
127.0.0.1:6379> lrange mylist 0 -1 // 展示上两步操作完成后的列表情况
1) "odom"
2) "lily"
3) "lucy"
4) "jerry"
5) "tom"
6) "kobe"
127.0.0.1:6379> lpop mylist // lpop移除列表中的第一个元素并返回值
"odom"
127.0.0.1:6379> lrange mylist 0 -1
1) "lily"
2) "lucy"
3) "jerry"
4) "tom"
5) "kobe"
127.0.0.1:6379> lrem mylist 0 lily // lrem删除列表中前count次出现的值为value的元素,当count=0时,表示删除列表中全部的值为value的元素;当count>0时,表示删除前count个值为value的元素;当count<0时,表示删除从后数count个值为value的元素
(integer) 1
127.0.0.1:6379> lrange mylist 0 -1
1) "lucy"
2) "jerry"
3) "tom"
4) "kobe"
127.0.0.1:6379> rpop mylist // rpop与lpop相对,移除的是最后一个元素并返回值
"kobe"
127.0.0.1:6379> lrange mylist 0 -1
1) "lucy"
2) "jerry"
3) "tom"
127.0.0.1:6379> llen mylist // llen返回列表的值的个数
(integer) 3
127.0.0.1:6379> linsert mylist before jerry babyGo // linsert向列表中插入数据,在指定的元素名之前before(或之后after),指令的意思为向mylist列表中的jerry元素之前插入值babyGo
(integer) 4
127.0.0.1:6379> lrange mylist 0 -1
1) "lucy"
2) "babyGo"
3) "jerry"
4) "tom"
127.0.0.1:6379> linsert mylist after jerry php // 指令的意思为向mylist列表中的jerry元素之后插入值php
(integer) 5
127.0.0.1:6379> lrange mylist 0 -1
1) "lucy"
2) "babyGo"
3) "jerry"
4) "php"
5) "tom"
127.0.0.1:6379> ltrim mylist 1 -2 // ltrim截取列表,索引值从0开始,负数表示从尾部倒数,指令的意思是截取mylist列表中的第2个至倒数第2个元素之间的元素
OK
127.0.0.1:6379> lrange mylist 0 -1
1) "babyGo"
2) "jerry"
3) "php"
127.0.0.1:6379> lset mylist 1 niceDay // lset设置列表中指定索引位置的值,指令意思为设置mylist列表中索引值为1的值为niceDay,索引值从0开始,1表示列表中的第2个元素
OK
127.0.0.1:6379> lrange mylist 0 -1
1) "babyGo"
2) "niceDay"
3) "php"
127.0.0.1:6379>

集合(Sets)

127.0.0.1:6379> sadd myset hello world kitty baby   // sadd添加一个或多个元素到集合中
(integer) 4
127.0.0.1:6379> smembers myset // smembers返回集合所有的元素
1) "baby"
2) "kitty"
3) "world"
4) "hello"
127.0.0.1:6379> sismember myset baby // sismember判定是否是集合的成员,是则返回1,不是或不存在则返回0
(integer) 1
127.0.0.1:6379> sismember myset boy
(integer) 0
127.0.0.1:6379> scard myset // scard返回集合中元素的数量
(integer) 4
127.0.0.1:6379> spop myset // spop移除并返回集合中的一个元素,官方文档说是随机的一个元素,但实验结果来看,是第1个元素
"baby"
127.0.0.1:6379> smembers myset
1) "kitty"
2) "world"
3) "hello"
127.0.0.1:6379> srem myset world // srem移除集合中的指定元素
(integer) 1
127.0.0.1:6379> smembers myset
1) "kitty"
2) "hello"
127.0.0.1:6379> sadd myset2 h2oo w2oo
(integer) 2
127.0.0.1:6379> smembers myset2
1) "h2oo"
2) "w2oo"
127.0.0.1:6379> sadd myset2 kitty
(integer) 1
127.0.0.1:6379> smembers myset2
1) "h2oo"
2) "kitty"
3) "w2oo"
127.0.0.1:6379> sdiff myset myset2 // sdiff返回集合1与集合2的差集
1) "hello"
127.0.0.1:6379> sinter myset myset2 // sinter返回集合1与集合2的交集
1) "kitty"
127.0.0.1:6379> sunion myset myset2 // sunion返回集合1与集合2的并集
1) "h2oo"
2) "w2oo"
3) "hello"
4) "kitty"
127.0.0.1:6379> smove myset2 myset h2oo // smove移动集合1中的元素到集合2中,指令的意思是移动集合myset2中的元素h2oo到集合myset中
(integer) 1
127.0.0.1:6379> smembers myset2
1) "kitty"
2) "w2oo"
127.0.0.1:6379> smembers myset
1) "h2oo"
2) "kitty"
3) "hello"
127.0.0.1:6379>

有序集合(Sorted Sets)

有序集合与集合的不同之处,在于有序集合之中的元素都包含有一个分值(score),有序集合当中的所有元素根据分值的大小进行排序,因此称为有序集合。

127.0.0.1:6379> zadd myzset 1 bj    // zadd添加指定的成员到有序集合中,每个成员都有一个分数
(integer) 1
127.0.0.1:6379> zadd myzset 1 sh
(integer) 1
127.0.0.1:6379> zadd myzset 2 qd
(integer) 1
127.0.0.1:6379> zadd myzset 5 cl
(integer) 1
127.0.0.1:6379> zrange myzset 0 -1 // zrange返回有序集合中指定区域内的成员,默认按分数升序排列,如果需要降序排序,使用zrevrange
1) "bj"
2) "sh"
3) "qd"
4) "cl"
127.0.0.1:6379> zrange myzset 0 -1 withscores // 添加参数withscores,在返回显示时同时显示分数
1) "bj"
2) "1"
3) "sh"
4) "1"
5) "qd"
6) "2"
7) "cl"
8) "5"
127.0.0.1:6379> zrem myzset sh // zrem移除有序集合中的指定成员
(integer) 1
127.0.0.1:6379> zrange myzset 0 -1
1) "bj"
2) "qd"
3) "cl"
127.0.0.1:6379> zcard myzset // zcard返回有序集合的元素个数
(integer) 3
127.0.0.1:6379> zcount myzset 2 5 // zcount返回有序集合中score值在指定区间内的元素
(integer) 2
127.0.0.1:6379> zrank myzset cl // zrank返回有序集合中成员的排名,默认是升序的排名,如果需要降序的排名,使用zrevrank
(integer) 2
127.0.0.1:6379> zrank myzset bj
(integer) 0
127.0.0.1:6379> zincrby myzset 8 qd // zincrby为有序集合中的指定成员加上指定的分数,返回该成员的最新分数
"10"
127.0.0.1:6379> zrange myzset 0 -1 withscores
1) "bj"
2) "1"
3) "cl"
4) "5"
5) "qd"
6) "10"
127.0.0.1:6379> zscore myzset cl // zscore返回有序集合中指定元素的分数
"5"
127.0.0.1:6379>

基本内容先介绍到这里,还有一些相关的并没有介绍,可以查看Redis命令列表说明文档去了解。