首页 后端开发 php教程 Redis缓存服务器在Windows下的使用

Redis缓存服务器在Windows下的使用

Feb 08, 2017 pm 01:53 PM
redis windows

一、Redis服务端


首先下载Redis服务器,点击前往下载.msi版本,双击安装Redis服务端就有了,并以服务的形式随系统一起启动:

Redis缓存服务器在Windows下的使用

安装好Redis服务器之后第一件事就是设置密码,进入安装目录:C:\Program Files\Redis - 找到配置文件:redis.windows-service.conf - 找到:# requirepass foobared - 回车换行加上:requirepass 这里写自己的新密码(顶行写,前面不要留空格) - 到服务里重启Redis服务,或者重启电脑

不设置密码的坏处,看看携程这哥们的遭遇就知道了:记一次Redis被攻击的事件


二、Redis客户端(命令行和可视化工具RDM)

命令行方式演示:启动Redis客户端、读写Redis服务器

Redis缓存服务器在Windows下的使用

上图命令解释:

cd C:\Program Files\Redis:cd命令进入Redis安装目录,相当于Windows系统里双击进入Redis的安装目录

redis-cli.exe:打开redis-cli客户端程序,相当于Windows系统里双击运行一个exe程序(安装了上面的Redis服务端程序,需要一个客户端程序连接这个服务端。连接本机redis服务器直接敲此命令,连接远程的需要加ip和端口,例:redis-cli.exe -h 111.11.11.111 -p 6379)


keys *:查看所有键值对(如果Redis服务器设置了密码,这条命令会报错,需要先输入密码,执行此命令:auth 你的密码)

set blog oppoic.cnblogs.com:设置一个键值对,键是:blog,值是:oppoic.cnblogs.com(按目录存储:set 目录名:键 值)

get blog:获取键为blog对应的值

keys *:查看所有键值对

其他常用命令:

config get dir:获取redis安装目录

ping:返回PONG表示redis服务器正常

redis-cli.exe:进入第一个数据库(默认),redis一共0到15共16个库,进入第三个库 redis-cli -n 2(已经进去了,select 0~15 随意切换)

quit:退出redis程序

exit:退出dos窗口

flushdb:删除当前选择数据库中的所有key

flushall:删除所有数据库中的数据库

更多命令:https://redis.io/commands

至此,一个运行在本机的Redis缓存服务器已经搭建完成,并且可以读写了。但是命令行显然对小白用户不友好,可视化工具登场:Redis Desktop Manager(https://redisdesktop.com/download)

Redis缓存服务器在Windows下的使用

左侧树显示已经有一个连接了,点击底部的Connect to Redis Server再添加一个连接:

Name:连接名称,随便起

Host:主机地址,本机就是127.0.0.1,远程的输入对应IP

Port:端口,Redis服务器默认端口6379

Auth:密码,设置了就输,没设置留空

连上Redis服务器就可以看到,默认16个库(配置文件可改),索引从0开始。常见用法是一个项目一个库,项目下不同功能模块分不同目录存在这个库下。

有了可视化工具之后的操作就不用说了,双击,右键新建、删除。。。会用Windows系统的都会用这个工具。相比于命令行,Redis Desktop Manager这个可视化工具更友好,调试远程服务器上的数据也更方便,指哪打哪。

注:本机可以这样,连接远程服务器需要到服务器上的Redis安装目录下,找到redis.windows-service.conf文件,找到bind 127.0.0.1 前面加"#"注释掉,然后到服务里右键重启redis服务,或者重启Windows系统

三、C#操作Redis服务器

以上都是命令行和可视化工具操作Redis服务器,C#程序操作Redis需要借助StackExchange.Redis(https://github.com/StackExchange/StackExchange.Redis),为了统一调用,封装了一个RedisHelper帮助类:

using Newtonsoft.Json;
using StackExchange.Redis;
using System;
using System.ComponentModel;
using System.Configuration;
using System.Reflection;
using System.Text;

namespace redis_Demo
{
    /// <summary>
    /// Redis 帮助类
    /// </summary>
    public static class RedisHelper
    {
        private static string _conn = ConfigurationManager.AppSettings["redis_connection_string"] ?? "127.0.0.1:6379";
        private static string _pwd = ConfigurationManager.AppSettings["redis_connection_pwd"] ?? "123456";

        static ConnectionMultiplexer _redis;
        static readonly object _locker = new object();

        #region 单例模式
        public static ConnectionMultiplexer Manager
        {
            get
            {
                if (_redis == null)
                {
                    lock (_locker)
                    {
                        if (_redis != null) return _redis;

                        _redis = GetManager();
                        return _redis;
                    }
                }
                return _redis;
            }
        }

        private static ConnectionMultiplexer GetManager(string connectionString = null)
        {
            if (string.IsNullOrEmpty(connectionString))
            {
                connectionString = _conn;
            }
            var options = ConfigurationOptions.Parse(connectionString);
            options.Password = _pwd;
            return ConnectionMultiplexer.Connect(options);
        }
        #endregion

        /// <summary>
        /// 添加
        /// </summary>
        /// <param name="folder">目录</param>
        /// <param name="key">键</param>
        /// <param name="value">值</param>
        /// <param name="expireMinutes">过期时间,单位:分钟。默认600分钟</param>
        /// <param name="db">库,默认第一个。0~15共16个库</param>
        /// <returns></returns>
        public static bool StringSet(CacheFolderEnum folder, string key, string value, int expireMinutes = 600, int db = -1)
        {
            string fd = GetDescription(folder);
            return Manager.GetDatabase(db).StringSet(string.IsNullOrEmpty(fd) ? key : fd + ":" + key, value, TimeSpan.FromMinutes(expireMinutes));
        }

        /// <summary>
        /// 获取
        /// </summary>
        /// <param name="folder">目录</param>
        /// <param name="key">键</param>
        /// <param name="db">库,默认第一个。0~15共16个库</param>
        /// <returns></returns>
        public static string StringGet(CacheFolderEnum folder, string key, int db = -1)
        {
            try
            {
                string fd = GetDescription(folder);
                return Manager.GetDatabase(db).StringGet(string.IsNullOrEmpty(fd) ? key : fd + ":" + key);
            }
            catch (Exception)
            {
                return null;
            }
        }

        /// <summary>
        /// 删除
        /// </summary>
        /// <param name="folder">目录</param>
        /// <param name="key">键</param>
        /// <param name="db">库,默认第一个。0~15共16个库</param>
        /// <returns></returns>
        public static bool StringRemove(CacheFolderEnum folder, string key, int db = -1)
        {
            try
            {
                string fd = GetDescription(folder);
                return Manager.GetDatabase(db).KeyDelete(string.IsNullOrEmpty(fd) ? key : fd + ":" + key);
            }
            catch (Exception)
            {
                return false;
            }
        }
        /// <summary>
        /// 是否存在
        /// </summary>
        /// <param name="key">键</param>
        /// <param name="db">库,默认第一个。0~15共16个库</param>
        public static bool KeyExists(CacheFolderEnum folder, string key, int db = -1)
        {
            try
            {
                string fd = GetDescription(folder);
                return Manager.GetDatabase(db).KeyExists(string.IsNullOrEmpty(fd) ? key : fd + ":" + key);
            }
            catch (Exception)
            {
                return false;
            }
        }

        /// <summary>
        /// 延期
        /// </summary>
        /// <param name="folder">目录</param>
        /// <param name="key">键</param>
        /// <param name="min">延长时间,单位:分钟,默认600分钟</param>
        /// <param name="db">库,默认第一个。0~15共16个库</param>
        public static bool AddExpire(CacheFolderEnum folder, string key, int min = 600, int db = -1)
        {
            try
            {
                string fd = GetDescription(folder);
                return Manager.GetDatabase(db).KeyExpire(string.IsNullOrEmpty(fd) ? key : fd + ":" + key, DateTime.Now.AddMinutes(min));
            }
            catch (Exception)
            {
                return false;
            }
        }

        /// <summary>
        /// 添加实体
        /// </summary>
        /// <param name="folder">目录</param>
        /// <param name="key">键</param>
        /// <param name="t">实体</param>
        /// <param name="ts">延长时间,单位:分钟,默认600分钟</param>
        /// <param name="db">库,默认第一个。0~15共16个库</param>
        public static bool Set<T>(CacheFolderEnum folder, string key, T t, int expireMinutes = 600, int db = -1)
        {
            string fd = GetDescription(folder);
            var str = JsonConvert.SerializeObject(t);
            return Manager.GetDatabase(db).StringSet(string.IsNullOrEmpty(fd) ? key : fd + ":" + key, str, TimeSpan.FromMinutes(expireMinutes));
        }

        /// <summary>
        /// 获取实体
        /// </summary>
        /// <param name="folder">目录</param>
        /// <param name="key">键</param>
        /// <param name="db">库,默认第一个。0~15共16个库</param>
        public static T Get<T>(CacheFolderEnum folder, string key, int db = -1) where T : class
        {
            string fd = GetDescription(folder);
            var strValue = Manager.GetDatabase(db).StringGet(string.IsNullOrEmpty(fd) ? key : fd + ":" + key);
            return string.IsNullOrEmpty(strValue) ? null : JsonConvert.DeserializeObject<T>(strValue);
        }

        /// <summary>
        /// 获得枚举的Description
        /// </summary>
        /// <param name="value">枚举值</param>
        /// <param name="nameInstead">当枚举值没有定义DescriptionAttribute,是否使用枚举名代替,默认是使用</param>
        /// <returns>枚举的Description</returns>
        private static string GetDescription(this Enum value, Boolean nameInstead = true)
        {
            Type type = value.GetType();
            string name = Enum.GetName(type, value);
            if (name == null)
            {
                return null;
            }

            FieldInfo field = type.GetField(name);
            DescriptionAttribute attribute = Attribute.GetCustomAttribute(field, typeof(DescriptionAttribute)) as DescriptionAttribute;

            if (attribute == null && nameInstead == true)
            {
                return name;
            }
            return attribute == null ? null : attribute.Description;
        }
    }
}
登录后复制

向redis服务器第一个库的fd1目录里,添加一个键为name,值为wangjie的记录:

RedisHelper.StringSet(CacheFolderEnum.Folder1, "name", "wangjie");
登录后复制

获取这条记录:

string key = RedisHelper.StringGet(CacheFolderEnum.Folder1, "name");
Console.WriteLine("键为name的记录对应的值:" + key);
登录后复制

删除这条记录:

bool result = RedisHelper.StringRemove(CacheFolderEnum.Folder1, "name");
if (result)
{
    Console.WriteLine("键为name的记录删除成功");
}
else
{
    Console.WriteLine("键为name的记录删除失败");
}
登录后复制

查询这条记录是否存在:

bool ifExist = RedisHelper.KeyExists(CacheFolderEnum.Folder1, "name");
if (ifExist)
{
    Console.WriteLine("键为name的记录存在");
}
else
{
    Console.WriteLine("键为name的记录不存在");
}
登录后复制

向redis服务器第二个库的fd2目录里,添加一个键为sd1,值为一个对象的记录:

Student student = new Student() { Id = 1, Name = "张三", Class = "三年二班" };
RedisHelper.Set<Student>(CacheFolderEnum.Folder2, "sd1", student, 10, 1);
登录后复制

获取这个对象:

Student sdGet = RedisHelper.Get<Student>(CacheFolderEnum.Folder2, "sd1", 1);
if (sdGet != null)
{
    Console.WriteLine("Id:" + sdGet.Id + " Name:" + sdGet.Name + " Class:" + sdGet.Class);
}
else
{
    Console.WriteLine("找不到键为sd1的记录");
}
登录后复制

源码:(http://files.cnblogs.com/files/oppoic/redis_Demo.zip)

环境是VS 2013,如果跑不起来自行把cs里的代码拷出来编译运行


四、其他

MSOpenTech开发Redis缓存服务器自带持久化,写入之后重启电脑键值对还存在,一般写入键值对要设置过期时间,否则一直占用内存不会被释放。Redis存储方式不光有键对应字符串,还有对应List,HashTable等,当然Redis更多高阶的用法还是在Linux下。

更多Redis缓存服务器在Windows下的使用相关文章请关注PHP中文网!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
4 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

Bybit交易所最新版本怎么更新?不更新会有影响吗? Bybit交易所最新版本怎么更新?不更新会有影响吗? Feb 21, 2025 pm 10:54 PM

更新ByBit交易所的方式因平台和设备而异:移动设备:在应用商店中检查更新并安装。桌面客户端:在“帮助”菜单中检查更新并自动安装。网页端:需要手动访问官网进行更新。不更新交易所可能导致安全漏洞、功能限制、兼容性问题和交易执行效率降低。

Pi Node教学:什么是Pi节点?如何安装和设定Pi Node? Pi Node教学:什么是Pi节点?如何安装和设定Pi Node? Mar 05, 2025 pm 05:57 PM

PiNetwork节点详解及安装指南本文将详细介绍PiNetwork生态系统中的关键角色——Pi节点,并提供安装和配置的完整步骤。Pi节点在PiNetwork区块链测试网推出后,成为众多先锋积极参与测试的重要环节,为即将到来的主网发布做准备。如果您还不了解PiNetwork,请参考Pi币是什么?上市价格多少?Pi用途、挖矿及安全性分析。什么是PiNetwork?PiNetwork项目始于2019年,拥有其专属加密货币Pi币。该项目旨在创建一个人人可参与

Coinsuper交易所软件渠道官网入口 Coinsuper交易所软件渠道官网入口 Feb 21, 2025 pm 10:39 PM

Coinsuper交易所的官网入口:https://www.coinsuper.com。客户端下载渠道依次为:Windows客户端、macOS客户端、移动端(iOS/Android)。注册需提供电子邮件、手机号和密码,需完成实名认证后才能交易。平台提供多种数字资产交易,包括比特币、以太坊等,交易费率对下单者和接单者均为0.1%。安全保障措施包括冷钱包存储、双重验证、反洗钱和反恐融资措施,并与安全公

gate.io最新版本下载 gate.io最新版本下载 Mar 05, 2025 pm 07:51 PM

需下载 Gate.io 应用程序以开启加密货币之旅?本指南详细列出适用于 iOS、Android 和 Windows 设备的最新版本下载步骤。只需访问官方网站,找到下载链接并根据您的设备选择相应选项。对于 iOS,将直接转到 App Store,而 Android 和 Windows 用户将下载 APK 或安装程序进行手动安装。完成安装后,您就可以启动应用程序并设置您的帐户,踏入加密货币世界。

比特币用什么看盘软件 比特币用什么看盘软件 Mar 17, 2025 pm 04:27 PM

选择合适的比特币看盘软件至关重要,它能帮助投资者实时掌握市场行情,做出更明智的投资决策。本文将指导您如何选择,涵盖个人需求评估(交易频率、分析深度、信息需求及预算)、软件类型选择(交易所界面、专业软件、行情网站/APP)、核心功能考量(数据可靠性、图表工具、自定义设置、社区交流及平台兼容性)以及选择方向建议(成熟金融平台、加密货币聚合平台、社区推荐软件)等方面。 最终,建议您多尝试几款软件并进行比较,选择最适合自身需求的工具。 请记住,软件仅为辅助工具,投资需谨慎,风险自担。

Nexo交易所是哪个国家的?在哪里?Nexo交易所全面介绍 Nexo交易所是哪个国家的?在哪里?Nexo交易所全面介绍 Mar 05, 2025 pm 05:09 PM

Nexo交易所:瑞士加密货币借贷平台深度解析Nexo是一个提供加密货币借贷服务的平台,支持超过40种加密资产、法币和稳定币的抵押和借贷。它在欧洲和美国市场占据主导地位,并致力于提升平台的效率、安全性和合规性。许多投资者都想知道Nexo交易所的注册地,答案是:瑞士。Nexo由瑞士金融科技公司Credissimo于2018年创立。Nexo交易所的地理位置及监管:Nexo总部位于瑞士楚格,这是一个知名的加密货币友好型地区。平台积极配合各国政府监管,已在美国金融犯罪执法网络(FinCEN)、加拿大金融

币安binance官网app电脑版最新版apk下载 币安binance官网app电脑版最新版apk下载 Mar 04, 2025 pm 03:30 PM

本文介绍了两种下载币安客户端的方法:官方网站[adid]9f61408e3afb633e50cdf1b20de6f466[/adid]下载和应用商店下载。 官方网站下载方法包括访问币安官网,找到下载按钮,选择对应操作系统版本(如Windows或Mac)下载安装包,然后运行安装程序完成安装。

币安下载入口 币安下载入口 Mar 04, 2025 pm 05:33 PM

文章介绍币安下载入口因设备和操作系统而异。需先明确设备类型,再访问官方网站Binance.com(注意核对域名),在官网显着位置找 “下载” 按钮,依不同操作系统选择下载。电脑版下载安装程序按提示安装;安卓从官网下 APK 要确认安全;iOS 在 App Store 搜索下载。下载后需创建或登录账户,注意保管账户信息和密钥 。

See all articles