redis持久化存儲

【centos6.5】

redis/

關機重啓後,之前redis已經搭建完成

[root@master ~]# setenforce 0

[root@master ~]# iptables -F

[root@master ~]# redis-server /usr/local/redis/conf/redis.conf &【重啓主機後啓動報錯】

[1] 2270

[root@master ~]# [2270] 25 May 15:27:28.876 * Increased maximum number of open files to 10032 (it was originally set to 1024).

                _._                                                 

           _.-``__ ''-._                                            

      _.-``    `.  `_.  ''-._           Redis 2.8.9 (00000000/0) 64 bit

  .-`` .-```.  ```\/    _.,_ ''-._                                  

 (    '      ,       .-`  | `,    )     Running in stand alone mode

 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379

 |    `-._   `._    /     _.-'    |     PID: 2270

  `-._    `-._  `-./  _.-'    _.-'                                  

 |`-._`-._    `-.__.-'    _.-'_.-'|                                 

 |    `-._`-._        _.-'_.-'    |           http://redis.io       

  `-._    `-._`-.__.-'_.-'    _.-'                                  

 |`-._`-._    `-.__.-'    _.-'_.-'|                                 

 |    `-._`-._        _.-'_.-'    |                                 

  `-._    `-._`-.__.-'_.-'    _.-'                                   

      `-._    `-.__.-'    _.-'                                      

          `-._        _.-'                                          

              `-.__.-'                                              

 

[2270] 25 May 15:27:28.880 # Server started, Redis version 2.8.9

[2270] 25 May 15:27:28.881 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.

[2270] 25 May 15:27:28.892 * DB loaded from disk: 0.011 seconds

[2270] 25 May 15:27:28.892 * The server is now ready to accept connections on port 6379

[root@master ~]# pkill redis【殺死進程redis

[2270 | signal handler] (1558769373) Received SIGTERM, scheduling shutdown...

[root@master ~]# [2270] 25 May 15:29:33.530 # User requested shutdown...

[2270] 25 May 15:29:33.530 * Saving the final RDB snapshot before exiting.

[2270] 25 May 15:29:33.544 * DB saved on disk

[2270] 25 May 15:29:33.544 # Redis is now ready to exit, bye bye...

 

[1]+  Done                    redis-server /usr/local/redis/conf/redis.conf

[root@master ~]# sysctl vm.overcommit_memory=1【值改爲1

vm.overcommit_memory = 1

[root@master ~]# redis-server /usr/local/redis/conf/redis.conf &

[1] 2284

[root@master ~]# [2284] 25 May 15:30:40.210 * Increased maximum number of open files to 10032 (it was originally set to 1024).

                _._                                                 

           _.-``__ ''-._                                            

      _.-``    `.  `_.  ''-._           Redis 2.8.9 (00000000/0) 64 bit

  .-`` .-```.  ```\/    _.,_ ''-._                                  

 (    '      ,       .-`  | `,    )     Running in stand alone mode

 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379

 |    `-._   `._    /     _.-'    |     PID: 2284

  `-._    `-._  `-./  _.-'    _.-'                                  

 |`-._`-._    `-.__.-'    _.-'_.-'|                                 

 |    `-._`-._        _.-'_.-'    |           http://redis.io       

  `-._    `-._`-.__.-'_.-'    _.-'                                  

 |`-._`-._    `-.__.-'    _.-'_.-'|                                 

 |    `-._`-._        _.-'_.-'    |                                 

  `-._    `-._`-.__.-'_.-'    _.-'                                  

      `-._    `-.__.-'    _.-'                                      

          `-._        _.-'                                           

              `-.__.-'                                              

 

[2284] 25 May 15:30:40.232 # Server started, Redis version 2.8.9

[2284] 25 May 15:30:40.233 * DB loaded from disk: 0.000 seconds

[2284] 25 May 15:30:40.233 * The server is now ready to accept connections on port 6379

[root@master ~]# ps -ef|grep redis

root       2284   2208  0 15:30 pts/1    00:00:00 redis-server *:6379                         

root       2288   2208  0 15:31 pts/1    00:00:00 grep redis

[root@master ~]# redis-cli

127.0.0.1:6379> auth yunjisuan

OK

127.0.0.1:6379> set user:01:passwd 99999

OK

127.0.0.1:6379> get user:01:passwd

"99999"

 

1、數據類型

1.1  string 字符串類型

[root@master ~]# redis-cli -a yunjisuan set work ">9000"

OK

[root@master ~]# redis-cli -a yunjisuan get work

">9000"

 

1.1.1 常規的string字符串類型

[root@master ~]# redis-cli -a yunjisuan set work ">9000"

OK

[root@master ~]# redis-cli -a yunjisuan get work

">9000"

 

1.1.2  string類型也可以用來存儲數字,並支持數字的加減操作

[root@master ~]# redis-cli -a yunjisuan set counter 1

OK

[root@master ~]# redis-cli -a yunjisuan incr counter【自增1

(integer) 2

[root@master ~]# redis-cli -a yunjisuan incr counter

(integer) 3

[root@master ~]# redis-cli -a yunjisuan get counter

"3"

[root@master ~]# redis-cli -a yunjisuan incrby counter 2【自增指定數值】

(integer) 5

[root@master ~]# redis-cli -a yunjisuan incrby counter 2

(integer) 7

[root@master ~]# redis-cli -a yunjisuan get counter

"7"

[root@master ~]# redis-cli -a yunjisuan decr counter【】自減1

(integer) 6

[root@master ~]# redis-cli -a yunjisuan decr counter

(integer) 5

[root@master ~]# redis-cli -a yunjisuan get counter

"5"

[root@master ~]# redis-cli -a yunjisuan decrby counter 2【自減指定數值】

(integer) 3

[root@master ~]# [2284] 25 May 15:42:17.254 * 10 changes in 300 seconds. Saving...

[2284] 25 May 15:42:17.257 * Background saving started by pid 2339

[2339] 25 May 15:42:17.298 * DB saved on disk

[2339] 25 May 15:42:17.299 * RDB: 6 MB of memory used by copy-on-write

[2284] 25 May 15:42:17.363 * Background saving terminated with success

[root@master ~]# redis-cli -a yunjisuan decrby counter 2

(integer) 1

[root@master ~]# redis-cli -a yunjisuan get counter

"1"

 

1.1.3  key設置新值並且返回原值

[root@master ~]# redis-cli -a yunjisuan

127.0.0.1:6379> set user01 zhangshan【設置新key-value

OK

127.0.0.1:6379> get user01

"zhangshan"

127.0.0.1:6379> getset user01 wangwu【設置新數據並返回舊數據】

"zhangshan"

127.0.0.1:6379> getset user01 liliu【設置新數據並返回舊數據】

"wangwu"

127.0.0.1:6379> getset user01 gongli【設置新數據並返回舊數據】

"liliu"

127.0.0.1:6379> get user01

"gongli"

 

1.1.4   string類型還支持批量讀寫操作

127.0.0.1:6379> mset name zhangsan age 44

OK

127.0.0.1:6379> mget name age

1) "zhangsan"

2) "44"

 

1.1.5  string類型還支持其部分的修改和獲取操作

127.0.0.1:6379> set images flower

OK

127.0.0.1:6379> get images

"flower"

127.0.0.1:6379> append images .jpg【追加字符串】

(integer) 10

127.0.0.1:6379> get images

"flower.jpg"

127.0.0.1:6379> strlen images

(integer) 10

127.0.0.1:6379> substr images 0 6

"flower."

127.0.0.1:6379> substr images 0 5

"flower"

 

命令使用幫助

查看單個命令help + 命令名

127.0.0.1:6379> help set

  SET key value [EX seconds] [PX milliseconds] [NX|XX]

  summary: Set the string value of a key

  since: 1.0.0

  group: string

 

127.0.0.1:6379> help mset

  MSET key value [key value ...]

  summary: Set multiple keys to multiple values

  since: 1.0.1

  group: string

 

 

2 list類型

redis能夠將數據存儲成一個列表,並能對這個列表進行豐富的操作

127.0.0.1:6379> lpush students "zhangsan"【將元素zhangsan放在students列表最左邊】

(integer) 1

127.0.0.1:6379> lpush students "wangwu"【將元素wangwu插入列表的最左邊】

(integer) 2

127.0.0.1:6379> lpush students "liliu"【將元素liliu插入列表的最左邊】

(integer) 3

127.0.0.1:6379> lrange students 0 2【查看序列是02的元素】

1) "liliu"

2) "wangwu"

3) "zhangsan"

127.0.0.1:6379> rpush students "wangyue"【將元素wnagyue插入列表扥最右邊】

(integer) 4

127.0.0.1:6379> lrange students 0 3【查看序列是03的元素】

1) "liliu"

2) "wangwu"

3) "zhangsan"

4) "wangyue"

127.0.0.1:6379> llen students【查看列表元素的個數】

(integer) 4

127.0.0.1:6379> lpop students【移除最左邊的元素】

"liliu"

127.0.0.1:6379> rpop students【移除右邊的元素】

"wangyue"

127.0.0.1:6379> lrange students 0 3【列表裏只剩下兩個元素】

1) "wangwu"

2) "zhangsan"

127.0.0.1:6379> rpush students zhagnsan

(integer) 3

127.0.0.1:6379> rpush students zhagnsan

(integer) 4

127.0.0.1:6379> rpush students zhagnsan

(integer) 4

127.0.0.1:6379> lrange students 0 3

1) "wangwu"

2) "zhangsan"

3) "zhagnsan"

4) "zhagnsan"

127.0.0.1:6379> lrem students 2 "zhangsan"【刪除列表裏是zhangsan的元素,刪除兩次(從左向右刪)】

(integer) 1

127.0.0.1:6379> lrange students 0 3

1) "wangwu"

2) "zhagnsan"

3) "zhagnsan"

127.0.0.1:6379> rpush students zhangsan

(integer) 4

127.0.0.1:6379> rpush students zhagnsan

(integer) 5

127.0.0.1:6379> lrem students 1 "zhagnsan"【刪除列表裏的元素zhagnsan一次】

(integer) 1

127.0.0.1:6379> lrange students 0 3

1) "wangwu"

2) "zhagnsan"

3) "zhagnsan"

127.0.0.1:6379> lrem students 0 "zhagnsan"【清空列表所有的zhagnsan

(integer) 2

127.0.0.1:6379> lrange students 0 3

1) "wangwu"

 

redis也支持很多修改操作

linsert 在列表裏的某個值的前後插入元素

127.0.0.1:6379> lrange students 0 5

1) "wangwu"

127.0.0.1:6379> lpush students a b c d 【左插入元素abcd

(integer) 5

127.0.0.1:6379> lrange students 0 5

1) "d"

2) "c"

3) "b"

4) "a"

5) "wangwu"

127.0.0.1:6379> linsert students before b xxx【在元素b的前邊插入元素xxx

(integer) 6

127.0.0.1:6379> lrange students 0 9

1) "d"

2) "c"

3) "xxx"

4) "b"

5) "a"

6) "wangwu"

127.0.0.1:6379> linsert students after b xxx【在元素b的後邊插入元素xxx

(integer) 7

127.0.0.1:6379> lrange students 0 9

1) "d"

2) "c"

3) "xxx"

4) "b"

5) "xxx"

6) "a"

7) "wangwu"

 

幫助 help @list

127.0.0.1:6379> help @list

 

  BLPOP key [key ...] timeout

  summary: Remove and get the first element in a list, or block until one is available

  since: 2.0.0

 

  BRPOP key [key ...] timeout

  summary: Remove and get the last element in a list, or block until one is available

  since: 2.0.0

 

  BRPOPLPUSH source destination timeout

  summary: Pop a value from a list, push it to another list and return it; or block until one is available

  since: 2.2.0

 

  LINDEX key index

  summary: Get an element from a list by its index

  since: 1.0.0

 

  LINSERT key BEFORE|AFTER pivot value

  summary: Insert an element before or after another element in a list

  since: 2.2.0

 

  LLEN key

  summary: Get the length of a list

  since: 1.0.0

 

  LPOP key

  summary: Remove and get the first element in a list

  since: 1.0.0

 

  LPUSH key value [value ...]

  summary: Prepend one or multiple values to a list

  since: 1.0.0

 

  LPUSHX key value

  summary: Prepend a value to a list, only if the list exists

  since: 2.2.0

 

  LRANGE key start stop

  summary: Get a range of elements from a list

  since: 1.0.0

 

  LREM key count value

  summary: Remove elements from a list

  since: 1.0.0

 

  LSET key index value

  summary: Set the value of an element in a list by its index

  since: 1.0.0

 

  LTRIM key start stop

  summary: Trim a list to the specified range

  since: 1.0.0

 

  RPOP key

  summary: Remove and get the last element in a list

  since: 1.0.0

 

  RPOPLPUSH source destination

  summary: Remove the last element in a list, append it to another list and return it

  since: 1.2.0

 

  RPUSH key value [value ...]

  summary: Append one or multiple values to a list

  since: 1.0.0

 

  RPUSHX key value

  summary: Append a value to a list, only if the list exists

  since: 2.2.0

 

3、集合(sets)類型

127.0.0.1:6379> sadd users laoda【項集合users裏添加一個元素laoda

(integer) 1

127.0.0.1:6379> sadd users laoer laosan【向結合users裏天界倆個元素laoerlaoda

(integer) 2

127.0.0.1:6379> smembers users【查看集合裏的所有元素】

1) "laoer"【可以看到集合裏的元素是無序的】

2) "laosan"

3) "laoda"

向集合中添加三個元素,並讓redis返回所有元素。

127.0.0.1:6379> sismember users laoda【查看laoda是否存在與集合users

(integer) 1【存在】

127.0.0.1:6379> sismember users laoer【查看元素laoer是否存在於集合users

(integer) 1【存在】

127.0.0.1:6379> sismember users laosan【查看元素laosan是否存在於集合users

(integer) 1【存在】

127.0.0.1:6379> sismember users laosi【查看元素laosi是否存在於集合users

(integer) 0【不存在】

在新聞ID1000被加了幾個標籤tag1、2、5、77,就可以設置下面倆集合

[root@master ~]# redis-cli -a yunjisuan sadd news:1000:tags 1

(integer) 1

[root@master ~]# redis-cli -a yunjisuan sadd news:1000:tags 2

(integer) 1

[root@master ~]# redis-cli -a yunjisuan sadd news:1000:tags 5

(integer) 1

[root@master ~]# redis-cli -a yunjisuan sadd news:1000:tags 77

(integer) 1

[root@master ~]# redis-cli -a yunjisuan sadd tag:1:objects 1000

(integer) 1

[root@master ~]# redis-cli -a yunjisuan sadd tag:2:objects 1000

(integer) 1

[root@master ~]# redis-cli -a yunjisuan sadd tag:5:objects 1000

(integer) 1

[root@master ~]# redis-cli -a yunjisuan sadd tag:77:objects 1000

(integer) 1

 

[root@master ~]# redis-cli -a yunjisuan smembers news:1000:tags

1) "1"【獲取集合爲news:1000:tags的所有元素

2) "2"

3) "5"

4) "77"

[root@master ~]# redis-cli -a yunjisuan smembers tag:5:objects

1) "1000"【獲取集合爲tag:5:objects的所有元素

 

[root@master ~]# redis-cli -a yunjisuan sadd tag:1:objects 500

(integer) 1【向集合tag:1:objects裏添加元素錒500

[root@master ~]# redis-cli -a yunjisuan smembers tag:1:objects

1) "500"【查看集合tag:1:objects裏的所有元素

2) "1000"

[root@master ~]# redis-cli -a yunjisuan smembers tag:2:objects

1) "1000"【查看集合tag:2:objects裏的所有元素

[root@master ~]# redis-cli -a yunjisuan  sinter tag:1:objects tag:2:objects tag:5:objects tag:77:objects

1) "1000"【求集合tag:1:objects tag:2:objects tag:5:objects tag:77:objects裏所有元素的交集

 

 

4、有序集合(sorted sets)類型

向一個有序集合裏添加元素

[root@master ~]# redis-cli -a yunjisuandays是有序集合名,0是序號,mon是值】

127.0.0.1:6379> ZADD days 0 mon

(integer) 1

127.0.0.1:6379> ZADD days 0 tue

(integer) 1

127.0.0.1:6379> ZADD days 2 web

(integer) 1

127.0.0.1:6379> ZADD days 3 thu

(integer) 1

127.0.0.1:6379> ZADD days 4 fri

(integer) 1

127.0.0.1:6379> ZADD days 5 sat

(integer) 1

127.0.0.1:6379> ZADD days 6 sun

(integer) 1

127.0.0.1:6379> zrange days 0 6【查看集合索引06的元素】

1) "mon"

2) "tue"

3) "web"

4) "thu"

5) "fri"

6) "sat"

7) "sun"

從上面我們可以看出,ZADD創建的集合是有序集合

 

查看有序集合days的具體值的排序

127.0.0.1:6379> zscore days mon

"1"

127.0.0.1:6379> zscore days web

"2"

127.0.0.1:6379> zscore days fri

"4"

127.0.0.1:6379> zcount days 3 6

(integer) 4

127.0.0.1:6379> ZRANGEBYSCORE days 3 6

1) "thu"

2) "fri"

3) "sat"

4) "sun"

有序集合是通過一個dual-ported數據結構實現的

127.0.0.1:6379> zadd hackers 1940 "1940-Alan Kay"

(integer) 1

127.0.0.1:6379> zadd hackers 1953 "1953-Richard Stallman"

(integer) 1

127.0.0.1:6379> zadd hackers 1965 "1965-Yukihiro Matsumoto"

(integer) 1

127.0.0.1:6379> zadd hackers 1916 "1916-Claude Shannon"

(integer) 1

127.0.0.1:6379> zadd hackers 1969 "1969-Linux Torvalds"

(integer) 1

127.0.0.1:6379> zadd hackers 1912 "1912-ALAN TURING"

(integer) 1 

 

127.0.0.1:6379> zrange hackers 0 6【利用zrange進行排序查詢】

1) "1912-ALAN TURING"

2) "1916-Claude Shannon"

3) "1940-Alan Kay"

4) "1953-Richard Stallman"

5) "1965-Yukihiro Matsumoto"

6) "1969-Linux Torvalds"

127.0.0.1:6379> zrevrange hackers 0 -1【利用zrevrange進行方向查詢】

1) "1969-Linux Torvalds"

2) "1965-Yukihiro Matsumoto"

3) "1953-Richard Stallman"

4) "1940-Alan Kay"

5) "1916-Claude Shannon"

6) "1912-ALAN TURING"

5hash 類型

redis 能夠存儲key對多個屬性的數據(比如user1uname user1.passwd

存儲一個hash類型test,他的屬性是name ,屬性數據是yunjisuan

127.0.0.1:6379> hset test name yunjisuan

(integer) 1

存儲一個hash類型test,它的屬性是age,屬性數據是35

127.0.0.1:6379> hset test age 35

(integer) 1

存儲一個hash類型test。它的屬性是age,屬性數據是nan

127.0.0.1:6379> hset test sex nan

(integer) 1

查看hash類型test的所有屬性值

127.0.0.1:6379> hvals test

1) "yunjisuan"

2) "35"

3) "nan"

查看hash類型test的所有屬性及屬性所有對應的值

127.0.0.1:6379> hgetall test

1) "name"

2) "yunjisuan"

3) "age"

4) "35"

5) "sex"

6) "nan"

 

發佈了73 篇原創文章 · 獲贊 8 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章