Linux下(乌班图)安装Redis

配置文件参考资料

Redis的安装

第一步:更新软件源列表

打开Linux终端 (管他三七二十一,我们先对软件源列表更新下,防止安装软件的时候出现无法定位软件包的问题)

执行更新软件源列表命令:sudo apt-get udpate

第二步:安装Redis

执行安装Redis命令: sudo apt-get install redis-server  

第三步:启动Redis服务

执行启动Redis服务命令: sudo /etc/init.d/redis-server start

第四步:查看Redis服务是否启动成功

执行查看是否启动Redis服务的命令: redis-cli

如果启动成功:会是显示如下信息:↓
127.0.0.1:6379>set myname "zhangshang" (这里我们用set命令写一条 键为myname,值为zhangshang的数据)
OK (如果数据写入成功这里则会显示OK)
127.0.0.1:6379>get myname    (然后我们用get命令来获取这条 键为myname的数据)
"zhangshang"  (在这里得到zhangshang)

第五步:修改redis的配置文件

sudo dir /etc/redis    (首先查询redis文件夹下所有的文件,去这个文件夹去找一个叫redis.conf的配置文件) 

如果有这个文件,我们用vi修改这个配置文件

sudo vi /etc/redis/redis.conf    (用vi打开这个redis.conf的配置文件) 

将redis.conf配置文件中的bind 127.0.0.1注释掉(改成#bind 127.0.0.1)保存

第六步:重启redis服务

执行重启Redis命令:sudo /etc/init.d/redis-server restart

第七步:开启ufw防火墙配置工具,打开防火墙

执行开启防火墙命令: sudo ufw enable

添加规则:

允许指定的IP访问这个Redis服务(redis默认端口为6379)

sudo ufw allow from 192.168.31.1 to any port 6379 (即:允许192.168.31.1这个IP访问6379这个端口)

重启防火墙

(编辑或新增规则后需要重启防火墙才能生效)

执行重启防火墙命令: sudo ufw reload

搞定收工


停止Redis服务

如果想停止Redis服务,则执行如下命令

执行停止防火墙命令:sudo /etc/init.d/redis-server stop

设置Redis密码

用vi打开Redis的配置文件

执行用vi打开redis配置文件命令:sudo vi /etc/redis/redis.conf

打开之后在命令模式下输入 “/”(不要双引号)  搜索requirepass关键字

找到# requirepass foobared 这一行,将前面的#号删除,然后将foobared改成你要设置的密码

(最好是直接删除foobared,改成你要配置的密码,而不是再下面独立添加一行)


保存后,重启Redis服务(这里可能需要重启电脑)

如果不重启电脑可能报如下错误:

[....] Restarting redis-server (via systemctl): redis-server.serviceJob for redis-server.service failed because the control process exited with error code. See "systemctl status redis-server.service" and "journalctl -xe" for details.
failed!

重启Redis服务

执行重启Redis命令:sudo /etc/init.d/redis-server restart

或者在重启命令后面追加配置文件:如下 ↓

执行重启Redis命令:sudo /etc/init.d/redis-server restart /etc/redis/redis.conf

使用redis-cli命令工具连接测试

执行连接Redis命令:sudo redis-cli

会弹出如下信息

127.0.0.1:6379>
我们只要在这个>后面输入auth 123456就可以了(123456是我redis的密码)即
127.0.0.1:6379>auth 123456    //回车
如果连接成功,则又会弹出如下信息
127.0.0.1:6379>
那么现在我们就可以对数据进行写入了。例如:
127.0.0.1:6379>set name "lily" //写入数据
127.0.0.1:6379>get name         //获取数据


如果不想这么麻烦,就直接执行以下连接命

执行连接Redis命令:redis-cli -h 127.0.0.1 -p 6379 -a 123456

在用C#连接SQL数据库时,我们需要在Config配置文件里面配置SQL连接字符串,同样,在连接Redis时,也可以配置连接字符串:

<add key="RedisTest"  WriteServer="127.0.0.1:6379,password=123456,connectTimeout=1000,connectRetry=1,syncTimeout=1000"/>
注释:
127.0.0.1:6379:IP,端口
password:Redis密码
connectTimeout:连接超时时间,这里设置的是1000毫秒
connectRetry:重试连接次数

syncTimeout:同步操作默认超时时间

/// <summary>
/// Redis帮助类
/// </summary>
public class RedisHelper
{
    /// <summary>
    /// 连接字符串,一般写在配置文件里面
    /// </summary>
    private static readonly string ConnectionString = "127.0.0.1:6379,password=123456,connectTimeout=1000,connectRetry=1,syncTimeout=10000";
    /// <summary>
    /// 上锁,单例模式
    /// </summary>
    private static object locker = new object();
    /// <summary>
    /// 连接对象
    /// </summary>
    private volatile IConnectionMultiplexer _connection;
    /// <summary>
    /// 数据库
    /// </summary>
    private IDatabase _db;
    #region 创建Redis实例
    public RedisHelper()
    {
        _connection = ConnectionMultiplexer.Connect(ConnectionString);
        _db = GetDatabase();
    }


    private static RedisHelper redisHelper;

    public static RedisHelper GetRedisHelper()
    {

        if (redisHelper == null)
        {
            lock (locker)
            {
                if (redisHelper == null)
                {
                    redisHelper = new RedisHelper();
                }
            }
        }
        return redisHelper;
    }
    #endregion


    /// <summary>
    /// 获取连接
    /// </summary>
    /// <returns></returns>
    protected IConnectionMultiplexer GetConnection()
    {
        if (_connection != null && _connection.IsConnected)
        {
            return _connection;
        }
        lock (locker)
        {
            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=null)
    {
        if (data == null)
        {
            return;
        }
        var entryBytes = Serialize(data);
        if (cacheTime != null)
        {
            var expiresIn = TimeSpan.FromMinutes(Convert.ToDouble(cacheTime));
            _db.StringSet(key, entryBytes, expiresIn);
        }
        else
        {
            _db.StringSet(key, entryBytes);
        }

    }

    /// <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>
    /// <param name="key"></param>
    /// <returns></returns>
    public bool IsExit(string key)
    {
        return _db.KeyExists(key);
    }

    /// <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 = JsonConvert.SerializeObject(data);
        return Encoding.UTF8.GetBytes(json);
    }

    /// <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 = Encoding.UTF8.GetString(serializedObject);
        return JsonConvert.DeserializeObject<T>(json);
    }
}

猜你喜欢

转载自blog.csdn.net/Fanbin168/article/details/80914262