redis
基础概念
Remote Dictionary Server(Redis)远程字典服务器是完全开源免费的,用C语言编写的,遵守BSD开源协议,是一个高性能的(key/value)分布式内存数据库,基于内存运行,并支持持久化的NoSQL(非关系型)数据库,它也通常被称为数据结构服务器,因为值(value)可以是字符串(String),哈希(Map),列表(list), 集合(sets)和有序集合(sorted sets)等类型。。
Redis的主要特点:
- 高性能:Redis通过将数据存储在内存中,提供了极快的读写速度。
- 多种数据类型:支持丰富的数据类型,如字符串、列表、集合、有序集合和哈希。
- 持久化:虽然Redis主要是内存数据库,但它提供了多种持久化选项,包括RDB快照和AOF(Append Only File)日志。
- 高可用性:通过主从复制和Redis Sentinel实现高可用性,确保数据的可靠性和服务的连续性。
- 分布式:支持Redis Cluster,允许数据分布在多个节点上,实现水平扩展。
常见应用场景:
- 缓存:由于其高性能,Redis常用于缓存层,加速应用的响应速度。
- 会话存储:许多网站使用Redis来存储用户会话信息。
- 排行榜和计数器:利用有序集合和其他数据结构,Redis可以方便地实现排行榜和计数器功能。
- 发布/订阅:Redis的发布/订阅功能可以用于实时消息传递。
- 队列:通过列表和集合,Redis可以实现高效的队列管理。
redis可以在特定应用场景下作为rabbimq和memcached的替代。
使用Redis而不是memcached来解决问题,不仅可以让代码变得更简短、更易懂、更易维护,而且还可以使代码的运行速度更快(因为用户不需要通过读取数据库来更新数据)。除此之外,在其他许多情况下,Redis的效率和易用性也比关系数据库要好得多。
什么数据会存到Redis数据库中?主要是热点数据,不会经常改变的,一般是常量。比如登录验证的Cookie,购物车,历史浏览记录。(只要具有一定时间的生命周期)比如首页的商品信息,一般不会变。比如秒杀的商品信息,一般也不会变。比如地图的经纬度信息,一般也不会变。
安装使用
ubuntu2404环境
bash
apt install -y redis
bash
systemctl enable --now redis-server
redis数据库不区分大小写,并且输入命令会有提示!!
基础操作命令
连接到Redis服务器:
bash
redis-cli -h 127.0.0.1 -p 6379
bash
root@huhy:~# redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379>
字符串
设置键值对并获取:key是键,huhy就是值对
bash
127.0.0.1:6379> set key "huhy"
OK
127.0.0.1:6379> get key
"huhy"
127.0.0.1:6379>
删除值对;
bash
127.0.0.1:6379> del key
(integer) 1
127.0.0.1:6379> get key
(nil)
查看所有键:,*表示所有
bash
127.0.0.1:6379> keys *
(empty array)
数据类型操作命令
列表
设置键值及过期时间:10是秒为单位,十秒后mykey就会消失,内容为空
bash
127.0.0.1:6379> setex mykey 10 "setkey"
OK
127.0.0.1:6379> get mykey
"setkey"
127.0.0.1:6379>
获取键的剩余生存时间:
bash
127.0.0.1:6379> setex hu 20 "test"
OK
127.0.0.1:6379> ttl hu
(integer) 11
127.0.0.1:6379> ttl hu
(integer) 8
127.0.0.1:6379> ttl hu
(integer) 6
127.0.0.1:6379> ttl hu
(integer) 5
127.0.0.1:6379>
追加值到键:如果追加到设置有过期的键中可能会导致过期时间失效
bash
127.0.0.1:6379> get hu
"hy"
127.0.0.1:6379> append hu "hy"
(integer) 4
127.0.0.1:6379> get hu
"hyhy"
127.0.0.1:6379>
左侧推入元素:从而形成一个列表
bash
127.0.0.1:6379> lpush mylist "test1"
(integer) 1
127.0.0.1:6379> lpush mylist "test2"
(integer) 2
127.0.0.1:6379> lpush mylist "test3"
(integer) 3
查看列表中的元素:可以理解成test1是第一个,从左边推入一个元素后,就变成了第二个
bash
127.0.0.1:6379> lrange mylist 0 -1
1) "test3"
2) "test2"
3) "test1"
获取列表长度:
bash
127.0.0.1:6379> llen mylist
(integer) 3
127.0.0.1:6379>
右侧推出元素:从而删除列表中的一个元素
bash
127.0.0.1:6379> rpop mylist
"test1"
127.0.0.1:6379> rpop mylist
"test2"
127.0.0.1:6379> rpop mylist
"test3"
127.0.0.1:6379> rpop mylist
(nil)
127.0.0.1:6379>
集合
添加元素到集合:
bash
127.0.0.1:6379> sadd jihe "member1"
(integer) 1
获取集合所有成员:
bash
127.0.0.1:6379> smembers jihe
1) "member1"
127.0.0.1:6379>
管理和维护命令
查看数据库信息:
bash
127.0.0.1:6379> info
查看连接客户端列表:
bash
127.0.0.1:6379> client list
id=3 addr=127.0.0.1:38112 laddr=127.0.0.1:6379 fd=8 name= age=3098 idle=0 flags=N db=0 sub=0 psub=0 ssub=0 multi=-1 qbuf=26 qbuf-free=20448 argv-mem=10 multi-mem=0 rbs=1024 rbp=0 obl=0 oll=0 omem=0 tot-mem=22298 events=r cmd=client|list user=default redir=-1 resp=2
127.0.0.1:6379>
清空当前数据库:
bash
127.0.0.1:6379> flushdb
OK
清空所有数据库:
bash
127.0.0.1:6379> flushall
OK
保存数据到磁盘:
bash
127.0.0.1:6379> save
OK
后台异步保存数据到磁盘:
bash
127.0.0.1:6379> bgsave
Background saving started
查看Redis服务器配置:
bash
127.0.0.1:6379> config get parameter
(empty array)
127.0.0.1:6379> config get maxmemory
1) "maxmemory"
2) "0"
127.0.0.1:6379>