Redis的具体使用 二

1. key的操作

redis里边,除了\n空格 不能作为名字的组成内容外,其他内容都可以作为key的名字部分。名字长度不做要求。


不同redis数据库切换:

用select  ,默认是操作数据库0,默认共有16个数据库,所以数据库Index是从0到15

操作例子

[csharp]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. [root@fengniu020 ~]# cd /usr/local/  
  2. [root@fengniu020 local]# cd redis/  
  3. [root@fengniu020 redis]# l  
  4. -bash: l: command not found  
  5. [root@fengniu020 redis]# ls  
  6. dump.rdb  redis-cli  redis.conf  redis-server  
  7. [root@fengniu020 redis]# ./redis-cli   
  8. redis 127.0.0.1:6379> key *  
  9. (error) ERR unknown command 'key'  
  10. redis 127.0.0.1:6379> keys *  
  11. 1) "name"  
  12. 2) "addr"  
  13. 3) "age"  
  14. redis 127.0.0.1:6379> del addr  
  15. (integer) 1  
  16. redis 127.0.0.1:6379> keys *  
  17. 1) "name"  
  18. 2) "age"  
  19. redis 127.0.0.1:6379> type age  
  20. string  
  21. redis 127.0.0.1:6379> set fuck 123  
  22. OK  
  23. redis 127.0.0.1:6379> keys *  
  24. 1) "name"  
  25. 2) "fuck"  
  26. 3) "age"  
  27. redis 127.0.0.1:6379> type fuck  
  28. string  
  29. redis 127.0.0.1:6379> keys *e  
  30. 1) "name"  
  31. 2) "age"  
  32. redis 127.0.0.1:6379> rename fuck fuckyou  
  33. OK  
  34. redis 127.0.0.1:6379> get fuckyou  
  35. "123"  
  36. redis 127.0.0.1:6379> dbsize  
  37. (integer) 3  
  38. redis 127.0.0.1:6379> expire age 10  
  39. (integer) 1  
  40. redis 127.0.0.1:6379> ttl age  
  41. (integer) 0  
  42. redis 127.0.0.1:6379> keys *  
  43. 1) "name"  
  44. 2) "fuckyou"  
  45. redis 127.0.0.1:6379> set age 12  
  46. OK  
  47. redis 127.0.0.1:6379> expire age 20  
  48. (integer) 1  
  49. redis 127.0.0.1:6379> ttl age  
  50. (integer) 17  
  51. redis 127.0.0.1:6379> keys *  
  52. 1) "name"  
  53. 2) "age"  
  54. 3) "fuckyou"  
  55. redis 127.0.0.1:6379> ttl age  
  56. (integer) 8  
  57. redis 127.0.0.1:6379> select 1  
  58. OK  
  59. redis 127.0.0.1:6379[1]> select 0  
  60. OK  
  61. redis 127.0.0.1:6379> move fuckyou 1  
  62. (integer) 1  
  63. redis 127.0.0.1:6379> select 1  
  64. OK  
  65. redis 127.0.0.1:6379[1]> keys *  
  66. 1) "fuckyou"  
  67. redis 127.0.0.1:6379[1]> flushdb  
  68. OK  
  69. redis 127.0.0.1:6379[1]> keys *  
  70. (empty list or set)  
  71. redis 127.0.0.1:6379[1]> flushall  
  72. OK  
  73. redis 127.0.0.1:6379[1]> select 0  
  74. OK  
  75. redis 127.0.0.1:6379> keys *  
  76. (empty list or set)  
  77. redis 127.0.0.1:6379>   

2. String类型操作

stringredis最基本的类型

redisstring可以包含任何数据。包括jpg图片或者序列化的对象。

单个value值最大上限是1G字节。 

如果只用string类型,redis就可以被看作加上持久化特性的memcache


incr:  increament  增长

      该指令可以对key进行累加1操作,默认是累加1操作,类似i++操作

      该指令可以针对 key已有key 进行操作

key创建key并累加1,其值为1

已有keykey的信息值类型要求必须为整型的

decr  的操作模式与incr一致,不过其实减1操作

substr对内容进行截取,包括startend标记位置内容

操作示例

[csharp]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. redis 127.0.0.1:6379> keys *  
  2. (empty list or set)  
  3. redis 127.0.0.1:6379> set age 18  
  4. OK  
  5. redis 127.0.0.1:6379> set name lily  
  6. OK  
  7. redis 127.0.0.1:6379> set addr guangzhou  
  8. OK  
  9. redis 127.0.0.1:6379> keys *  
  10. 1) "name"  
  11. 2) "addr"  
  12. 3) "age"  
  13. redis 127.0.0.1:6379> mset tel 10086 wife lucy  
  14. OK  
  15. redis 127.0.0.1:6379> keys *  
  16. 1) "addr"  
  17. 2) "age"  
  18. 3) "name"  
  19. 4) "wife"  
  20. 5) "tel"  
  21. redis 127.0.0.1:6379> mget wife tel name  
  22. 1) "lucy"  
  23. 2) "10086"  
  24. 3) "lily"  
  25. redis 127.0.0.1:6379> incr tel  
  26. (integer) 10087  
  27. redis 127.0.0.1:6379> incr lily  
  28. (integer) 1  
  29. redis 127.0.0.1:6379> get name  
  30. "lily"  
  31. redis 127.0.0.1:6379> get age  
  32. "18"  
  33. redis 127.0.0.1:6379> incr age  
  34. (integer) 19  
  35. redis 127.0.0.1:6379> decr age  
  36. (integer) 18  
  37. redis 127.0.0.1:6379> incrby age 2  
  38. (integer) 20  
  39. redis 127.0.0.1:6379> decrby age 2  
  40. (integer) 18  
  41. redis 127.0.0.1:6379> append name andlucy  
  42. (integer) 11  
  43. redis 127.0.0.1:6379> get name  
  44. "lilyandlucy"  
  45. redis 127.0.0.1:6379> substr name 7 10  
  46. "lucy"  
  47. redis 127.0.0.1:6379>   

3. 数据类型List链表

list类型其实就是一个双向链表。通过push,pop操作从链表的头部或者尾部添加删除元素。

这使得list既可以用作栈,也可以用作队列。

上进上出 :

上进下出 队列



list链表类型应用场合:

获得最新的10个登录用户信息: select * from user order by logintime desc limit 10;

以上sql语句可以实现用户需求,但是数据多的时候,全部数据都要受到影响,对数据库的负载比较高。必要情况还需要给关键字段(idlogintime)设置索引索引也比较耗费系统资源

如果通过list链表实现以上功能,可以在list链表中保留最新的10个数据,每进来一个新数据就删除一个旧数据。每次就可以从链表中直接获得需要的数据。极大节省各方面资源消耗


通过list链表保存登录系统的最新5个用户信息:

jim   xiaoli  jack   xiaoming   linken   mary  tom

 

设置一个list链表key  newlogin,内部有5个元素:

[csharp]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. redis 127.0.0.1:6379> lpush newlogin tom  
  2. (integer) 1  
  3. redis 127.0.0.1:6379> lpush newlogin mary  
  4. (integer) 2  
  5. redis 127.0.0.1:6379> lpush newlogin linken  
  6. (integer) 3  
  7. redis 127.0.0.1:6379> lpush newlogin xiaoming  
  8. (integer) 4  
  9. redis 127.0.0.1:6379> lpush newlogin jack  
  10. (integer) 5  

该链表每增加一个新元素,就删除一个旧元素:

[csharp]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. redis 127.0.0.1:6379> lpush newlogin xiaoli  
  2. (integer) 6  
  3. redis 127.0.0.1:6379> rpop newlogin  
  4. "tom"  

通过范围查找链表内部的全部元素信息:

[csharp]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. redis 127.0.0.1:6379> lrange newlogin 0 5  
  2. 1) "xiaoli"  
  3. 2) "jack"  
  4. 3) "xiaoming"  
  5. 4) "linken"  
  6. 5) "mary"  
  7. redis 127.0.0.1:6379> lrange newlogin 0 100  
  8. 1) "xiaoli"  
  9. 2) "jack"  
  10. 3) "xiaoming"  
  11. 4) "linken"  
  12. 5) "mary"  

4. set集合类型

redissetstring类型的无序集合。

set元素最大可以包含(232次方-1)个元素。

关于set集合类型除了基本的添加删除操作,其他有用的操作还包含集合的取并集(union)交集(intersection)差集(difference)。通过这些操作可以很容易的实现sns中的好友推荐功能

 

注意:每个集合中的各个元素不能重复


该类型应用场合:qq好友推荐

 

tom朋友圈(与某某是好友)mary  jack  xiaoming  wang5  wang6

linken朋友圈(与某某是好友)yuehan  daxiong  luce  wang5  wang6


创建tomSetset集合类型数据,内部有5个元素:

[python]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. redis 127.0.0.1:6379> keys *  
  2. (empty list or set)  
  3. redis 127.0.0.1:6379> sadd tomSet mary  
  4. (integer) 1  
  5. redis 127.0.0.1:6379> sadd tomSet jack  
  6. (integer) 1  
  7. redis 127.0.0.1:6379> sadd tomSet xiaoming  
  8. (integer) 1  
  9. redis 127.0.0.1:6379> sadd tomSet wang5  
  10. (integer) 1  
  11. redis 127.0.0.1:6379> sadd tomSet wang6  
  12. (integer) 1  
  13. redis 127.0.0.1:6379> keys *  
  14. 1"tomSet"  

再创建一个linkenSetset集合key


[ruby]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. redis 127.0.0.1:6379> keys *  
  2. 1) "tomSet"  
  3. redis 127.0.0.1:6379> sadd linkenSet yuehan  
  4. (integer) 1  
  5. redis 127.0.0.1:6379> sadd linkenSet daxiong  
  6. (integer) 1  
  7. redis 127.0.0.1:6379> sadd linkenSet lucy  
  8. (integer) 1  
  9. redis 127.0.0.1:6379> sadd linkenSet wang5  
  10. (integer) 1  
  11. redis 127.0.0.1:6379> sadd linkenSet wang6  
  12. (integer) 1  
  13. redis 127.0.0.1:6379> keys *  
  14. 1) "tomSet"  
  15. 2) "linkenSet"  

两个集合取交集并集

[csharp]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. redis 127.0.0.1:6379> keys *  
  2. 1) "tomSet"  
  3. 2) "linkenSet"  
  4. redis 127.0.0.1:6379> sinter tomSet linkenSet  
  5. 1) "wang5"  
  6. 2) "wang6"  
  7. redis 127.0.0.1:6379> sunion tomSet linkenSet  
  8. 1) "xiaoming"  
  9. 2) "mary"  
  10. 3) "wang5"  
  11. 4) "lucy"  
  12. 5) "wang6"  
  13. 6) "daxiong"  
  14. 7) "yuehan"  
  15. 8) "jack"  

两个集合互取差集

[csharp]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. redis 127.0.0.1:6379> sdiff tomSet linkenSet  
  2. 1) "xiaoming"  
  3. 2) "mary"  
  4. 3) "jack"  
  5. redis 127.0.0.1:6379> sdiff linkenSet tomSet  
  6. 1) "lucy"  
  7. 2) "yuehan"  
  8. 3) "daxiong"  


 

总结:

 

1. key的操作: exists   keys *      rename    select   flushdb   flushall

2. String字符串类型操作:

set   get    mset   mget   incr   decr    incrby  decrby  append

substr

3. list链表类型操作

lpush    rpop   rpush  lpop

llen   lrange

4. set集合类型操作

sadd    scard    smove    sinter   sunion   sdiff   smembers

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值