Redis 是一个使用 C 语言写成的,开源的、key-value 结构的、非关系型数据库。它支持存储的 value 类型相对更多,包括 String(字符串)、List(列表)、Set(集合)、Sorted Set(有序集合) 和 Hash(哈希),而且这些操作都是原子性的
在此基础上,Redis 支持各种不同方式的排序,为了保证效率,数据都是缓存在内存中,Redis 可以周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步
redis是一个开源的,内存中的数据结构存储系统,它可以用作数据库,缓存和消息中间件,支持网络、可基于内存亦可持久化的日志型、Key-Value型数据库,并提供多种语言的API,为了实现其卓越的性能,Redis采用运行在内存中的数据集工作方式,根据使用情况,管理员可以每隔一定时间将数据集导出到磁盘,或者追加到命令日志中,也可以关闭持久化功能,将Redis作为一个高效的网络的缓存数据功能使用
redis支持多种类型的数据结构
redis是运维方面的技术栈,在大数据时代,redis可以解决高并发的问题,因此在后端也被广泛运用
redis在企业中大部分是部署在linux操作系统上的,很少会部署在windows上,但是在操作上基本是一样的
Redis没有官方的windows版本,但是微软开源技术团队开发和维护着这个Win64的版本,可在https://github.com/MicrosoftArchive/redis/releases下载redis解压即用
可以查看一下安装说明:README.md 和 INSTALL
redis的默认端口:6379
redis-cli.exe 客户端
redis-server.exe 服务端
在开启客户端前需要开启服务端
redis-server.exe
#使用默认配置启动redis服务
redis-server.exe redis.conf
#或者指定服务器IP连接redis服务
出现闪退需要相关指令开启,需要先在配置文件中放开bind 127.0.0.1的注释,绑定本机ip地址,在当前路径下开启cmd,输入redis-server.exe redis.windows.conf
启动客户端连接:
redis-cli
#使用默认配置连接服务器
redis-cli -h 127.0.0.1 -p 6379
#或者指定服务器IP连接redis服务
查看客户端是否连接成功
> ping
PONG
注:出现PONG,则连接成功!
关闭服务:
客户端命令窗口关闭:redis-cli -h 127.0.0.1 -p 6379 shutdown
注:若配置安全认证需添加密码 如
redis-cli -h 127.0.0.1 -p 6379 -a pwd shutdown
数据库操作:
查看所有存在的键值
keys *
清空所有数据库数据
flushall
清空当前数据库数据
flushdb
String举例:
添加、修改一个string:
21127.0.0.1:6379> set test 123
2OK
重新赋值:
21127.0.0.1:6379> set test 456
2OK
查询一个string:
21127.0.0.1:6379> get test
2"456"
append 追加一个string,返回字符串长度
21127.0.0.1:6379> append test 456
2(integer) 6
删除一个key:
21127.0.0.1:6379> del test
2(integer) 1
返回字符串长度
21127.0.0.1:6379> strlen test
2(integer) 0
hash是一个string类型的field和value的映射表,可以看作是一个Map表结构容器
添加(创建)一个hash:
21127.0.0.1:6379> hmset hashtest name xiaoming age 12
2OK
返回整个hash:
51127.0.0.1:6379> hgetall hashtest
21) "name"
32) "Tom"
43) "age"
54) "12"
返回hash中的一个字段:
xxxxxxxxxx
21127.0.0.1:6379> hget hashtest name
2"Tom"
返回hash中的多个字段:
xxxxxxxxxx
11127.0.0.1:6379> hdel hashtest age
删除一个hash中的字段:
xxxxxxxxxx
21127.0.0.1:6379> hdel hashtest name age
2(integer) 2
添加、修改hash中的字段,如果修改成功返回0
xxxxxxxxxx
21127.0.0.1:6379> hset hashtest name xiaoming
2(integer) 0
查看指定键是否存在:
xxxxxxxxxx
21127.0.0.1:6379> hexists age
2(integer) 0
注:返回整数1或0
1表示哈希包含该字段
0表示哈希不包含该字段,或key不存在
redis中数组底层封装的是栈、队列
添加元素到列表头(leftpush):
xxxxxxxxxx
21127.0.0.1:6379> lpush ls a b c
2(integer) 3
获取列表指定范围内的元素(起始索引到结束索引位置),-1会取到所有数据
xxxxxxxxxx
131127.0.0.1:6379> lrange ls 0 2
21) "c"
32) "b"
43) "a"
5127.0.0.1:6379> lrange ls 0 -1
61) "5"
72) "0"
83) "3"
94) "2"
105) "1"
116) "c"
127) "b"
138) "a"
添加元素到列表尾(rightpush):
xxxxxxxxxx
21127.0.0.1:6379> rpush ls 1 2 3
2(integer) 6
查看key对应的value类型:
xxxxxxxxxx
21127.0.0.1:6379> type ls
2list
通过索引获取列表中的值
xxxxxxxxxx
21127.0.0.1:6379> lindex ls 3
2"2"
获取列表长度:
xxxxxxxxxx
21127.0.0.1:6379> llen ls
2(integer) 8
移除元素:
xxxxxxxxxx
11127.0.0.1:6379> lrem ls count value
count > 0:从表头开始向表尾搜索,移除与value相等的元素,移除count个
count < 0:从表尾开始向表头搜索,移除与value相等的元素,移除|count|个
count = 0:移除表中所有与value相等的值
Set是String类型的无序集合,集合成员是唯一的,不允许重复
添加数据到集合:
xxxxxxxxxx
21127.0.0.1:6379> sadd settest 1 2 3
2(integer) 3
返回集合数据:
xxxxxxxxxx
41127.0.0.1:6379> smembers settest
21) "1"
32) "2"
43) "3"
获取集合数量:
xxxxxxxxxx
21127.0.0.1:6379> scard settest
2(integer) 3
移除集合中的值:
xxxxxxxxxx
21127.0.0.1:6379> srem settest 3
2(integer)1
Redis有序集合和集合一样也是String类型元素的集合,且不允许重复的成员
有序集合特点:
1、有序集合中每个元素都会关联一个double类型的分数,redis正是通过分数来为集合中的成员进行从小到大的排序
2、有序集合的成员是唯一的,但分数(score)却可以重复
3、有序集合和集合一样也是String类型元素的集合,且不允许重复的成员
添加元素到集合:
注:如果value(a)存在,更新分数,否则添加新value,分数可以相同
xxxxxxxxxx
21127.0.0.1:6379> zadd sortset 1 a
2(integer) 1
返回指定元素的分数:
xxxxxxxxxx
21127.0.0.1:6379> zscore sortset a
2"1"
查询元素(起始索引到结束索引位置):
xxxxxxxxxx
21127.0.0.1:6379>zrange sortset 0 1
21)"a"
移除集合中的元素:
xxxxxxxxxx
21127.0.0.1:6379> zrem sortset a
2(integer) 1
根据分数区间查询元素个数
xxxxxxxxxx
11127.0.0.1:6379> zcount zset 1 10
有序集合与列表(EXT)
有序集合类型在某些方面和列表类型有些相似:
1、二者都是有序的
2、二者都可以获得某一范围的元素
但是二者有着很大的区别,这使得它们的应用场景也是不同的:
列表类型是通过链表实现的,获取靠近两端的数据速度极快,而当元素增多后,访问中间数据的速度会较慢,所以它更加适合实现如“新鲜事”或“日志”这样很少访问中间元素的应用
有序集合类型是使用散列表和跳跃表(Skiplist)实现的,所以即使读取位于中间部分的数据速度也很快