Redis 是一种基于内存的非关系型数据库,基于内存意味着更高的读写速度,非关系型意味着可以存储非结构化数据,所以日常编程中非常喜欢用它来存储数据。但是不可避免的遇到很多bug,所以这里写一篇博客来记录。

  • 1.默认的redis配置只允许本地访问,如需开启远程访问,需要修改配置文件,如图:
  • 需要注释掉 bind 127.0.0.1,同时将protected mode改为no,但是这样危险性很大,意味着所有互联网用户只要知道ip就能直接访问,所以建议设置密码
  • 2.redis 设置密码的两种方式:
      1. 临时性的设置,重启后失效:
        在redis-cli中输入: set requirepass [密码]
      2. 修改配置文件,重启后生效,如图:
  • 3.redis 修改配置文件后没有生效

    在启动redis服务器时要指定配置文件
    redis-server /path/to/redis.conf

  • 4.Redis-cli中文显示乱码

    启动时使用redis-cli –raw,而不是redis-cli 如果是使用的windows下的cmd或powershell, 需要更改窗口编码方式:
    chcp 65001,更换编码为utf-8 此时依然无法在cmd下正常使用redis-cli,只能查看数据,无法直接输入(可以用代码写入数据)

  • 5.python的redis库默认使用bytes存储数据,建立连接的代码如下:

    pool = redis.ConnectionPool(host=”127.0.0.1″, port=6379)
    return redis.StrictRedis(connection_pool=pool)

    如需使用string(如json 字符串),需更改连接参数如下:
    pool = redis.ConnectionPool(host=”127.0.0.1″, port=6379, decoderesponses=True)
    return redis.StrictRedis(connection
    pool=pool)

  • 6.将python的字典对象直接存储进redis之后,再读取出来由于不是标准的json字符串,无法使用json.loads(), 需要替换引号:

    标准的json字符串:'{“name”:”value”}’
    redis中读取的字符串: ‘{‘name’:’value’}’
    data = data.replace(‘\”, ‘\”‘)
    然而这样容易引发错误,因为如果value中包含了’ 或 “,此时使用json.loads依然会出错,因为此时的格式可能是:
    ‘{“name”:”val”ue”}’
    为了避免这种错误,有很多的解决方案,比较推荐下面两种(任选一种):

    1.在数据写入redis前,将英文的引号替换为中文的:
    data = data.replace(‘\”‘, ‘”’)

    2.在读取时,使用转义,先把”转化为\”,再将单引号转化为双引号

    new_data = new_data.replace('\"', '\\\"')
    new_data = new_data.replace('\'', '\"')

    这样做不可避免的会带来性能上的一些损失,暂未想到其他好的解决方法

  • 7.Java中有个spring推出的框架,其实就是封装了jedis.我曾经写过一份完整的配置文件,spring-data-redis配置文件
  • 8.spring-data-redis并不是一个很完美的框架,它提供了一些将对象序列化的方案,但是由于使用了它的序列化工具序列化的对象在读取时只能使用它提供的反序列化工具,所以在数据交互的时候会造成很多不方便,所以不是很喜欢这个框架。

点击量:3351

分类: 开发笔记

2 条评论

基于Redis的进程间通信——在C++里使用python的深度学习模型 – 小麦冬 · 2018年5月27日 下午2:45

[…] 以前写的一篇博客,记录了Redis使用过程中的一些坑,欢迎交流 Redis 踩坑笔记 […]

Mac常用软件推荐——针对计算机相关专业的同学 – 小麦冬 · 2019年1月20日 下午8:09

[…] 关于redis使用中的一些坑: Redis踩坑笔记 […]

基于Redis的进程间通信——在C++里使用python的深度学习模型 – 小麦冬进行回复 取消回复

电子邮件地址不会被公开。 必填项已用*标注