代码改变世界

windows redis配置使用

2021-10-13 11:26  kakaxi007  阅读(477)  评论(0)    收藏  举报

1.下载安装包:https://github.com/tporadowski/redis/releases

2.安装包下载后根据操作系统选择对应版本文件,里面会有几个dll分别为:

redis-server.exe:服务程序 
redis-check-dump.exe:本地数据库检查
redis-check-aof.exe:更新日志检查
redis-benchmark.exe:性能测试,用以模拟同时由N个客户端发送M个 SETs/GETs 查询.
redis-cli.exe: 服务端开启后,我们的客户端就可以输入各种命令测试了 

3.cmd进入redis目录,运行redis-server.exe redis.windows.conf。出现以下界面就是服务启动完成

 

 

 

4.我的redis目录是在D:/redis

在redis目录中找到redis客户端文件redis-cli.exe,双击运行。

set key001 woderedis

get key001

这样就实现了redis缓存的使用

 

5.C#使用redis

51.首先项目配置文件引入redis服务连接

 

  <connectionStrings>

    <!--redis 连接 有密码-->

<add name="RedisConnectionString" connectionString="127.0.0.1:6379,password=123456"/>

  <!--redis 连接 没有密码-->

<add name="RedisConnectionString" connectionString="127.0.0.1:6379"/>

  </connectionStrings>

52.C#设计一个redis类,首先在项目中打开“Nuget管理程序包”-搜索StackExchange.Redis并安装推荐版本,工具类代码如下

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using StackExchange.Redis;

namespace Common
{
    /// <summary>
    /// Redis 操作类
    /// </summary>
    public class RedisHelper
    {
        /// <summary>
        /// 连接字符串
        /// </summary>
        private static readonly string ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["RedisConnectionString"].ConnectionString;
        /// <summary>
        /// 锁
        /// </summary>
        private readonly object _lock = new object();
        /// <summary>
        /// 连接对象
        /// </summary>
        private volatile IConnectionMultiplexer _connection;
        /// <summary>
        /// 数据库
        /// </summary>
        private IDatabase _db;
        public RedisHelper()
        {
            _connection = ConnectionMultiplexer.Connect(ConnectionString);
            _db = GetDatabase();
        }
        /// <summary>
        /// 获取连接
        /// </summary>
        /// <returns></returns>
        protected IConnectionMultiplexer GetConnection()
        {
            if (_connection != null && _connection.IsConnected)
            {
                return _connection;
            }
            lock (_lock)
            {
                if (_connection != null && _connection.IsConnected)
                {
                    return _connection;
                }

                if (_connection != null)
                {
                    _connection.Dispose();
                }
                _connection = ConnectionMultiplexer.Connect(ConnectionString);
            }

            return _connection;
        }
        /// <summary>
        /// 获取数据库
        /// </summary>
        /// <param name="db"></param>
        /// <returns></returns>
        public IDatabase GetDatabase(int? db = null)
        {
            return GetConnection().GetDatabase(db ?? -1);
        }
        /// <summary>
        /// 设置
        /// </summary>
        /// <param name="key">键</param>
        /// <param name="data">值</param>
        /// <param name="cacheTime">时间</param>
        public virtual void Set(string key, object data, int cacheTime)
        {
            if (data == null)
            {
                return;
            }
            var entryBytes = Serialize(data);
            var expiresIn = TimeSpan.FromMinutes(cacheTime);

            _db.StringSet(key, entryBytes, expiresIn);
        }
        /// <summary>
        /// 根据键获取值
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="key"></param>
        /// <returns></returns>
        public virtual T Get<T>(string key)
        {

            var rValue = _db.StringGet(key);
            if (!rValue.HasValue)
            {
                return default(T);
            }

            var result = Deserialize<T>(rValue);

            return result;
        }
        /// <summary>
        /// 反序列化
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="serializedObject"></param>
        /// <returns></returns>
        protected virtual T Deserialize<T>(byte[] serializedObject)
        {
            if (serializedObject == null)
            {
                return default(T);
            }
            var json = System.Text.Encoding.UTF8.GetString(serializedObject);
            return Newtonsoft.Json.JsonConvert.DeserializeObject<T>(json);
        }
        /// <summary>
        /// 判断是否已经设置
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        public virtual bool IsSet(string key)
        {
            return _db.KeyExists(key);
        }
        /// <summary>
        /// 序列化
        /// </summary>
        /// <param name="data"></param>
        /// <returns>byte[]</returns>
        private byte[] Serialize(object data)
        {
            var json = Newtonsoft.Json.JsonConvert.SerializeObject(data);
            return System.Text.Encoding.UTF8.GetBytes(json);
        }
    }

}

  53.使用redis类

 protected void Page_Load(object sender, EventArgs e)
        {
            var redis2 = new Common.RedisHelper();
            string keyName = "key002";
            //设置
            redis2.Set(keyName, "woshiredis_key001", 10);
            //获取 解析
            object re = redis2.Get<object>(keyName);
        }

  

6.修改端口

找到配置文件redis.windows.conf

搜索port 6379,修改成你想要的端口即可,如果开启防火墙,记得让这个端口通过

7.设置局域网访问

配置文件搜索bind 127.0.0.1,修改成bind 127.0.0.1 192.168.1.111

这里的192.168.1.111是redis服务器ip

8.设置密码

配置文件搜索requirepass,在下面另起一行写入requirepass 123456

 

 

 9.把redis设置成系统服务(特别注意:这里运行的时候使用的配置文件是 redis.windows-service.conf ,不是 redis.windows.conf )

cmd进入redis目录,输入

redis-server --service-install redis.windows-service.conf --loglevel verbose

,然后win+r打开运行窗口,输入services.msc查看

这样,你的Redis服务就创建好了。

 

 

 

 10.避免redis占用太多内存:

在配置文件中搜索关键词并设置或修改对应的值:

maxmemory 1g
maxmemory-policy allkeys-lru
appendonly yes

11.redis服务自动停止

设置配置文件stop-writes-on-bgsave-error no,不能因为写错误使用服务停止

12.