工作遇到的坑以及自己的学习悟道之道
hello, 小伙伴们大家好, 今天来跟大家分享一下工作中遇到的坑以及自己在工作中的一些自己的认知和理解,希望能给大家带来一点收获和启发。
1.Redis默认的16个数据库以及作用:
首先需要注意的是redis的认识, 首先Redis是一个字典结构的存储服务器, 实际上Redis实例提供了多个用来存储数据的字典, 客户端可以指定将数据库存放在哪个字典中。这和在MySQL中再创建多个数据库类似, 可以将其中的每个字典都理解成一个独立的数据库。这个数据库是基于单机才有的, 如果是集群就没有了数据库的概念。
每个数据库对外都是一个从0开始的递增数字命名, Redis默认支持16个数据库(可以通过配置文件支持更多,无上限)即修改配置文件中的database 后面的数字 所及可以将其每个字典都理解成一个独立的数据库。客户端连接后默认选0号数据库, 可以使用SELECT选择更换数据库
redis> SELECT 1 OK redis [1] > GET foo (nil)
与关系型数据库建立的数据库的区别是:1.不支持自定义数据库的名字,都是以编号命名的,使用者必须自己记住哪个数据库存储了哪些数据, 还有Redis只能设置一个密码, 即客户端要么可以访问全部数据, 要么一个也访问不了。总的看来, 这些个数据库更像一个命名空间,不适宜存储不同应用的程序的数据。因为FLUSHALL命令可以清空一个Redis实例中所有数据库中的数据。比如可以使用0号数据库存储某个应用测试环境的数据, 1号存储生产环境的数据,不适宜用1号存储A应用的数据而2号存储B用用的数据, 不同应用应该使用不同的Redis存储实例存储数据,Redis实例不会占用太多的内存, 所以可以创建多个,不必担心多个实力会占用很多内存。
查询资料, 进行多个redis实例目前的理解是将其进行分区即存储不同应用的数据,估计也是不太对,还望看到的能指正一下。
2.CPU和GPU的区别: CPU(中央处理器)主要是用来处理各种不同的数据库类型同时又要逻辑判断又会引入大量的分支跳转和中断的处理,这样就使得CPU不只是用来进行计算,而GPU(图形处理器),面对的则是类型高度统一相互无依赖的大规模数据和不需要被打断的纯净的计算环境 。
3.关于实际生产环境, 大多还是python2的环境, ubuntu自带python2.7和3.5, 但是还是使用python2.7, 关于在python2.7环境下创建django项目的坑, python2.7为什么创建不了django项目?原因可能是1.路径出现中文,2.使用的django版本过高, 必须是1.11以下才能创建成功, 一般就是这两个问题, 再有的就是自己手残,点错东西了,
4.python2.7总使用requests.post 传输过来的字符信息到都是unicode, 想要转变成utf8的,只要在后面添加.encode("utf8")即可。
关于jsonresponse返回值第一层不能支持中文的解决方案:
只是限于python2.7,可以在相应的方法下修改一下默认编码即可
import sys reload(sys) sys.setdefaultencoding('utf8')
由于python3中区分了unicode str 和 byte array 并且默认编码不再是ascii码,所以不会存在该问题
jsonresponse中的这个参数 json_dumps_params={"ensure_ascii": False} 作用是在返回给用户数据时,在用户那边支持显示中文,但是如果使用eval函数将其转化成dict,中文就不会显示了,但是如果单独取值,还是会显示中文。
# 因此返回数据可以用两种写法 # 第一种 这一种比较保险,在哪里也可以显示中文 data = json.dumps(data, ensure_ascii=False) return Response(data) # 第二种 ret = update_s(request.data["username"], request.data["pwd"]) data = {"status": "100", "res": ret, "message": "操作成功"} return JsonResponse(data, json_dumps_params={"ensure_ascii": False})