软文网站推荐,小程序是什么意思,婚恋网站要钱吗,wordpress类似于redis安装与使用 1. 介绍2. 安装2.1 服务端2.2 客户端 3. 接口介绍4. 使用 1. 介绍
Redis#xff08;Remote Dictionary Server#xff09;是一个开源的高性能键值对#xff08;key-value#xff09;数据库。它通常用作数据结构服务器#xff0c;因为除了基本的键值存储功… redis安装与使用 1. 介绍2. 安装2.1 服务端2.2 客户端 3. 接口介绍4. 使用 1. 介绍
RedisRemote Dictionary Server是一个开源的高性能键值对key-value数据库。它通常用作数据结构服务器因为除了基本的键值存储功能外Redis 还支持多种类型的数据结构如字符串strings、哈希hashes、列表lists、集合sets、有序集合sorted sets以及范围查询、位图、超日志和地理空间索引等
以下是 Redis 的一些主要特性
内存中数据库Redis 将所有数据存储在内存中这使得读写速度非常快。持久化尽管 Redis 是内存数据库但它提供了持久化选项可以将内存中的数据保存到磁盘上以防系统故障导致数据丢失。支持多种数据结构Redis 不仅支持基本的键值对还支持列表、集合、有序集合等复杂的数据结构。原子操作Redis 支持原子操作这意味着多个操作可以作为一个单独的原子步骤执行这对于并发控制非常重要。发布/订阅功能Redis 支持发布订阅模式允许多个客户端订阅消息当消息发布时所有订阅者都会收到消息。高可用性通过 Redis 哨兵Sentinel和 Redis 集群Redis 可以提供高可用性和自动故障转移。复制Redis 支持主从复制可以提高数据的可用性和读写性能。事务Redis 提供了事务功能可以保证一系列操作的原子性执行。Lua 脚本Redis 支持使用 Lua 脚本进行复杂的数据处理可以在服务器端执行复杂的逻辑。客户端库Redis 拥有丰富的客户端库支持多种编程语言如 Python、Ruby、Java、C# 等。性能监控Redis 提供了多种监控工具和命令可以帮助开发者监控和优化性能。易于使用Redis 有一个简单的配置文件和命令行界面使得设置和使用变得容易。
Redis 广泛用于缓存、会话存储、消息队列、排行榜、实时分析等领域。由于其高性能和灵活性Redis 成为了现代应用程序中非常流行的数据存储解决方案之一。
总结Redis是一个内存数据库存储键值对 – val可以是多种数据类型。
2. 安装
2.1 服务端
sudo apt install redis -y默认安装只支持本地去连接当前也可以修改一下配置支持远程连接
支持远程连接
修改 /etc/redis/redis.conf
修改 bind 127.0.0.1 为 bind 0.0.0.0修改 protected-mode yes 为 protected-mode n
启动 Redis 服务
service redis-server start停止 Redis 服务
service redis-server stop重启 Redis 服务
service redis-server restart开机启动 Redis 服务
sudo systemctl enable redis-server2.2 客户端
C 操作 redis 的库有很多我们使用 redis-plus-plus这个库的功能强大使用简单。但是redis-plus-plus 是基于 hiredis 实现的。hiredis 是一个 C 语言实现的 redis 客户端。因此需要先安装 hiredis。 直接使用包管理器安装即可。
sudo apt install libhiredis-dev下载 redis-plus-plus 源码
git clone https://github.com/sewenew/redis-plus-plus.git编译/安装 redis-plus-plus
使用 cmake 构建
cd redis-plus-plus
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX/usr .. #安装到系统库
make
make install # 这一步操作需要管理员权限. 如果是非 root 用户, 使用sudo make install 执行构建成功后 会在 /usr/local/include/ 中多出 sw 目录并且内部包含 redis-plus-plus 的一系列头文件。会在 /usr/local/lib/ 中多出一系列 libredis 库文件。
3. 接口介绍
redis 本身支持很多数据类型的键值对接口特别多这里简单介绍字符串键值对的操作。
namespace sw
{namespace redis{struct ConnectionOptions{std::string host;//ipint port 6379;//portstd::string path;std::string user default;//用户名std::string password;//密码int db 0; // 默认 0 号库bool keep_alive false;//长连接/短连接} //连接池struct ConnectionPoolOptions{std::size_t size 1; // 最大连接数量} class Redis{ //直接给Redis服务器ipport构造各种配置信息采用默认的进行连接// uri e.g tcp://127.0.0.1:6379explicit Redis(const std::string uri) //或者自己在ConnectionOptions配置信息进行连接explicit Redis(const ConnectionOptions connection_opts,const ConnectionPoolOptions pool_opts {})// 删除当前库中所有数据void flushdb(bool async false);// 删除指定键值对long long del(const StringView key);// 判断指定键值对是否存在long long exists(const StringView key);// 获取一个 string 键值对OptionalString get(const StringView key);// 存放一个 string 键值对且设置过期时间-毫秒bool set(const StringView key,const StringView val,const std::chrono::milliseconds ttl std::chrono::milliseconds(0), // 0 表示不设置超时UpdateType type UpdateType::ALWAYS);void setex(const StringView key,long long ttl,const StringView val);// 向一个列表中尾插/头插 string 键值对,它的val是一个列表long long rpush(const StringView key, const StringViewval);long long lpush(const StringView key, const StringViewval);long long rpush(const StringView key,Input first, Input last);//获取列表数据// std::vectorstd::string elements;// redis.lrange(list, 0, -1,std::back_inserter(elements));void lrange(const StringView key,long long start, long long stop, Output output);}}
}4. 使用
这里只进行字符串键值对的增删改查操作以及数据的生命周期设置
#includeiostream
#includesw/redis/redis.h
#includethreadvoid print(sw::redis::Redis client)
{auto user1 client.get(会话1);if(user1) std::cout*user1std::endl;auto user2 client.get(会话2);if(user2) std::cout*user2std::endl;auto user3 client.get(会话3);if(user3) std::cout*user3std::endl;auto user4 client.get(会话4);if(user4) std::cout*user4std::endl;}void add_string(sw::redis::Redis client)
{client.set(会话1,ID1);client.set(会话2,ID2);client.set(会话3,ID3);client.set(会话4,ID4);client.del(会话2);//数据已存在则进行修改不存在则新增client.set(会话3,ID33333);print(client);
}void expired_test(sw::redis::Redis client)
{//这次的新增数据其实已经有了因此本次是修改//不仅仅修改了val而且还给键值对新增了过期时间client.set(会话1,ID1111,std::chrono::milliseconds(1000));print(client);std::cout ------------休眠2s-----------\n;std::this_thread::sleep_for(std::chrono::seconds(2));print(client);}void list_test(sw::redis::Redis client)
{client.rpush(群聊1,用户1);client.rpush(群聊1,用户2);client.rpush(群聊1,用户3);client.rpush(群聊1,用户4);std::vectorstd::string users;client.lrange(群聊1,0,-1,std::back_insert_iterator(users));for(auto user : users){std::cout user std::endl;}}int main()
{//1. 构造连接选项实例化Redis对象连接服务器sw::redis::ConnectionOptions opts;//库IP地址opts.host 127.0.0.1;//库的端口opts.port 6379;//库的编号默认0号opts.db 0;//是否进行长连接保活opts.keep_alive true;sw::redis::Redis client(opts);//2. 添加字符串键值对删除字符串键值对获取字符串键值对add_string(client);//3. 实践控制数据有效时间的操作expired_test(client);//4. 列表的操作主要实现数据的右插左获取std::cout --------------------------\n;list_test(client);return 0;
}