数据库中有个类型就是kv型的nosql,早期是新浪来做几千个节点的内存数据库。redis是用c来写的,效率没什么问题,数据都是放在内存里的,直接操作内存,为什么快是因为 kv的key是可以哈希的,可以时间复杂度 O(1)。
比如有公共session存储服务器,memacached和redis,开发中不用memacached,是因为它的数据类型比较单一,只有字符串,redis支持多种数据类型,字符串,列表,集合,位图,有序set集合,地理空间,redis几乎支持所有语言客户端。
redis主要用途三个方向,消息中间件,数据库,缓存
现在主流版本从2。8升到了3.2,3.X支持了自己原生的cluster,可以做一定的持久化,避免断电丢失数据
微软自己封装了一个windows版本
作为开发来讲,就是熟悉你要用的客户端来解决你要存储数据的问题
有图形化界面
redis传到服务器
真正运行服务应该是小权限
没看configure直接make即可,不装gcc,make过不了
解压目录里有deps,就是安装的某些依赖
jemalloc一般都是指内存分配,不然都是内存碎片
make就是来编译的,要依赖于deps里的这几项,3.2如果告诉你jemallco失败
3.2如果告诉你jemallco失败,安装gcc tcl之后,进入到deps进行make编译,这个make是对当前目录指定的进行编译
这样依赖就有了,就可以继续编译了
编译之后产生了几个文件,最常用的是前三个
在src源代码下会有编译好的东西
c语言的编译会生成中间的二进制文件.io,最后再编译完之后再做链接的
这个几个比较常用
rb指的是ruby,这是个ruby语言写的脚本
这两个字节数一样,其实可以认为是同一个东西,只不过起了别名,sentinel哨兵,可以做高可用
如果直接上面make install会直接安装到/usr/local/下,安装到这里的好处就是不用写path路径
可以自己建立一个
告诉它安装到哪里去
将生产的文件拷贝到这里来了,sentinel确实跟server等价
启动redis,可以先查看帮助
默认是6379端口,可以指定配置文件,可以换端口,可以起主从
在utiil下有个脚本,install_server.sh可以将server变成一个脚本
配置文件创建再哪里,log日志在哪里,还有选redis执行路径
但是现在不想手动敲,要配置path路径,配置在家目录下bashrc和bash_profile都可以
可以source,也可以重新登录
现在就有了
再次执行,可执行文件就不用自己加路径了
配置文件生成,还有runlevel都加了
会加在这里
应该改个名字
改了名checkconfig就没了,所以换一下chkconfig
查看配置文件
可能在本机做测试所以把127.0.0.1保留一下
tcp保活多长时间,demonize yes表示会以后台服务的方式跑起来
默认有16个库,从0号-15号,在配置有些集群的时候必须配置0号库,单点的无所谓
redis已经运行了
reload的意思就是重新读取配置文件,但是不支持
我们只能restart,单节点的redis服务就启动好了
windows的从微软自己账号下的rediis可以直接git,直接启动redis-server,如果想要配置成redis服务,就–help,如何将windows下的redis配置成开机自启
最大内存多少个字节,每条数据占多少个字节到时候可以预估一下总的内存多少,top一下可以看看,一旦用到swap,说明要加内存了
支持的数据类型很丰富
redis的key是二进制安全的,用的二进制是没什么问题的,用任何一个二进制序列,可以把一个字符串转换成二进制的,字节序列没有问题,甚至是可以把jpg图片存成二进制流 ,一般key不应该过于长,
也不宜过短,可读性较差。
user:123:password,表示用户id为123的用户的密码是什么
value的类型非常多,字符串是最基本类型,几乎可以存任何数据,一个字符串类型的值最多能存储512M字节的内容
python里的redis编程一般要操作这个redis库,提供了日常所有操作,它的所有API跟所有命令名一模一样
0号库是默认,端口默认是6379
用bytes也可以,其实就是字符串
可以用0b,set一个key,a是value,看看二进制是否安全,16进制就是61,也是a,相当于a:a,ascii码就是0x61
看一下key
它是首先将二进制数转成十进制,方便计算先转换成16进制61,6*16就是96+1=97,97变成string,这样一个过程,返回一个bytes
‘’get方法
用字符串速度更快
这样拿还是先转成10进制,再换成字符串
它有这个特点,所谓的二进制安全本质是将所有的数据转换成10进制之后再转成字符串,内部都是bytes,只不过bytes需要把数据转换一次
这样就可以拿回来,这样可以当字典来看,有就覆盖,没有就增加
3也是先转成10进制,再转换成字符串,python的bytes为什么安全,是因为把它当做一个个字节整数来看,就是0-255
用key还是value改变都一样
返回98之后就变成2个字节了,转成2个字节,长度有可能会边长
数值会先转成10进制64位符号,再转成字符串,再存入redis中
redis可以使用客户端查看帮助
这是set命令如何来用
集合类型所有方法
这里有中文网告诉你如何去使用
忘记了可以命令行查看帮助,下面也有提示
**字符串放进去也是二进制序列,
EX seconds就是过期时间
PX 设置毫秒过期时间
NX x=exist,不存在
xx 存在 **
不指定就是不管存在不存在,存在就覆盖,不存在就写一个新的
NX的意思是,设置一个key value。,只有这个键不存在,才能把语句执行成功
xx的意思是只有键存在,才成功
m=multi,就是塞入多值,一次可以创建多个键值对
要求创建这些键值对的键不应该存在,这是个原子操作,如果设置成功都得设置成功,但凡有一个因为key存在了,就设置失败了,如果失败,刚才设置的所有都还原,没有发生过
返回0就代表没操作成功
redis可以给每个key做设置,可以做,也可以不做,可以为每一个key,也就是键值对设置一个过期时间,当达到这个时长后,这个键值对会自动删除,但不保证是立即的,一般都是先标记过期,然后再清理
指定时间戳就是指定在某个时间点来过期
只要一敲这个key,就永久保存下来了
一个是持续多久过期,一个是到哪个时间点过期,需要区分
TTL 是 time to live,告诉你这个key还能生存多久。
2.8版本后,如果这个key曾经存在来过,但最近消亡了,返回值是-2
设置一个key的时候就可以设置过期时间为20秒
可以看看它到底有多长
可以单独设置一个新的值
单独要求它过期
看看它
没过期之间可以要求它再持久
设置一个s5,过期时间10秒,可以用ttl不停的看
可以把s5持久一下
还可以再让它过期。-2曾经来过,-1永不过期,2.8以后可以区分哪些是曾经有过的key
指定时间戳到这个点就过期了
key的操作,通配符代表任意长度
问号?代表一个字符
这个跟正则表达式规则类似
在全局可能会需要做下type,现在类型用的都是string,是否存在用0和1表是,0不存在,1存在
还可以rename
key名称只要能对上,就直接删除
get方法
每一种类型取长度是不一样的
先拿后改
redis本质是kv,value可以选择string,dict(哈希,set(集合类型(这是拿python的类型来解释,就是嵌套结构),类型变化指的是value的变化