Redis英文官网:https://redis.io/
Redis中文官网:http://www.redis.cn/
Redis最初是由Salvatore Sanfilippo开发的,现在由Redis Labs公司维护和支持。Redis使用ANSI C编写,可以运行在各种操作系统上,包括Linux、Windows、Mac OS X等。
Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
Redis是一个开源的内存数据结构存储系统,它支持多种数据结构,如字符串、哈希表、列表、集合等。Redis的主要特点是速度快、灵活性高、可扩展性好、并且支持持久化。
缓存:Redis最常见的用途是作为缓存层。由于Redis将数据存储在内存中,读取速度非常快,可以显著降低数据库的负载压力。通过将经常访问的数据缓存到Redis中,可以提高应用程序的响应速度和性能。
分布式锁:Redis提供了原子性操作和分布式锁的支持,可以实现分布式环境下的互斥访问控制。通过使用Redis的SETNX(set if not exists)命令,可以实现简单有效的分布式锁,避免多个进程或线程同时修改共享资源。
计数器和排行榜:Redis支持对数据进行原子性的增减操作,可以用于实现计数器功能。例如,可以用Redis来记录网站的访问次数、用户的点赞数等。此外,Redis还可以根据分数对数据进行排序,用于构建排行榜功能。
发布/订阅:Redis支持发布/订阅模式,可以实现消息的发布和订阅机制。通过使用PUBLISH命令发布消息,以及使用SUBSCRIBE和PSUBSCRIBE命令订阅消息,可以实现实时的消息传递和广播功能。
数据持久化:Redis提供了两种数据持久化方式,分别是快照(snapshotting)和AOF(Append-Only File)。快照方式可以定期将内存中的数据保存到磁盘上,以防止服务器故障时数据丢失。AOF方式则将每个写操作追加到文件中,以实现更高的数据持久性和灵活的恢复机制。
分布式缓存:Redis支持数据的分片和集群,可以构建分布式缓存系统。通过将数据分布在多个Redis节点上,可以扩展缓存容量和吞吐量,提高系统的可用性和性能。
国内:
国外:
下载官网:Redis版本下载官网
选择下载版本:
将下载的压缩包解压至自己的安装目录下即可完成安装
注意:该窗口启动成功后,若后续需使用Redis,则该窗口不可关闭
在该窗口下输入Redis命令进行操作
Redis在线命令测试器:http://try.redis.io
Redis命令大全:http://www.redis.cn/commands.html
存储单个值
适用于存储单个值的场景,如缓存、计数器、分布式锁等。
//存入键值对
set key value
//获取键对应的值
get key
//查看当前库的所有数据
keys *
//判断key是否存在,存在返回1,不存在返回0
EXISTS key
//查看key对应的value的字符串长度
STRLEN key
//追加value到key所对应的value之后
APPEND key value
//追加,key存在的话,拼接‘+’,返回总长度
APPEND key , value
//指定key对应的value的数据自增1,返回结果
incr key
//指定key对应的value的数据自减1,返回结果
decr key
//设置key对应的value指定时间内过期
setex key timeout value
//获取剩余时间
ttl key
键值对存储、无序。
适用于存储对象或实体的属性信息,以及需要按照键进行快速查找的场景。常见的应用包括缓存对象、存储用户信息、存储配置信息等。
//添加hash
hset key hashkey hashvalue
//获取hash中 hashkey对应的hashvalue
hget key hashkey
//获取hash中所有的hashkey hashvalue
hgetall key
//获取指定hash中的所有key
hkeys hashkey
//获取指定hash中的所有value
hvals hashvalue
//获取指定hash的长度
hlen key
//判断hashkey是否存在于指定的hash,存在返回1,不存在返回0
HEXISTS key hashkey
//根据hashkey 删除hash对象的键值对
hdel key hashkey
有序、可重复。
适用于需要保持元素顺序、允许重复元素的场景。常见的应用包括消息队列、任务队列、记录操作日志等。
//新增一个集合
127.0.0.1:6379> lpush list v1
(integer) 1
127.0.0.1:6379> lpush list v2
(integer) 2
127.0.0.1:6379> lpush list v3
(integer) 3
//查询list的所有元素值
127.0.0.1:6379> lrange list 0 -1
1) "v3"
2) "v2"
3) "v1"
//批量添加集合元素
127.0.0.1:6379> lpush list1 v1 v2 v3 v4 v5
(integer) 5
127.0.0.1:6379> lrange list1 0 -1
1) "v5"
2) "v4"
3) "v3"
4) "v2"
5) "v1"
注意:list集合元素在添加时,先添加后显示,后添加先显示
//往列表的左边添加数据
127.0.0.1:6379> lpush list v4
(integer) 4
127.0.0.1:6379> lrange list 0 -1
1) "v4"
2) "v3"
3) "v2"
4) "v1"
//往列表的右边添加数据
127.0.0.1:6379> rpush list v0
(integer) 5
127.0.0.1:6379> lrange list 0 -1
1) "v4"
2) "v3"
3) "v2"
4) "v1"
5) "v0"
//弹出最左边的元素
127.0.0.1:6379> lpop list
"v4"
//弹出最右边的元素
127.0.0.1:6379> rpop list
"v0"
127.0.0.1:6379> lrange list 0 -1
1) "v3"
2) "v2"
3) "v1"
//获取列表的长度
127.0.0.1:6379> llen list
(integer) 3
无序、不重复。
适用于需要存储唯一元素且不关心元素顺序的场景。常见的应用包括关注列表、粉丝列表、标签系统等。
//往set集合中添加元素
127.0.0.1:6379> sadd names zhangsan lisi wangwu zhaoliu
(integer) 4
//列出集合中的元素
127.0.0.1:6379> smembers names
1) "zhaoliu"
2) "lisi"
3) "wangwu"
4) "zhangsan"
//判断某个值在不在set中
127.0.0.1:6379> sismember names zhangsan
(integer) 1
//查看集合的长度
127.0.0.1:6379> scard names
(integer) 4
//删除set集合中指定元素
127.0.0.1:6379> srem names zhangsan
(integer) 1
127.0.0.1:6379> smembers names
1) "zhaoliu"
2) "lisi"
3) "wangwu"
//随机弹出集合中的元素
127.0.0.1:6379> spop names 1
1) "wangwu"
有序、不重复,每个元素都关联一个分数(score)。
适用于需要按照分数进行排序和范围查找的场景,如排行榜、计分系统等。
//添加zset值
127.0.0.1:6379> zadd c 20 java
(integer) 1
127.0.0.1:6379> zadd c 39 html
(integer) 1
127.0.0.1:6379> zadd c 59 css
(integer) 1
//查询zset中的值(根据score倒序)
127.0.0.1:6379> zrevrange c 0 -1
1) "css"
2) "html"
3) "java"
//查询zset中的值(根据score正序)
127.0.0.1:6379> zrange c 0 -1
1) "java"
2) "html"
3) "css"
//查询zset长度
127.0.0.1:6379> zcard c
(integer) 3
//删除指定值
127.0.0.1:6379> zrem c java
(integer) 1
127.0.0.1:6379> zrange c 0 -1
1) "html"
2) "css"