您的位置:首页 > 数据库 > Redis

redis简单介绍及常用命令总结

2016-08-06 16:12 218 查看
 redis是什么:高级key-value存储系统,可以用来存储字符串、哈希结构、链表、集合,因此用来提供数据接口服务器
redis和memcached相比的独特之处:
1、redis是用来存储的,而memcached是用来做缓存的,这个特点的主要功能就是持久化数据
2、存储数据有结构,对于memcached来说,存储的数据只有一种结构,即字符串,相比较而言,redis数据结构
就比较丰富


redis的下载与安装:解压有直接make,不需要configue


通用键值命令:
1.存取获取键值操作:set用来存储值,get用来获取值
2.获取所有的key值:keys pattern (*代表任意字符,[]代表其中的一个字符,?表示单个字符)
3.随机获取一个key:randomkey
4.获取键的数据类型:type key
5.判断某个key是够存在:exists key
6.删除某个key:del key
7.修改键的名称:rename key newkey
8.修改后的新名称已经存在:renamenx(新名称不存在的情况子下可以修改,如果存在的情况下就不修改)
9.移动key到另一个服务器:move key n
10.选择数据库:select n(默认分配16个服务器,开始时默认选择第0个服务器)
11.作为缓存来用的时候设置键的有效期:expire key 整形值(有效秒数)
12.查询剩余有效期:ttl keyname(-1的话为永远有效,返回值单位为秒数)
13.设置键值为永久有效:persist key 永久有效
14.以毫秒为单位设置生命周期:pexpire key 整数值


具体数据类型的键值操作命令:
一、字符串操作类型
1.设置键值:set key value ex 整数值(生命周期) px整数值(毫秒数为单位) 都写的情况下以后面的为准
2.刷新缓存:flushdb
3.没有这个键的情况下再设置这个键:set key value nx(有就设置这个键,没有就不设) xx(有的话就修改这个键)
4.批量设置键值:mset key1 vlaue1 key2 value2
5.获取键所对应的值:get
6.批量获取多给key的值:mget key1 key2
7.用指定字符修改某个键对应的值:setrange key offset value
8.追加value值:append key value
9.获取值的一小部分:getrange key start stop(包括下标)
10.获取某个键的旧值,然后设置新的值
11.计数减去某个值:decr num
12.在位上做操作(将任意一个字母改为大写或者是小写):setbit key 2 1(将大写改为小写)
13.让两个key做and、or操作:bitop


二、链表的相关命令(list)
1.把值插入链表的头部:lpush character a
2.把值插入链表的尾部:rpush character b
3.查看链表的部分元素:lrange character 0 -1
4.从链表头部弹出元素:lpop value
5.删除链表中任意的一个元素:lrem key count(删除个数) value
6.截取链表的一小段:ltrim
7.取某个下标的值:lindex key index
8.查看链表的长度:llen key
9.找到某个值,然后在这值得后面后者是前面插入一个值:linsert key before|after oldvalue newvalue(可以保证链表的有序性)
10.右边弹出左边插入:rpoplpush key value
11.没有值的时候等待有值得时候再弹出:brpop、blpop 


案例:一亿个用户,有频繁的登陆的,有不平凡登陆的,如何记录用户的登陆信息,如何查询活跃的用户(一周登陆三次
算是活跃的用户)? 数据库可以解决问题,但是效率不高
解决方案:只用一个位就可以记录用户时候某一个时候登陆!可以用setbit命令来解决(位图法)


三、集合相关命令(set,无需不可重复)
1.添加一个元素:sadd gender male female(sadd key value1 value2)
2.查看集合所有的元素:smembers key
3.删除某个元素:srem key value1 value2
4.随意删除某个元素:spop key
5.随意得到某个元素:srandmember key
6.查看某个集合中时候有这个集合:sismember key value(是返回1,不是返回0)
7.查看集合中元素的个数:scard key
8.两个集合之间的操作,将某个元素移动到另外一个集合中:smove key1 key2 value
9.求多个集合之间的并集:sunion key1 key2 。。。
10.求集合之间的差集:sdiff key1 key2 。。。
11.将集合计算结果存储起来:sinterstroe result key1 key2(求key1和key2的交集并且存储在result中)
12.求两个集合的交集:sinter key1 key2。。。


四、有序集合的相关命令(order set)
1.添加元素:zadd key score1 value1 score2 value2(score就是排序因子)
2.查看元素(可以按照排名来查 ):arange key 0 3(用socre,用名次来排序)
3.按名次范围来查:zrangebysocre key 13 16(根据实际分数来取,分数在13到16之间的)
4.可以设置limit选项:zrangebyscore key 1 29 limit 1 2
5.顺便取出socre:zrange key 1 20 withscores(顺便取出排序因子)
6.给定元素算出它的排名:zrank key value(取出排名,从1开始)
7.倒序排列:zrevrank key value
8.删除元素(可以根据排名删除,也可以按照score值来删):zremrangebyscore key 10 16(socre在10 到 16)
9.可以根据排名删除:zremrangebyrank key 0 5(0到5名之间元素会被删除)
10.指定一个值来删除:zrem key value
11.查看score在某个范围之间的元素个数:zcount key 28 60(28到60之间的元素个数)
12.求集合叫交集:zinterstore resultkey 2(key的个数) key1 key2 aggregate sum(max,score以多的为准,min,score以少的为准,默认是求和)
13.加权重:zinterstore resultkey 2(key的个数) key1 key2 aggregate weights 1 2 sum(max,score
五、哈希数据结构类型相关命令
1.添加数据:hset user1 name name sgye ,hset user1 age 28(hset key field value)
2.批量添加:hmset user2 name user2 age 27
3.获取数据:hget key field
4.批量获取数据:hmget key field1 field2
5.获取所有域的值:hgetall key
6.删除某个域:hdel key fidle
7.判断有多少个域:hlen key
8.判断某个域是否存在:hexists key field
9.增加某个域的值:hincrby key field vlaue
10.获取某个key中所有的键值:hkeys key
六、事务与锁的应用(数据一致性和安全性,reids是单线程的进程,开启事务后,语句并不是真正的执行,而是加入队列中去了)
1.事务开启语句:multi
2.提交语句:exec(执行的意思)
3.mutil后面会有两种情况,一种就是语法有错误,另一种就是对象有问题(此时可以跳过不适合的对象继续执行)
4.回滚语句:discard(相当于清空队列,严格来说不算是回滚,只是取消的作用)
5.redis中采用的是乐观锁(一直监视要改变的值,从开始到结束如果值改变了,则不执行队列中的语句)来防止事物之间进行干扰
6.监视key的语句(如果期间任意一个键改变,则不会执行队列中的语句):watch key
7.取消监视:unwatch key
七、频道发布与消息订阅
1.发布频道:publish news ‘today is sunshine’(发布一个频道news ,并且发布消息)
2.监听频道:subscribe news(监听news这个频道)
3.批量监听频道:psubscribe new*(凡是new开头的频道都进行监听)
八、redis快照持久化(持久化操作,将数据保存到文件中,redis有两种持久化方式,一是rdb(快照持久化),一种是)
1.rdb的工作原理:每隔n分钟或者是n此写操作后,从内存dump数据形成rdb文件(内存快照),压缩放在备份目录里边(其中,n次可以配置,压缩方式可以配置,备份目录可以配置)
2.在redis.conf配置文件中修改参数(共有三行参数要进行配置,三行参数从下往上看)
3.参数:save 900 1   save 300 10   save 60 10000
4.后台导出过程出错的话,客户端不能再写入数据参数配置(防止数据一致性有偏差):stop-writes-on-bgsave-error yes
5. 压缩导出文件:rdbcompression yes
6.检测导出的文件是否完整:rdbchecksum yes
7.导出的文件名称:dbfilename dump.rdb
8.导出文件放在哪里:dir 目录路径
9.不使用rdb导出的话,则将上述三个选项注释掉就可以了
10.缺点:在两个保存点之间如果进程被杀死了,则内存中的数据不会被持久化
九、redis日志持久化(aof,工作原理和配置选项,rdb和aof可以同时存在)
1、日志持久化的配置:appendonly no(是否打开日志存储),appendfsync always(每一条命令都同步到aof,安全但是速度慢),appendfsync everysec(每一秒钟写一次),sppendfsync no(写入工作交个操作系统来判断,通过判断缓冲区大小写入,同步效率低,但是速度快)
2、aof的工作原理:每次执行的每条命令都可以通过aof进程存到文本文件中去,不好的地方放就是操作文件会导致操作程序速度变慢
3、no-appendfsync-on-rewrite yes:正在导出快照,是否要停止同步aof
4、auto-aof-rewrite-percentage 100():aof文件大小比起上次重写时的大小增长率100%时,重写
5、auto-aof-rewrite-min-size 64mb():aof文件至少超过64mb时,重写(逆化内存中的命令)
6、直接重写的命令:bgrewriteaof
7、aof和rdb是否可以同时使用:推荐同时使用(恢复数据时,rdb的恢复数据快)
8、rdb和aof文件同时存在,恢复时首先使用aof文件进行恢复
十、redis集群配置:主从复制
1、好处:主从备份,防止主机宕机,读写分离,分担master的负担,完成任务的分流
2、集群布局:一台主机对应多台从服务器,直线型(好处,主机宕机时可以直接切换到子服务器)
3、主从通信过程:先dump出rdb,然后将缓冲的aof导入从服务器
4、授权:auth password
5、注意,多台salave不要同时启动,可能拖垮master
十一、redis常用的运维命令
1、查看当前库有多少键值:dbsize
2、手动进行aof重写:bgrewriteaof
3、后台保存rdb快照:bgsave
4、保存rdb快照:save
5、查看上次保存时间:lastsve
6、设为slave服务器:slaveof
7、清空所有db:flushall
8、清空当前db:flushdb
9、断开连接,关闭服务器:shoutdown
10、显示慢查询:slowlog
11、显示服务器信息:info
12、获取配置信息:config get
13、设置配置信息:config set
14、打开控制台:monitor
15、主从同步:sync
16、客户端列表:client list
17、关闭某个客户端:client kill
18、为某个客户端设置名字:client setname
19、获取客户端名字:client getname
十二、aof恢复和数据库迁移
1、运行了flushall怎么办:立即关闭服务器,防止aof重写,showdown nosave,删除aof文件中的flushall命令
2、数据的迁移:rdb的直接复制
十三、redis键的设计原则即技巧,与关系型数据库对比学习
1、把表名转换为key的前缀
2、第二段放置用于区分key的字段-对应mysql中的主键的列名
3、第三段放置主键值,如1、2
4、写要存储的列名
5、好处:在分布式存储的时候,只对前面的键值进行hash,保证一个完整的数据快存储在一个服务器上
6、缺点:用其字段进行查询的时候会比较慢,没有更好的方法,只能用户冗余信息来维护,将某个字段指向主键值,其他的字段都用主键来查询,用哪个字段查询,就要用这个字段指向主键值,作为冗余字段来维护 阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: