Reis
Redis 是一个开源的高性能键值存储数据库,它通常被用作数据结构服务器。由于其出色的性能和灵活性,Redis 被广泛应用于缓存、会话管理、消息队列、排行榜、实时分析等场景。
主要特点:
1.数据结构丰富:Redis 不仅支持简单的键值对,还支持多种数据结构,如字符串(Strings)、列表(Lists)、集合(Sets)、有序集合(Sorted Sets)、哈希表(Hashes)、位图(Bitmaps)、超日志(HyperLogLogs)和地理空间索引(Geospatial Indexes)。
2.内存存储与持久化:Redis 将所有数据保存在内存中,以实现快速的读写访问。同时,它提供了多种持久化选项,包括RDB(Redis Database)快照和AOF(Append Only File)日志,以确保数据的安全性。
3.原子操作:Redis 的所有操作都是原子性的,这意味着它们要么完全执行,要么完全不执行。这使得 Redis 在并发环境下非常可靠。
4.支持发布/订阅模式:Redis 支持发布/订阅消息模式,允许客户端订阅一个或多个频道,并接收发布到这些频道的消息。
5.支持Lua脚本:Redis 支持使用Lua脚本进行复杂的操作,这使得用户可以将多个命令组合成一个原子操作,从而实现更复杂的逻辑。
6.高可用性和分布式:Redis 提供了哨兵(Sentinel)系统和集群(Cluster)模式,以支持高可用性和水平扩展。
应用场景:
- 缓存系统:由于其高速读写能力,Redis 常被用作缓存解决方案,以减少数据库的访问次数和提高应用性能。
- 会话存储:Redis 可以用来存储用户会话信息,尤其适用于分布式系统中。
- 消息队列:Redis 的列表数据结构和发布/订阅机制使其可以作为消息队列系统使用。
- 实时计数器:例如,用于统计网站访问量、视频播放次数等。
- 排行榜/领导榜:有序集合数据结构非常适合实现排行榜系统。
- 地理空间数据处理:Redis 的地理空间索引可以用于存储地理位置信息,并进行各种地理空间查询。
总结:
Redis 是一个功能强大的工具,适用于多种不同的应用场景。它的高性能和丰富的数据结构使其成为开发人员在构建需要快速访问和处理大量数据的应用时的首选。不过,由于它将数据保存在内存中,需要考虑内存成本和数据持久化策略。
下载方式
Linux下载
yum install redis
输入redis-server启动redis服务端
输入redis-cli启动redis客户端
6379是redis默认端口号
redis的数据是以键值对存储 key value
redis是以二进制存储 存中文时 输出的都是十六进制
登陆时 redis-cli --raw展示原始数据 就可以展示中文
基本指令
set key value 设置键值对
get ky 获取值
del key删除值
exists key 表示值是否存在 (1存在 0不存在)
keys * 查找所有键
keys *me 查找所有以me结尾的键
flushall 删除所有键 慎用
ttl key 显示键过期时间 (-2表示已过期 -1表示没设置过期时间 其余都是还剩多少时间)
expire key 10 设置已经存在的键过期时间为10s
setex key 5 value 设置键值 过期时间为5s
setnx key value 如何key不存在再创建
[root@VM-12-13-centos Redis]# redis-cli --raw
127.0.0.1:6379> set name zhangsan
OK
127.0.0.1:6379> get name
zhangsan
127.0.0.1:6379> exists name
1
127.0.0.1:6379> keys *
name
name1
letter
result
geekhour
person
courd
127.0.0.1:6379> keys *me
name
127.0.0.1:6379> del name
1
127.0.0.1:6379> ttl name
-2
127.0.0.1:6379> ttl name1
-1
127.0.0.1:6379> expire name1 10
1
127.0.0.1:6379> ttl name1
6
127.0.0.1:6379> ttl name1
4
127.0.0.1:6379> ttl name1
3
127.0.0.1:6379> setex boot 5 ko
OK
127.0.0.1:6379> ttl boot
2
127.0.0.1:6379> ttl boot
1
127.0.0.1:6379> ttl boot
-2
127.0.0.1:6379> setnx boot ko
1
列表
lpush key a 往头部插入a lpush key a b c 往头部插入a b c
rpush key a 往尾部插入 a rpush key a b c往尾部插入 a b c
lrange key 起始位置 结束位置 (0 -1)查询全部
lpop key 删除头部首元素 lpop key 2删除头部前两个元素
rpop key 删除尾部首元素 rpop key 2删除尾部后两个元素
llen key 查看列表长度
ltrim key 1 3 只保留下标1-3之内的元素,其余均删除
127.0.0.1:6379> lpush letter a b c
5
127.0.0.1:6379> rpush letter a b c
8
127.0.0.1:6379> lrange letter 0 -1
c
b
a
a
b
a
b
c
127.0.0.1:6379> lpop letter 2
c
b
127.0.0.1:6379> rpop letter 2
c
b
127.0.0.1:6379> lrange letter 0 -1
a
a
b
a
127.0.0.1:6379> llen letter
4
集合
sadd key value1 value2... 插入一个集合 集合的值不允许重复
smembers key 查看集合的所有值
sismember key val 查看val是否在集合中
srem key val 删除集合中的val的值
127.0.0.1:6379> sadd has 1 2 3 4 9
5
127.0.0.1:6379> smembers has
1
2
3
4
9
127.0.0.1:6379> sismember has 9
1
127.0.0.1:6379> sismember has 5
0
127.0.0.1:6379> srem has 9
1
有序集合
因为要排序 排序的是key 所以要排序的要放在key位置
zadd key key1 val1 key2 val2 key3 val3
zrange key 0 -1 只显示key
zrange key 0 -1 withscores 显示key和value
zscore key val 显示key
zrank key val1 显示排名位置 从小到大
zrevrank key val1 显示排位位置 从打到小
127.0.0.1:6379> zadd result 680 qinghua 660 beida 650 fudan 640 zheda
4
127.0.0.1:6379> zrange result 0 -1
zheda
fudan
beida
qinghua
127.0.0.1:6379> zrange result 0 -1 withscores
zheda
640
fudan
650
beida
660
qinghua
680
127.0.0.1:6379> zrank result fudan
1
127.0.0.1:6379> zrevrank result fudan
2
哈希
hset 哈希名 key val
hget 哈希名 key 获取哈希的值
hgetall 哈希名 获取哈希的所有键值对
hdel 哈希名 key 删除键值对
hexists 哈希名 key 判断键值对是否存在 (1存在 0不存在)
hkeys 哈希名 获取所有键
hlen 哈希名 获取键值对的数量
127.0.0.1:6379> hset person name zhangsan
1
127.0.0.1:6379> hget person name
zhangsan
127.0.0.1:6379> hgetall person
name
zhangsan
127.0.0.1:6379> hexists person name
1
127.0.0.1:6379> hkeys person
name
127.0.0.1:6379> hlen person
1
127.0.0.1:6379> hdel person name
1
发布订阅功能
subscribe geekhour 订阅名为geekhour的频道
publish geekhour mes 发布geekhour频道的mes消息
缺点 消息无法持久化,消息没用历史记录
消息队列
名称 自动生成唯一消息id 键值对
xadd geekhour * course redis
xlen geekhour 消息的数量
xrange geekhour - + 显示所有消息内容
xdel geekhour 消息id 删除消息
xtrim geekhour maxlen 0 删除所有消息
xread count 2 block 1000 streams geekhour 0 一次读取两条 如果没有就阻塞1秒 在geekhour读 从第0条开始读
如果 0这里大于消息队列内的消息 就会阻塞一秒后退出 如果换成$ 就会从现在开始阻塞等待新的消息
xgroup create geekhour group1 0 创建一个id为0 名字为group1的消费者组
xinfo groups geekhour 查看消费者组信息
消息队列名 消费者组名 消费者
xgroup createconsumer geekhour group1 consumer1 添加消费者
消费者组 消费者 消息队列名 从现在开始读取最新消息
xreadgroup group group1 consumer1 count 2 block 3000 streams geekhour >
127.0.0.1:6379> xadd geekhour * course redis
1726031344197-0
127.0.0.1:6379> xlen geekhour
1
127.0.0.1:6379> xrange geekhour - +
1726031344197-0
course
redis
127.0.0.1:6379> xadd geekhour * age 18
1726031404455-0
127.0.0.1:6379> xlen geekhour
2
127.0.0.1:6379> xrange geekhour - +
1726031344197-0
course
redis
1726031404455-0
age
18
127.0.0.1:6379> xdel geekhour 1726031404455-0
1
127.0.0.1:6379> xrange geekhour - +
1726031344197-0
course
redis
127.0.0.1:6379> xadd geekhour * name zhangsan
1726031483285-0
127.0.0.1:6379> xadd geekhour * age 18
1726031492794-0
127.0.0.1:6379> xread count 2 block 1000 streams geekhour 0
geekhour
1726031344197-0
course
redis
1726031483285-0
name
zhangsan
127.0.0.1:6379> xgroup create geekhour group1 0
OK
127.0.0.1:6379> xinfo groups geekhour
name
group1
consumers
0
pending
0
last-delivered-id
0-0
entries-readlag127.0.0.1:6379> xgroup createconsumer geekhour group1 consumer1
1
127.0.0.1:6379> xreadgroup group group1 consumer1 count 2 block 3000 streams geekhour >
geekhour
1726031344197-0
course
redis
1726031483285-0
name
zhangsan
地理空间
geoadd city 116.405285 39.904989 beijing 添加北京的经纬度
geopos city beijing 查看北京经纬度
geodist city beijing shanghai 查看北京和上海的距离 默认为m 加个km 显示km
geosearch city frommember shanghai byradius 300 km 查看上海半径300km内的城市
127.0.0.1:6379> geoadd city 116.405285 39.904989 beijing
1
127.0.0.1:6379> geopos city beijing
116.40528291463851929
39.9049884229125027
127.0.0.1:6379> geodist city beijing shanghai127.0.0.1:6379> geoadd city 121.4737 31.2304 shanghai
1
127.0.0.1:6379> geodist city beijing shanghai
1067771.2670
127.0.0.1:6379> geodist city beijing shanghai km
1067.7713
127.0.0.1:6379> geosearch city frommember beijing byradius 300 km
beijing