介绍
Redis(REmote DIctionary Server)是一个开源的、使用ANSI C语言编写的、支持网络、可基于内存亦可持久化的日志型、非关系类型的Key-Value数据库。它提供了多种语言的API,如Java、C/C++、C#、PHP、JavaScript、Perl、Object-C、Python、Ruby、Erlang等,使得在各种语言环境下使用Redis都变得非常方便。
Redis是一个高性能的Key-Value数据库,其性能在很大程度上补偿了如Memcached这类Key-Value存储的不足,并且在某些场景下,它还可以作为关系数据库的良好补充。它支持的数据结构类型不仅限于简单的Key-Value,还包括list(链表)、set(集合)、zset(有序集合)和hash(散列)等,这些数据结构类型都支持丰富的操作,如push/pop、add/remove以及取交集、并集、差集等,且这些操作都是原子性的。此外,Redis还支持各种排序功能。
在数据持久化方面,Redis可以将内存中的数据定期写入磁盘,或者将修改操作写入追加的记录文件,以此实现了数据的持久化。这确保了即使在系统重启后,数据也可以被重新加载和使用。
Redis还提供了数据备份功能,即master-slave模式的数据备份。在这种模式下,数据可以从主服务器同步到任意数量的从服务器,从服务器可以是关联其他从服务器的主服务器。这种机制使得Redis可以执行单层树复制,对读取操作的可扩展性和数据冗余提供了很大帮助。
特点
高性能:Redis将数据存储在内存中,因此具有快速的读写性能。它使用了基于内存的数据结构和优化的算法,使得它能够每秒处理数十万次读写操作。
数据持久化:虽然Redis主要在内存中操作数据,但它也支持数据的持久化。具体来说,Redis支持两种数据持久化方式,即RDB(快照)和AOF(日志)。RDB是将内存中的数据定期保存到磁盘上的二进制文件,而AOF则是将数据修改操作记录为追加日志文件。这些功能可以在服务器重启或崩溃后恢复数据。
键值存储:Redis使用键值对存储数据,其中键(Key)是一个唯一的标识符,值(Value)可以是各种数据类型,如字符串、哈希表、列表、集合、有序集合等。这种设计使得Redis可以灵活地应对各种应用场景。
发布订阅模式:Redis支持发布与订阅模式(Pub/Sub),允许客户端订阅一个或多个频道,并在有新消息发布到频道时接收通知。这使得它非常适用于实时消息推送和事件发布/订阅模式。
分布式缓存:Redis提供了分片(Sharding)和复制(Replication)功能,使得它可以在多台服务器上进行水平扩展和高可用性部署。分片将数据分成多个分片存储在不同的节点上,而复制则是将数据复制到多个节点实现冗余和故障转移。
原子性操作:Redis的所有操作都是原子性的,支持事务。所谓的原子性就是对数据的更改要么全部执行,要么全部不执行。
安装(Windows)
由于Redis是绿色软件(解压即用),在官网即可看到Linux的安装包,但是官网没有Windows的,因此此处以Windows作为示例,安装包网址如下Releases · microsoftarchive/redis · GitHub
下载Redis-x64-<版本号>.zip 后解压到需要的目录即可
编辑
双击redis-server.exe即可打开,然后再打开redis-cli.exe,注意此时两个窗口都应该打开,可以简单输入一个指令 keys * 来检测是否正常
简单配置
修改端口
在redis.windows.conf中
编辑
修改port 后的值,可以改变redis-server的监听端口
设置密码
依旧在redis.windows.conf中
编辑
将386行的注释去掉,然后修改 requirepass 后的值,将foobared修改为你的密码,然后重启redis-server即可
注意
如果想让redis读取conf文件,就要在命令行中输入
redis-server.exe redis.windows.conf
指令,来明确redis-server指定的配置文件
同时,redis-cli的打开方式也应该为命令行中输入
redis-cli.exe -h localhost -p 9999 -a foobared
来指定ip(可选)以及端口,其中 -h 用与指定ip, -p用于指定端口,你应该修改为你的实际ip以及端口。
使用
String
设置值:使用SET命令可以设置键的值。如果键已经存在,SET命令会更新键的值。如果键不存在,SET命令会创建一个新键。
SET key value
获取值:使用GET命令可以获取键的值。
GET key
获取值的长度:使用STRLEN命令可以获取字符串值的长度。
STRLEN key
追加值:使用APPEND命令可以在现有值的末尾追加字符串。
APPEND key value
自增/自减:使用INCR和DECR命令可以对整数值进行递增和递减操作。
INCR key
DECR key
设置并返回旧值:使用GETSET命令可以设置键的新值,并返回旧值。
GETSET key newvalue
批量设置/获取:使用MSET和MGET命令可以一次性设置或获取多个键值对。
MSET key1 value1 key2 value2 ...
MGET key1 key2 ..
设置值并设置过期时间:使用SETEX命令可以设置键的值,并指定键的过期时间(以秒为单位)。
SETEX key seconds value
设置值仅当键不存在:使用SETNX命令可以设置键的值,但仅当键不存在时。如果键已存在,则SETNX命令不会执行任何操作。
SETNX key value
字符串的子串操作:使用GETRANGE命令可以获取字符串的子串。
GETRANGE key start stop
设置字符串的子串:使用SETRANGE命令可以设置字符串的子串。
SETRANGE key offset value
示例
编辑
List
在列表左端插入元素:使用LPUSH命令将一个或多个值插入到列表的左边。如果键不存在,则创建一个空列表,然后进行LPUSH操作。
LPUSH key value1 [value2 ...]
在列表右端插入元素:使用RPUSH命令将一个或多个值插入到列表的右边。
RPUSH key value1 [value2 ...]
移除并获取列表左端的元素:使用LPOP命令移除并返回列表的左端元素。如果列表没有元素,则返回nil。
LPOP key
移除并获取列表右端的元素:使用RPOP命令移除并返回列表的右端元素。
RPOP key
获取列表长度:使用LLEN命令获取列表的长度。
LLEN key
获取列表指定范围的元素:使用LRANGE命令获取列表指定范围内的元素。范围可以通过起始索引和结束索引指定,索引从0开始,也可以是负数表示从列表尾部开始。
LRANGE key start stop
lrange key 0 -1 可以显示key列表的全部元素
移除列表中的元素:使用LREM命令移除列表中指定数量的指定值。
LREM key count value
修剪列表:使用LTRIM命令修剪列表,使其只保留指定范围内的元素。
LTRIM key start stop
获取列表指定索引位置的元素:使用LINDEX命令获取列表中指定索引位置的元素。
LINDEX key index
在列表指定位置前或后插入元素:使用LINSERT命令在列表的指定元素前或后插入一个新元素。
LINSERT key BEFORE|AFTER pivot value
将列表中的一个元素移动到另一个列表:使用RPOPLPUSH命令将源列表的右端元素弹出,并插入到目标列表的左端。
RPOPLPUSH source destination
示例
编辑
编辑
Set
添加元素:使用SADD
命令向集合中添加一个或多个元素。如果元素已存在于集合中,则添加操作将忽略该元素。
SADD key member1 [member2 ...]
移除元素:使用SREM
命令从集合中移除一个或多个元素。如果元素不存在于集合中,则移除操作将被忽略。
SREM key member1 [member2 ...]
获取集合的所有元素:使用SMEMBERS
命令获取集合中的所有元素。
SMEMBERS key
判断元素是否存在于集合中:使用SISMEMBER
命令判断指定元素是否存在于集合中。如果元素存在,则返回1;否则返回0。
SISMEMBER key member
获取集合的元素个数:使用SCARD
命令获取集合中元素的个数。
SCARD key
随机获取集合中的一个元素:使用SRANDMEMBER
命令随机获取集合中的一个元素。如果指定了count参数并且为正数,则返回count个随机元素(不重复)。如果count参数为负数,则返回count个随机元素(允许重复)。
SRANDMEMBER key [count]
从集合中随机移除并返回一个元素:使用SPOP
命令随机移除并返回集合中的一个元素。如果集合为空,则返回nil。
SPOP key
集合的交集、并集和差集:
- 使用
SINTER
命令获取多个集合的交集。 - 使用
SUNION
命令获取多个集合的并集。 - 使用
SDIFF
命令获取第一个集合相对于其他集合的差集。
SINTER key1 [key2 ...]
SUNION key1 [key2 ...]
SDIFF key1 [key2 ...]
将集合中的元素移动到另一个集合:使用SMOVE
命令将源集合中的一个元素移动到目标集合中。如果目标集合已包含该元素,则SMOVE
命令只是简单地从源集合中删除该元素。
SMOVE source destination member
示例
编辑
编辑
zSet
Redis的zSet(有序集合)数据类型提供了一系列的操作,这些操作允许你添加、删除、查找、更新和排序集合中的元素。有序集合与普通集合的主要区别在于每个元素都会关联一个分数(score),这个分数用于在集合中对元素进行排序。
添加元素:使用ZADD
命令向有序集合中添加一个或多个元素,每个元素都关联一个分数。如果元素已存在,则更新其分数。
ZADD key score1 member1 [score2 member2 ...]
获取集合的元素个数:使用ZCARD
命令获取有序集合中元素的个数。
ZCARD key
获取指定分数范围的元素:使用ZRANGE
命令获取有序集合中指定分数范围内的元素。默认情况下,元素按分数从低到高排序。
ZRANGE key start stop [WITHSCORES]
获取指定排名范围的元素:使用ZREVRANGE
命令获取有序集合中指定排名范围内的元素。默认情况下,元素按分数从高到低排序。
ZREVRANGE key start stop [WITHSCORES]
删除元素:使用ZREM
命令从有序集合中删除一个或多个元素。
ZREM key member1 [member2 ...]
获取元素的分数:使用ZSCORE
命令获取有序集合中指定元素的分数。
ZSCORE key member
增加或减少元素的分数:使用ZINCRBY
命令增加或减少有序集合中指定元素的分数。
ZINCRBY key increment member
获取指定分数范围的元素个数:使用ZCOUNT
命令获取有序集合中指定分数范围内的元素个数。
ZCOUNT key min max
获取元素的逆排名:使用ZREVRANK
命令获取有序集合中指定元素的排名(按分数从高到低)。
ZREVRANK key member
获取分数最高的元素:使用ZREVRANGE命令获取有序集合中分数最高的元素。
ZREVRANGE key 0 0
获取分数最低的元素:使用ZRANGE命令获取有序集合中分数最低的元素。
ZRANGE key 0 0
返回指定分数范围内的元素:使用ZRANGEBYSCORE
和ZREVRANGEBYSCORE
命令可以移除并返回指定分数范围内的元素。
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]
示例
编辑
Hash
添加或更新字段:使用HSET
命令向hash表中添加一个或多个字段及其值。如果字段已存在,则更新其值。
HSET key field value [field value ...]
获取字段值:使用HGET
命令获取存储在hash表中指定字段的值。
HGET key field
获取所有字段和值:使用HGETALL
命令获取hash表中指定key的所有字段和值。
HGETALL key
获取所有字段:使用HKEYS
命令获取hash表中所有字段的名称。
HKEYS key
获取所有值:使用HVALS
命令获取hash表中所有字段的值。
HVALS key
获取字段数量:使用HLEN
命令获取hash表中字段的数量。
HLEN key
判断字段是否存在:使用HEXISTS
命令查看hash表key中指定的字段是否存在。
HEXISTS key field
删除字段:使用HDEL
命令删除hash表中的一个或多个字段。
HDEL key field [field ...]
只在字段不存在时设置字段值:使用HSETNX
命令设置hash表的字段值,但仅当字段不存在时。
HSETNX key field value
示例
编辑