redis数据操作

Posted on Posted in redis
Tips: 本文创建于2014年10月4日,已超过 2 年,内容或图片可能已经失效!

redis数据操作

1、key操作

  1. redis 127.0.0.1:6379> del key1 key2 #删除key  
  2. redis 127.0.0.1:6379> exists color #检查color是否存在  
  3. redis 127.0.0.1:6379> type height #检查数据类型  
  4. redis 127.0.0.1:6379> keys * #列出所有key  
  5. redis 127.0.0.1:6379> keys c* #列出以c开头的key  
  6. redis 127.0.0.1:6379> randomkey #随机返回一个key  
  7. redis 127.0.0.1:6379> rename color yanse #改key名,如果存在,会覆盖  
  8. redis 127.0.0.1:6379> renamenx color yanse #如果yanse存在,返回失败  
  9. redis 127.0.0.1:6379> dbsize #返回key的数量  
  10. redis 127.0.0.1:6379> expire color 5 #为key-color设置过期时间,5为秒数  
  11. redis 127.0.0.1:6379> ttl color #返回color的剩余过期时间  
  12. redis 127.0.0.1:6379> select 1 #选择第二个数据库  
  13. redis 127.0.0.1:6379> select 0  
  14. redis 127.0.0.1:6379> move color 1 #把color移动到第二个数据库  
  15. redis 127.0.0.1:6379> flushdb #删除当前数据库的所有key  
  16. redis 127.0.0.1:6379> flushall #删除所有数据库的所有key  

2、string操作,单个value值最大1G

  1. redis 127.0.0.1:6379> setnx key value #如果key存在,返回失败。nx(not exists)  
  2. redis 127.0.0.1:6379> getset color red #返回旧值,并设置colore为red  
  3. redis 127.0.0.1:6379> mget color height #同时获取多个key的值  
  4. redis 127.0.0.1:6379> mset id 10 price 239 #设置多个key的值  
  5. redis 127.0.0.1:6379> msetnx id 20 price 345 #设置多个key的值,存在就返回失败(所有key都失败)  
  6. redis 127.0.0.1:6379> incr id #对id的值做加加操作,并返回新的值  
  7. redis 127.0.0.1:6379> decr id #对id的值进行减减操作  
  8. redis 127.0.0.1:6379> incrby id integer #同incr,加制定值  
  9. redis 127.0.0.1:6379> decrby id integer #同decr,减指定值  
  10. redis 127.0.0.1:6379> append color abc #返回yellowabc  
  11. redis 127.0.0.1:6379> substr color 3 4 #截取,返回ow  

3、list类型操作

  1. redis 127.0.0.1:6379> lpush login tom #tom进来登录  
  2. redis 127.0.0.1:6379> lpush login jack #jack进来  
  3. redis 127.0.0.1:6379> lpush login mary #在login对应list的头部添加数据,  
  4. redis 127.0.0.1:6379> lpush login linken  
  5. redis 127.0.0.1:6379> lpush login bill  
  6. redis 127.0.0.1:6379> lrange login 0 2 #返回指定区间内的元素,下标从0开始  
  7. redis 127.0.0.1:6379> rpushi login liuqi #在list的尾部进行添加  
  8. redis 127.0.0.1:6379> llen login #返回list的长度  
  9. redis 127.0.0.1:6379> ltrim login 2 5 #截取list,保留指定区间内的元素。原list变化。  
  10. redis 127.0.0.1:6379> lset login 1 kelind #设置list中指定下标的元素值  
  11. redis 127.0.0.1:6379> lrem login 2 linken #删除前2个值为linken的list  
  12. redis 127.0.0.1:6379> lrem login 0 linken #全部删除  
  13. redis 127.0.0.1:6379> lpop login #删除list头部的元素,返回删除的元素  
  14. redis 127.0.0.1:6379> rpop login #删除list尾部的元素  
  15. redis 127.0.0.1:6379> lindex login 3 #返回列表中下标为3的元素  

4、set集合数据类型操作

集合列表中出现的数据不允许出现重复

  1. redis 127.0.0.1:6379> sadd animal dog #添加一个string元素到animal集合中  
  2. redis 127.0.0.1:6379> sadd animal dog #元素重复,返回0,失败  
  3. redis 127.0.0.1:6379> sadd animal cat  
  4. redis 127.0.0.1:6379> sadd animal wolf  
  5. redis 127.0.0.1:6379> key * #=> animal  
  6. redis 127.0.0.1:6379> smembers animal #显示animal中的所有元素  
  7. redis 127.0.0.1:6379> sadd zoo dog  
  8. redis 127.0.0.1:6379> sadd zoo pig  
  9. redis 127.0.0.1:6379> sadd zoo panda  
  10. redis 127.0.0.1:6379> type zoo #返回zoo的类型  
  11. redis 127.0.0.1:6379> sinter zoo animal #获取两个集合的交集  
  12. redis 127.0.0.1:6379> sinterstore p1 zoo animal #获取两个集合的交集,并存放在p1中。P1也是个集合  
  13. redis 127.0.0.1:6379> sunion zoo animal #返回两个集合的并集  
  14. redis 127.0.0.1:6379> sinterstore p2 zoo animal  
  15. redis 127.0.0.1:6379> sdiff zoo animal #求zoo的差集。zoo除去交集的部分。  
  16. redis 127.0.0.1:6379> sdiff zoo animal animalt #求zoo的差集。多个集合的差集  
  17. redis 127.0.0.1:6379> sinterstore p3 zoo animal animalt  
  18. redis 127.0.0.1:6379> sismember animal dog #判断dog是否在animal中  
  19. redis 127.0.0.1:6379> smove zoo animal panda#从zoo里面把panda移动到animal中  
  20. redis 127.0.0.1:6379> srandom animal #随机取出一个元素,不删除元素  
  21. redis 127.0.0.1:6379> spop animal #删除并返回animal中的一个元素  
  22. redis 127.0.0.1:6379> srem animal dog #从animal中删除dog  

5、sort set 集合数据类型操作

sort set也是string类型元素的集合
每个元素都会关联一个权值score
通过权值可以有序的获取集合中的元素

可以获得TopN操作。
例如获得 被查看次数最多的10个帖子,
也可以按照成绩的大小给学生进行排序。
也可以获得排名前10的登录网站次数最多的会员。

  1. redis 127.0.0.1:6379> zadd student 91 tom #添加元素到集合,每个元素对应权值  
  2. redis 127.0.0.1:6379> zadd student 88 linken  
  3. redis 127.0.0.1:6379> zadd student 72 jack  
  4. redis 127.0.0.1:6379> zrange student 0 30 #从小到大排列  
  5. redis 127.0.0.1:6379> zrevrange student 0 30 #从大到小排列  
  6. redis 127.0.0.1:6379> zcount student 70 90 #返回指定范围内的个数  
  7. redis 127.0.0.1:6379> zscore student tom #返回tom的权值  
  8. redis 127.0.0.1:6379> zremrangebyrank student 0 1 #删除student中排名在指定区间的元素  
  9. redis 127.0.0.1:6379> zincrby student 5 linken #增加linken的权值  

6、hash数据类型

模仿mysql存放数据

hash数据类型就是模仿mysql存放数据记录的样子。
insert into goods values (9,’iphone6’,120,4500,4);
id name weight price number
mysql中的一条记录信息在Redis里边可以通过两种形式存储:
① key-value数据模式
set goods:9:id 9
set goods:9:name iphone6
set goods:9:weight 120
set goods:9:price 4500
set goods:9:number 4
② hash数据类型存放
hmset key name value name value name value .....
hmset goods id 9 name iphone6 weight 120 price 4500 number 4

  1. redis 127.0.0.1:6379> set goods:9:id 9  
  2. redis 127.0.0.1:6379> set goods:9:name iphone  
  3. redis 127.0.0.1:6379> set goods:9:price 4500  
  4. redis 127.0.0.1:6379> set goods:9:weight 120  
  5. redis 127.0.0.1:6379> set goods:9:number 4  
  6. redis 127.0.0.1:6379> mget goods:9:price goods:9:name  
  7. redis 127.0.0.1:6379> hmset goods id 9 name iphone weightt 120 price 4500 number 4  
  8. redis 127.0.0.1:6379> type goods #获取类型为hash  
  9. redis 127.0.0.1:6379> hget goods id #获取ID  
  10. redis 127.0.0.1:6379> hmget goods id name price weight #获得多个信息  
  11. redis 127.0.0.1:6379> hset goods goods introduce good #设置元素  
  12. redis 127.0.0.1:6379> hincriby goods id 5 #给指定的元素加指定的值  
  13. redis 127.0.0.1:6379> hexists goods name #查看goods中是否有name  
  14. redis 127.0.0.1:6379> hdel goods name #删除name  
  15. redis 127.0.0.1:6379> hlen goods #返回goods中的数量  
  16. redis 127.0.0.1:6379> hkeys goods #返回hash中所有的field  
  17. redis 127.0.0.1:6379> hvals goods #返回hash中所有的值  
  18. redis 127.0.0.1:6379> hgetall key #返回hash中所有的field和value  

7、redis持久化操作

1.snapshotting快照方式
间隔一定的时间把内存里边全部的数据以文件形式保存在硬盘里边。(.rdb格式)
2.Append-only file 增量方式持久化
只是对存储文件进行命令增加操作。
在11点已经创建了一个备份文件,在11-12点之间又发生了10次key的修改,这种情况是不能生成快照存储的(不符合条件),为了数据比较安全,我们把这10个key的修改通过append-only file(AOF)方式给存储起来。这样有两份存储数据:较完整的+增量存储信息。

该方式存储的原理:是把用户执行的每个指令都给存储起来,数据还原的时候也是执行具体执行。

  1. vim /usr/local/redis/redis.conf  
  2. dbfilename dump.rdb  
  3. appendonly yes #改为yes  
  4. appendfilename appendonly.aof #取消注释  
  5. #重启redis  
  6. kill -9 pid  
  7. killall redis-server  
  8. /usr/local/redis/redis-server redis.conf  
  9. #重启之后会生成appendonly.aof和dump.rdb文件  
  10. incr num 1  
  11. incr num 2  
  12. incr num 3  
  13. incr num 4  
  14. .....  
  15. incr num 100  
  16.   
  17. #以上情况目前在aof文件里边会存放100个incr操作,使得本身aof文件较大,本质其存放一个set num n 即可。  
  18. #可以通过命名优化:  
  19. /usr/local/redis/redis-cli bgrewriteaof  
  20. Background append only file rewriting started #显示这个,成功  
  21.   
  22. #手动发起快照  
  23. /usr/local/redis/redis-cli -h 127.0.0.1 -p 6379 bgsave  

8、主从配置

master----slave

slave操作

  1. vim redis.conf  
  2. slaveof <masterip> <masterport>  
  3. slaveof 192.168.1.100 6379  

重新启动redis

9、事物操作

该事务类似mysql的事务,许多指令打包,要么全部执行,要么都不执行
multi 发起
exec 提交
discard 回滚

  1. redis 127.0.0.1:6379> multi #开启事物  
  2. redis 127.0.0.1:6379> exec #提交  
  3. redis 127.0.0.1:6379> discard #回滚  

弊端:如果事物中的一个命令失败了,并不回滚其他命令

10、订阅和发布

>subscribe 名称 //订阅
>publish 名称 信息 //发布

  1. redis 127.0.0.1:6379> subscribe news #这是2个客户端订阅后  
  2. redis 127.0.0.1:6379> publish news info #这里发送信息  
» 转载请注明来源:若我若鱼 » redis数据操作

Leave a Reply

Your email address will not be published. Required fields are marked *

one × 4 =