什么是redis?为什么要用redis?
Redis,英文全称是Remote Dictionary Server(远程字典服务),是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
redis与mysql最大的不同就在于它的的数据都在内存中,读写速度非常快。所以广泛应用于缓存,另外,Redis也经常用来做分布式锁。除此之外,Redis支持事务、持久化、LUA 脚本、LRU 驱动事件、多种集群方案。
redis为什么那么快呢?
Redis之所以如此快速,有以下几个主要原因:
-
内存存储:Redis主要将数据存储在内存中,而不是像传统的关系型数据库一样存储在磁盘上。内存的读写速度比磁盘快几个数量级,这使得Redis能够实现非常低延迟的数据访问。
-
简单的数据结构:Redis采用了简单的键值存储模型,可以直接根据键快速检索数据。与复杂的查询语言相比,这种简单的数据结构使得Redis能够以非常高的速度执行基本操作,如插入、更新和查找。
-
单线程架构:Redis通常以单线程的方式运行。这意味着它不需要进行线程间的锁定和同步操作,避免了多线程并发带来的开销和竞争条件。单线程架构简化了Redis的内部实现,使其能够更高效地执行操作。
-
非阻塞IO:Redis使用非阻塞的IO模型,它能够处理大量的并发连接而不会阻塞其他请求。它采用事件驱动的方式,通过使用事件轮询机制,能够高效地处理客户端请求和响应。
-
良好的数据结构支持:Redis提供了丰富的数据结构,如字符串、列表、哈希、集合和有序集合。这些数据结构在内部都经过了高度优化,使得Redis能够高效地执行各种操作,如插入、删除、查找和排序。
redis的数据结构类型
- String(字符串)
介绍:String是Redis最基础的数据结构类型,它是二进制安全的,可以存储图片或者序列化的对象,值最大存储为512M
作用于:缓存、分布式ID、分布式锁、全局session、全局计数器
语法:set key value、get key等
127.0.0.1:6379> set name zhangsan
OK
127.0.0.1:6379> get name
"zhangsan"
127.0.0.1:6379>
- Hash(哈希)
介绍:在Redis中,哈希类型是指v(值)本身又是一个键值对(k-v)结构
作用于:保存对象的多个属性
语法:hset key field value、hget key field
127.0.0.1:6379> hmset per name zhangsan age 19 sex nan
OK
127.0.0.1:6379> hgetall per
1) "name"
2) "zhangsan"
3) "age"
4) "19"
5) "sex"
6) "nan"
127.0.0.1:6379>
- List(列表)
介绍:列表(list)类型是用来存储多个有序的字符串,一个列表最多可以存储2^32-1个元素
作用于:
-
模拟数组、栈、队列等数据结构
-
线型结构,如:粉丝、点赞列表
-
消息队列
语法:lpush key value [value ...]、lrange key start end
127.0.0.1:6379> rpush list 0
(integer) 1
127.0.0.1:6379> rpush list 1 2 3 4 5
(integer) 6
127.0.0.1:6379> lrange list 0 10
1) "0"
2) "1"
3) "2"
4) "3"
5) "4"
6) "5"
127.0.0.1:6379>
- Set(集合)
介绍:集合(set)类型也是用来保存多个的字符串元素,但是不允许重复元素
作用于:点赞数(不会重复)、共同好友(交集、并集、差集)
语法:sadd key element [element ...] 、smember key
127.0.0.1:6379> sadd school zhangsan
(integer) 1
127.0.0.1:6379> sadd school lisi
(integer) 1
127.0.0.1:6379> sadd school wangwu
(integer) 1
127.0.0.1:6379> smembers school
1) "wangwu"
2) "lisi"
3) "zhangsan"
127.0.0.1:6379>
- zset(有序集合)
介绍:已排序的字符串集合,同时元素不能重复
作用于:排行榜
语法:zadd key score member [score member ...],zrank key member
127.0.0.1:6379> zadd student 0 zhangsan
(integer) 1
127.0.0.1:6379> zadd student 1 wangwu
(integer) 1
127.0.0.1:6379> zrangebyscore student 0 10
1) "zhangsan"
2) "wangwu"
127.0.0.1:6379>
总结:
Redis是一种功能强大的内存数据库,它通过存储数据在内存中并支持灵活的数据结构,提供了快速、可靠和高效的数据存储和检索。它在提高应用程序性能和处理大量数据时非常有用,因此被广泛应用于各种应用程序和网站中。