- 什么是Redis
Redis是一个开源的使用ANSIC语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,它支持存储的value类型主要有:string(字符串)、list(链表)、set(集合)、zset(sorted set –有序集合)和hash(哈希类型)。并提供多种语言的API,如:Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等。
- Redis的优势
性能 —— Redis能读的速度是110000次/s,写的速度是81000次/s
数据类型 —— Redis支持多种数据类型,string(字符串)、list(链表)、set(集合)、zset(sorted set –有序集合)和hash(哈希类型)
原子性 —— Redis的所有操作都是原子性的
- Redis的安装
安装请参考Redis的官网:https://redis.io/。
https://redis.io/download 提供Redis的下载及安装方法,本文不再做赘述
-Redis的命令
安装完成后,我们可以通过控制台命令进入Redis客户端管理:redis-cli
[root@bogon ~]# redis-cli
127.0.0.1:6379>
当看到这个界面的时候表示我们已经进入了Redis客户端管理了
上边讲过Redis支持string,list,set,zset,hash等几种数据结构,现在分别来看看这几种数据结构的用法
1. string
string是Redis的最基本的数据类型,同其他大多数KV数据库,一个key最大能存储512M的数据。string是二进制安全的,可以存储任何数据。
string的操作如下:
127.0.0.1:6379> set memory hello_world
OK
set表示添加操作,其中memroy是key,hellow_world是值,执行操作后打印OK表示添加成功。那如何获取添加的数据呢,答案是用get命令。
127.0.0.1:6379> get memory
"hello_world"
当我们执行get,后边跟随要查询的key,就能获取其中的值,上边代码我们已经获取到了之前用set方法添加的值。
2. list
list就是一个简单列表,数据的顺序是按照添加的顺序来排序的。数据可以添加到list的头部(left)或者尾部(right)
list的操作如下:
127.0.0.1:6379> lpush memory_list item1
(integer) 1
127.0.0.1:6379> lpush memory_list item2
(integer) 2
127.0.0.1:6379> lpush memory_list item3
(integer) 3
lpush表示向list的左边添加,memory_list为key,item1为value,(integer)1表示添加成功。我们向memory_list添加了三个数据,分别为:item1,item2,item3,现在来看看如何通过遍历来获取这些数据。使用lrange命令:
lrange memory_list 0 10
1) "item3"
2) "item2"
3) "item1"
lrange表示遍历list,注意这里跟平时用的for循环一样,需要提供开始和结束条件:0表示开始,10表示结束条件。这里要注意一下打印的顺序,我们使用的是lpush,这表示我们每次是向list的左边添加数据,所以打印的时候,不是按照我们添加的顺序打印的,这里要特别注意一下。
以下是几个常用的list操作
llen:获取列表长度
127.0.0.1:6379> llen memory_list
(integer) 3
lpop:移出并获取列表的第一个元素
127.0.0.1:6379> lpop memory_list
"item2"
3. set
set是无序集合,集合里的数据是唯一的不能重复,是通过哈希表实现的。
127.0.0.1:6379> sadd memory_set set1
(integer) 1
127.0.0.1:6379> sadd memory_set set1
(integer) 0
sadd表示向set中添加数据,其中memory_set为key,set1为value。注意:当我们添加set1的时候,打印的integer后的数字是1,表示添加成功,但是执行第二条的时候,由于还是添加的set1,根据set的数据是唯一的特性,第二次添加set1打印0,表示失败,不能重复添加。我们可以通过sadd命令多添加几条数据。我们可以通过smember命令来获取set里的数据:
127.0.0.1:6379> smembers memory_set
1) "set3"
2) "set2"
3) "set1"
以下是几个常用的set操作
scard:获取集合的成员数
127.0.0.1:6379> scard memory_set
(integer) 3
spop:移除并返回集合中的一个随机元素
127.0.0.1:6379> spop memory_set
"set3
4. zset
zset跟集合一样,是数据唯一的,不同点在于zset的每个成员都会关联一个double的分数,然后通过这个关联的分数来对zset进行排序。
127.0.0.1:6379> zadd memory_zset 1 zset1
(integer) 1
我们通过zadd来向zset添加一条数据,其中memory_zset是key,1是score(关联的分数),zset1是添加的数据。我们可以通过该命令来多添加几条数据。由于zset是有序集合,我们可以通过遍历来获取他的数据:
127.0.0.1:6379> zrange memory_zset 0 10
1) "zset1"
2) "zset2"
3) "zset3"
还可以通过追加withscores参数来遍历
127.0.0.1:6379> zrange memory_zset 0 10 withscores
1) "zset1"
2) "1"
3) "zset2"
4) "2"
5) "zset3"
6) "3"
这里可以看到我们在添加数据的时候,设置的score也打印了出来
以下是几个常用的set操作
zcard:获取zset的成员数
127.0.0.1:6379> zcard memory_zset
(integer) 3
zrem:移除有序集合中的一个或多个成员
127.0.0.1:6379> zrem memory_zset zset1
(integer) 1
5. hash
hash是一个field和value的映射表,比较适合用来存储对象
127.0.0.1:6379> hmset memory_hash f1 hash1
OK
我们可以通过hmset命令来向hash插入一条数据,其中memory_hash是key,f1表示field,hash1表示value。注意:由于hash是field和valuede 映射表,所以添加重复field会把旧的数据替换掉,如我们已经向memory_hash添加了一个field为f1的数据hash1,如果我们再添加一条数据,field还是为f1,但是value是hash2,那hash中不会增加一条新数据,而是field为f1的那条数据的value会被替换为hash2,这里要特别注意一下。我们可以通过hgetall获取hash里的所有数据:
hgetall memory_hash
1) "f1"
2) "hash1"
其中f1表示field,hash1表示value
以下是几个hash常用的操作
hget:获取存储在hash中指定field的value
127.0.0.1:6379> hget memory_hash f1
"hash1"
hdel:删除一个或多个hash中的field
127.0.0.1:6379> hdel memory_hash f1
(integer) 1
结语
以上只是对Redis的一个简单介绍及Redis的几种数据类型的介绍,Redis每种数据结构都提供了丰富的命令操作,读者可以从官网查询更详细用法,后续随着Redis的深入学习会编写更多关于Redis的相关知识,有兴趣的朋友可以关注一下。