1. 程式人生 > >Redis自學筆記整理

Redis自學筆記整理

Redis的簡介

 Redis是完全開源免費的,遵守BSD協議,先進的key -value持久化產品。它通常被稱為資料結構伺服器,因為值(value)可以是字串(String), 雜湊(Map),列表(list),集合(sets)有序集合(sorted sets)等型別。

redis的下載和安裝

         本地測試下載目錄:

   cd /

   lamp:所有下載檔案目錄

安裝步驟:

$ wgethttp://download.redis.io/releases/redis-2.8.9.tar.gz

$ tar xzf redis-2.8.9.tar.gz

$ cd redis-2.8.9

使用make命令安裝:

cd src目錄下:

使用make install目錄安裝

安裝完畢之後整理下redis的命令和配置檔案

cd /usr/local/redis/

分別建立bin和etc兩個目錄:

bin:用來存放redis的一些啟動命令

etc:用來存放redis.conf配置檔案

然後到redis-2.8.9資料夾中移動

(1)redis.conf到cd/usr/local/redis/etc下

(2) mkreleasehdr.sh redis-benchmark redis-check-aof redis-check-dump      redis-cli   redis-sentinel  redis-server 移動到 /usr/local/redis/etc下

(3)修改redis.conf配置檔案中的daemonize no其中no 變為yes表示後臺啟動

redis啟動:

(1)啟動

[[email protected] bin]# ./redis-server /usr/local/redis/etc/redis.conf

(2)驗證啟動

[[email protected] bin]# ps -ef|grep redis

root     2472     1  0 00:42 ?        00:00:01 ./redis-server *:6379                        

root     2605  2438  0 01:01 pts/0    00:00:00 grep redis

(3)驗證埠

[[email protected] bin]# netstat -tunpl|grep6379

tcp       0      0 0.0.0.0:6379                0.0.0.0:*                   LISTEN      2472/./redis-server

tcp       0      0 :::6379                     :::*                        LISTEN      2472/./redis-server

(4)遠端連線

[[email protected] bin]# ./redis-cli

127.0.0.1:6379>

redis-cli.exe -h 192.168.2.57 -p6379

reidis的資料型別:

String   List          Set           Hash                 ZSet五種

(1)String型別:

127.0.0.1:6379> set name yangluan

OK

127.0.0.1:6379> get name

"yangluan"

127.0.0.1:6379> set name haha

OK

127.0.0.1:6379> get name

"haha"

上面中可以看出已經覆蓋了原來的值

使用setnx name可以不覆蓋,即原來有這個鍵那麼不覆蓋返回0沒有就建立

127.0.0.1:6379> setnx name yangluan

(integer) 0

127.0.0.1:6379> setnx age 20

(integer) 1

127.0.0.1:6379> get age

"20"

127.0.0.1:6379> setnx age 40

(integer) 0

127.0.0.1:6379> get age

"20"

127.0.0.1:6379>

使用setex 命令表示設定某個鍵的存在時間

127.0.0.1:6379> setex mycolor 10 red //表示mycolor的存在時間為10

OK

127.0.0.1:6379> get mycolor

"red"

127.0.0.1:6379> get mycolor

"red"

127.0.0.1:6379> get mycolor

"red"

127.0.0.1:6379> get mycolor

"red"

127.0.0.1:6379> get mycolor

"red"

127.0.0.1:6379> get mycolor

"red"

127.0.0.1:6379> get mycolor

"red"

127.0.0.1:6379> get mycolor

(nil)

127.0.0.1:6379>

setrange命令設定指定key的value值的子字串

舉例:替換某126.com 為qq.com

127.0.0.1:6379> set name [email protected]

OK

127.0.0.1:6379> get name

"[email protected]"

127.0.0.1:6379> setrange name 5 126.com

(integer) 12

127.0.0.1:6379> get name

"[email protected]"

127.0.0.1:6379>

mset命令:一次性設定多個key

127.0.0.1:6379> mset key1 hello key2world

OK

127.0.0.1:6379> get key1

"hello"

127.0.0.1:6379> get key2

"world"

127.0.0.1:6379>

msetnx命令:一次性設定多個key 如果key不存在返回ok 某個key存在返回0

127.0.0.1:6379> msetnx key3 ceshi1 key4ceshi2 key5 ceshi3 key6 ceshi

(integer) 0

127.0.0.1:6379> get key3

"yang"

127.0.0.1:6379>

getset命令:設定某個key的值但是返回的這個key的舊值

127.0.0.1:6379> getset key3 yangluan

"yang"

127.0.0.1:6379>

getrange命令:表示獲取某個key的子字串相當於subString

127.0.0.1:6379> get name

"[email protected]"

127.0.0.1:6379> getrange name 0 3

"yang"

127.0.0.1:6379> getrange name 0 2

"yan"

127.0.0.1:6379>

mget命令:批量獲取某個值

127.0.0.1:6379> mget key1 key2 key3 key7

1) "hello"

2) "world"

3) "yangluan"

4) (nil)

127.0.0.1:6379>

incr命令:返回某個key的下一個值遞增值;

127.0.0.1:6379> set key7 10

OK

127.0.0.1:6379> incr key7

(integer) 11

127.0.0.1:6379> incr key7

(integer) 12

127.0.0.1:6379> incr key7

(integer) 13

127.0.0.1:6379> incr key7

(integer) 14

127.0.0.1:6379> incr key7

(integer) 15

127.0.0.1:6379> get key7

"15"

127.0.0.1:6379>

incrby命令:已制定的數來進行增加或者減少

127.0.0.1:6379> incrby key 7 5

(error) ERR wrong number of arguments for'incrby' command

127.0.0.1:6379> incrby key7 5

(integer) 20

127.0.0.1:6379> incrby key7 5

(integer) 25

127.0.0.1:6379> get key7

"25"

127.0.0.1:6379> incrby key7 -5

(integer) 20

127.0.0.1:6379> incrby key7 -5

(integer) 15

127.0.0.1:6379> get key7

"15"

127.0.0.1:6379>

append命令;增加key後面的值

127.0.0.1:6379> set key yang

OK

127.0.0.1:6379> append key luan

(integer) 8

127.0.0.1:6379> get name

(nil)

127.0.0.1:6379> get key

"yangluan"

127.0.0.1:6379>

strlend命令:檢視某個key的長度

127.0.0.1:6379> get key

"yangluan"

127.0.0.1:6379> strlen key

(integer) 8

127.0.0.1:6379>

(2)Hashs型別:

hset和hget命令:設定和取得一個hash表裡面欄位的值

127.0.0.1:6379> hset map key yangluan

(integer) 1

127.0.0.1:6379> hget map key

"yangluan"

127.0.0.1:6379>

hsetnx命令: 設定hash的一個欄位,只有當這個欄位不存在時有效

127.0.0.1:6379> hsetnx map key1 yangluan

(integer) 1

127.0.0.1:6379> hget map key1

"yangluan"

127.0.0.1:6379> hsetnx map key1xiugaiyangluan

(integer) 0

127.0.0.1:6379> hget map key1

"yangluan"

127.0.0.1:6379>

hmset命令: 設定hash欄位值多個

127.0.0.1:6379> hmset usertable nameyangluan age 26 job pachong

OK

127.0.0.1:6379> hget usertable name

"yangluan"

127.0.0.1:6379> hget usertable age

"26"

127.0.0.1:6379> hget usertable job

"pachong"

127.0.0.1:6379>

hmget命令: 獲取hash裡面所有的key的value值

127.0.0.1:6379> hmget usertable name agejob

1) "yangluan"

2) "26"

3) "pachong"

127.0.0.1:6379>

hincrby命令:將雜湊集中指定域的值增加給定的數字

127.0.0.1:6379> hincrby usertable age 5

(integer) 31

127.0.0.1:6379> hmget usertable age

1) "31"

127.0.0.1:6379>

hexists命令: 判斷給定域是否存在於雜湊集中

127.0.0.1:6379> hexists usertable age

(integer) 1

127.0.0.1:6379> hexists usertable haha

(integer) 0

127.0.0.1:6379>

·  hlen命令:獲取hash裡所有key的數量

127.0.0.1:6379> hmset usertable nameyangluan age 25 job java

OK

127.0.0.1:6379> hlen usertable

(integer) 3

127.0.0.1:6379>

hdel命令:刪除hash裡面的某個key

127.0.0.1:6379> hmset usertable nameyangluan age 25 job java

OK

127.0.0.1:6379> hlen usertable

(integer) 3

127.0.0.1:6379> hget usertable age

"25"

127.0.0.1:6379> hdel usertable age

(integer) 1

127.0.0.1:6379> hget usertable age

(nil)

127.0.0.1:6379>

hkeys命令:返回hash裡面所有的key

127.0.0.1:6379> hkeys usertable

1) "name"

2) "job"

127.0.0.1:6379>

hvals命令:但會hash表裡面所有的value值

127.0.0.1:6379> hvals usertable

1) "yangluan"

2) "java"

127.0.0.1:6379>

hgetall命令:返回hash表裡面所有的key和value

127.0.0.1:6379> hgetall usertable

1) "name"

2) "yangluan"

3) "job"

4) "java"

127.0.0.1:6379>

(3)Lists型別:

lpush命令:從list的頭部(左邊)新增一個或多個元素
lrange命令:從list中獲取制動返回的元素

127.0.0.1:6379> lpush mylist an lu yang

(integer) 3

127.0.0.1:6379> lrange mylist 0 -1

1) "yang"

2) "lu"

3) "an"

127.0.0.1:6379>

rpush命令:從list尾部(右邊)新增一個或多個元素

127.0.0.1:6379> rpush mylist1 an lu yang

(integer) 3

127.0.0.1:6379> lrange mylist1 0 -1

1) "an"

2) "lu"

3) "yang"

127.0.0.1:6379>

linsert命令:在某兩個元素中間新增一個元素

127.0.0.1:6379> lpush mylist2 1

(integer) 1

127.0.0.1:6379> lpush mylist2 3

(integer) 2

127.0.0.1:6379> lrange mylist2 0 -1

1) "3"

2) "1"

127.0.0.1:6379> linsert mylist2 1 3

(error) ERR wrong number of arguments for'linsert' command

127.0.0.1:6379> linsert mylist2 before 12

(integer) 3

127.0.0.1:6379> lrange mylist2 0 -1

1) "3"

2) "2"

3) "1"

127.0.0.1:6379>

lset命令:修改某個元素的值根據下標

127.0.0.1:6379> lpush list1 yang

(integer) 1

127.0.0.1:6379> lset list1 0 luan

OK

127.0.0.1:6379> lrange list1 0 -1

1) "luan"

127.0.0.1:6379>

lrem命令: 從列表中刪除元素

127.0.0.1:6379> lpush list1 one

(integer) 1

127.0.0.1:6379> lpush list1 two

(integer) 2

127.0.0.1:6379> lpush list1 three

(integer) 3

127.0.0.1:6379> lpush list1 one

(integer) 4

127.0.0.1:6379> lpush list1 one

(integer) 5

127.0.0.1:6379> lpush list1 one

(integer) 6

127.0.0.1:6379> lrange list1 0 -1

1) "one"

2) "one"

3) "one"

4) "three"

5) "two"

6) "one"

127.0.0.1:6379> lrem list1 5 one

(integer) 4

127.0.0.1:6379> lrange list1 0 -1

1) "three"

2) "two"

127.0.0.1:6379>

ltrim命令:保留指定範圍內的資料

127.0.0.1:6379> rpush list1 one

(integer) 1

127.0.0.1:6379> rpush list1 two

(integer) 2

127.0.0.1:6379> rpush list1 three

(integer) 3

127.0.0.1:6379> rpush list1 four

(integer) 4

127.0.0.1:6379> lrange list1 0 -1

1) "one"

2) "two"

3) "three"

4) "four"

127.0.0.1:6379> ltrim list1 1 2

OK

127.0.0.1:6379> lrange list1 0 -1

1) "two"

2) "three"

127.0.0.1:6379>

lpop命令:表示從list的頭部(彈出)刪除一個元素,並且返回此元素

127.0.0.1:6379> lrange list1 0 -1

1) "hello"

2) "word"

127.0.0.1:6379> lopo list1

(error) ERR unknown command 'lopo'

127.0.0.1:6379> lpop list1

"hello"

127.0.0.1:6379> lrange list1 0 -1

1) "word"

127.0.0.1:6379>

rpop命令:表示從list的尾部(彈出)刪除一個元素,並且返回此元素

127.0.0.1:6379> rpush list1 yang

(integer) 1

127.0.0.1:6379> rpush list1 lu

(integer) 2

127.0.0.1:6379> rpush list1 an

(integer) 3

127.0.0.1:6379> lrange list1 0 -1

1) "yang"

2) "lu"

3) "an"

127.0.0.1:6379> rpop list1

"an"

127.0.0.1:6379> lrange list1 0 -1

1) "yang"

2) "lu"

127.0.0.1:6379>

rpoplpush命令:從尾部彈出從頭部壓入

127.0.0.1:6379>

127.0.0.1:6379> rpush list1 three

(integer) 1

127.0.0.1:6379> rpush list1 hello

(integer) 2

127.0.0.1:6379> rpush list2 hello

(integer) 1

127.0.0.1:6379> rpush list2 world

(integer) 2

127.0.0.1:6379> lrange list1 0 -1

1) "three"

2) "hello"

127.0.0.1:6379> lrange list2 0 -1

1) "hello"

2) "world"

127.0.0.1:6379> brpoplpush list1 list2

(error) ERR wrong number of arguments for'brpoplpush' command

127.0.0.1:6379> rpoplpush list1 list2

"hello"

127.0.0.1:6379> lrange list1 0 -1

1) "three"

127.0.0.1:6379> lrange list2 0 -1

1) "hello"

2) "hello"

3) "world"

127.0.0.1:6379>

lindex命令:返回元素索引所在位置的元素的值

127.0.0.1:6379> lindex list1 0

"three"

127.0.0.1:6379>

llen命令:但會list元素的個數

127.0.0.1:6379> llen list1

(integer) 1

127.0.0.1:6379> llen list2

(integer) 3

127.0.0.1:6379>

(4)Sets型別:(集合中的元素是不重複的並且無序)

sadd命令:向集合中新增元素

127.0.0.1:6379> sadd set1 yangluan

(integer) 1

127.0.0.1:6379> sadd set1 hello

(integer) 1

127.0.0.1:6379> sadd set1 hello

(integer) 0

127.0.0.1:6379>

smembers命令: 獲取集合裡面的所有key

127.0.0.1:6379> smembers set1

1) "hello"

2) "yangluan"

127.0.0.1:6379>

srem命令:刪除set集合中的某個key

127.0.0.1:6379> sadd set1 yangluan

(integer) 1

127.0.0.1:6379> sadd set1 pachong

(integer) 1

127.0.0.1:6379> smembers set1

1) "pachong"

2) "yangluan"

127.0.0.1:6379> srem set1 pachong

(integer) 1

127.0.0.1:6379> smembers set1

1) "yangluan"

127.0.0.1:6379>

spop命令:隨即彈出一個key

127.0.0.1:6379> spop set1

"three"

127.0.0.1:6379>

sdiff命令:獲得佇列不存在的元素

127.0.0.1:6379> smembers set1

1) "one"

2) "two"

127.0.0.1:6379> smembers set2

1) "three"

2) "two"

127.0.0.1:6379> sdiff set1 set2

1) "one"

127.0.0.1:6379> sdiff set2 set3

1) "two"

2) "three"

127.0.0.1:6379> sdiff set2 set1

1) "three"

127.0.0.1:6379>

sdiffstore命令:將兩個集合的差集存到某個集合裡面

127.0.0.1:6379> sadd set1 yangluan

(integer) 1

127.0.0.1:6379> sadd set1 zhangnan

(integer) 1

127.0.0.1:6379> sadd set2 zhangnan

(integer) 1

127.0.0.1:6379> sadd set2 lidapeng

(integer) 1

127.0.0.1:6379> sdiffstore set3 set1set2

(integer) 1

127.0.0.1:6379> smembers set3

1) "yangluan"

127.0.0.1:6379>

sinter命令: 獲得兩個集合的交集

127.0.0.1:6379> sadd set1 yangluan

(integer) 1

127.0.0.1:6379> sadd set1 zhangnan

(integer) 1

127.0.0.1:6379> sadd set2 zhangnan

(integer) 1

127.0.0.1:6379> sadd set2 lidapeng

(integer) 1

127.0.0.1:6379> sinter set1 set2

1) "zhangnan"

127.0.0.1:6379>

sinterstore命令:表示兩個集合的交集存放在某個集合裡面

127.0.0.1:6379> sadd set1 yangluan

(integer) 1

127.0.0.1:6379> sadd set1 zhangnan

(integer) 1

127.0.0.1:6379> sadd set2 zhangnan

(integer) 1

127.0.0.1:6379> sadd set2 lidapeng

(integer) 1

127.0.0.1:6379> sinterstore set3 set1set2

(integer) 1

127.0.0.1:6379> smembers set3

1) "zhangnan"

127.0.0.1:6379>

sunion命令:表示兩個集合的並集

127.0.0.1:6379> sadd set1 yangluan

(integer) 1

127.0.0.1:6379> sadd set1 zhangnan

(integer) 1

127.0.0.1:6379> sadd set2 zhangnan

(integer) 1

127.0.0.1:6379> sadd set2 lidapeng

(integer) 1

127.0.0.1:6379> sonion set1 set2

(error) ERR unknown command 'sonion'

127.0.0.1:6379> sunion set1 set2

1) "lidapeng"

2) "zhangnan"

3) "yangluan"

127.0.0.1:6379>

sunionstore命令:表示將兩個集合的並集放到另外一個集合中(同上)
smove命令:表示將第一個集合剪下到第二和集合中

127.0.0.1:6379> smembers set1

1) "zhangnan"

2) "yangluan"

127.0.0.1:6379> smembers set2

1) "lidapeng"

2) "zhangnan"

127.0.0.1:6379> smembers set3

(empty list or set)

127.0.0.1:6379> smove set1 set3 yangluan

(integer) 1

127.0.0.1:6379> smembers set3

1) "yangluan"

127.0.0.1:6379> smembers set1

1) "zhangnan"

127.0.0.1:6379>

scard命令:返回名稱為key的Set元素的個數

127.0.0.1:6379> sadd set1 yangluan

(integer) 1

127.0.0.1:6379> sadd set1 zhangnan

(integer) 1

127.0.0.1:6379> scsrd set1

(error) ERR unknown command 'scsrd'

127.0.0.1:6379> scard set1

(integer) 2

127.0.0.1:6379>

sismember命令:判斷某個key是否為集合中的元素

127.0.0.1:6379> sadd set1 yangluan

(integer) 1

127.0.0.1:6379> sadd set1 zhangnan

(integer) 1

127.0.0.1:6379> sismember set1 yangluan

(integer) 1

127.0.0.1:6379> sismember set1 lidapneng

(integer) 0

127.0.0.1:6379>

srandmember命令:隨即返回一個元素但不刪除這個元素

127.0.0.1:6379> sadd set1 yangluan

(integer) 1

127.0.0.1:6379> sadd set1 zhangnan

(integer) 1

127.0.0.1:6379> sadd set1 liuqingzhao

(integer) 1

127.0.0.1:6379> sadd set1 lidapeng

(integer) 1

127.0.0.1:6379> srandmember set1

"yangluan"

127.0.0.1:6379> srandmember set1

"zhangnan"

127.0.0.1:6379> srandmember set1

"yangluan"

127.0.0.1:6379> smembers set1

1) "lidapeng"

2) "liuqingzhao"

3) "zhangnan"

4) "yangluan"

127.0.0.1:6379>

ZSet型別:(有序集合[Sorted Sets])

zadd命令:新增到有序set集合元素如果存在則更新序列號碼

127.0.0.1:6379> zadd zset1 1 yangluan

(integer) 1

127.0.0.1:6379> zadd zset1 2 zhangnan

(integer) 1

127.0.0.1:6379> zadd zset1 3 zhangnan

(integer) 0

127.0.0.1:6379> zrange zset1 0 -1

1) "yangluan"

2) "zhangnan"

127.0.0.1:6379> zrange zset1 0 -1withscores

1) "yangluan"

2) "1"

3) "zhangnan"

4) "3"

127.0.0.1:6379>

zrem命令:刪除集合中的元素

127.0.0.1:6379> zadd zset1 1 yangluan

(integer) 1

127.0.0.1:6379> zadd zset1 2 zhangnan

(integer) 1

127.0.0.1:6379> zadd zset1 3 zhangnan

(integer) 0

127.0.0.1:6379> zrange zset1 0 -1withscores

1) "yangluan"

2) "1"

3) "zhangnan"

4) "3"

127.0.0.1:6379> zrem zset1 zhangnan

(integer) 1

127.0.0.1:6379> zrange zset1 0 -1withscores

1) "yangluan"

2) "1"

127.0.0.1:6379>

zincrby命令: 增量元素按照指定的增長值

127.0.0.1:6379> zrange zset1 0 -1withscores

1) "yangluan"

2) "1"

127.0.0.1:6379> zincrby zset1 2 yangluan

"3"

127.0.0.1:6379> zrange zset1 0 -1withscores

1) "yangluan"

2) "3"

127.0.0.1:6379>

zrank命令;表示返回某個key的索引下標的值(從小到大索引排序)

127.0.0.1:6379> zrange zset1 0 -1withscores

1) "yangluan"

2) "1"

3) "zhangnan"

4) "2"

5) "lidapeng"

6) "5"

127.0.0.1:6379> zrank zset1 yangluan

(integer) 0

127.0.0.1:6379> zrank zset1 lidapeng

(integer) 2

127.0.0.1:6379>

zrevrank命令:返回某個key的索引下標的值(從大到小索引排序)
zrangebyscore命令:按照索引排序找到某個範圍內索引的值

127.0.0.1:6379> zrange zset1 0 -1withscores

1) "yangluan"

2) "1"

3) "zhangnan"

4) "3"

5) "lidapeng"

6) "5"

127.0.0.1:6379> zrangebyscore zset1 2 6withscores

1) "zhangnan"

2) "3"

3) "lidapeng"

4) "5"

127.0.0.1:6379>

zcount命令:返回集合中索引在給定範圍內的數量

127.0.0.1:6379> zrangebyscore zset1 2 6withscores

1) "zhangnan"

2) "3"

3) "lidapeng"

4) "5"

127.0.0.1:6379> zcount zset1 2 6

(integer) 2

127.0.0.1:6379>

zcard命令:返回集合中所有元素的個數

127.0.0.1:6379> zcard zset1

(integer) 3

127.0.0.1:6379>

zremrangebyrank命令:刪除集合指定區間內元素按rank

127.0.0.1:6379> zrange zset1 0 -1withscores

1) "yangluan"

2) "1"

3) "zhangnan"

4) "2"

127.0.0.1:6379> zremrangebyrank zset1 11

(integer) 1

127.0.0.1:6379> zrange zset1 0 -1withscores

1) "yangluan"

2) "1"

127.0.0.1:6379>

zremrangebyscore命令:刪除集合指定區間內元素按score範圍刪除

redis相關命令:

(1)鍵值相關命令:

keys命令:表示返回所有的key

127.0.0.1:6379> set string1 yangluan

OK

127.0.0.1:6379> lpush list1 yangluan

(integer) 1

127.0.0.1:6379> hset map1 name yangluan

(integer) 1

127.0.0.1:6379> keys *

1) "map1"

2) "string1"

3) "list1"

127.0.0.1:6379>

exists命令:確認一個key是否存在

127.0.0.1:6379> exists name

(integer) 0

127.0.0.1:6379> exists map1

(integer) 1

127.0.0.1:6379>

del命令:刪除一個key

127.0.0.1:6379> del map1

(integer) 1

127.0.0.1:6379> exists map1

(integer) 0

127.0.0.1:6379>

expire命令:設定一個key的過期的秒數
ttl命令: 獲取key的有效時間(單位:秒)

127.0.0.1:6379> set name yangluan

OK

127.0.0.1:6379> expire name 10

(integer) 1

127.0.0.1:6379> ttl name

(integer) 8

127.0.0.1:6379> ttl name

(integer) 7

127.0.0.1:6379> ttl name

(integer) 6

127.0.0.1:6379> ttl name

(integer) 6

127.0.0.1:6379> ttl name

(integer) 5

127.0.0.1:6379> ttl name

(integer) 3

127.0.0.1:6379> ttl name

(integer) 2

127.0.0.1:6379> ttl name

(integer) 0

127.0.0.1:6379> ttl name

(integer) -2

127.0.0.1:6379> get name

(nil)

127.0.0.1:6379>

select命令:表示選擇資料庫

127.0.0.1:6379> select 0

OK

127.0.0.1:6379>

move命令:將當前資料庫的key轉移到其他資料庫中

127.0.0.1:6379> select 0

OK

127.0.0.1:6379> set name yang

OK

127.0.0.1:6379> get name

"yang"

127.0.0.1:6379> move name 1

(integer) 1

127.0.0.1:6379> get name

(nil)

127.0.0.1:6379> select 1

OK

127.0.0.1:6379[1]> get name

"yang"

127.0.0.1:6379[1]>

persist:移除某個key的過期時間

127.0.0.1:6379> set name yangluan

OK

127.0.0.1:6379> expire name 300

(integer) 1

127.0.0.1:6379> ttl age

(integer) -2

127.0.0.1:6379> ttl name

(integer) 291

127.0.0.1:6379> persist name

(integer) 1

127.0.0.1:6379> ttl name

(integer) -1

127.0.0.1:6379> get name

"yangluan"

127.0.0.1:6379>

randomkey命令:隨即返回一個key

127.0.0.1:6379> randomkey

"string1"

127.0.0.1:6379> randomkey

"list1"

127.0.0.1:6379>

rename命令:表示重新命名一個key

127.0.0.1:6379> keys *

1) "name"

2) "string1"

3) "list1"

127.0.0.1:6379> rename list1 list2

OK

127.0.0.1:6379> keys *

1) "list2"

2) "name"

3) "string1"

127.0.0.1:6379>

type命令:返回值的型別

127.0.0.1:6379> type name

string

127.0.0.1:6379> type list2

list

127.0.0.1:6379> type string1

string

127.0.0.1:6379>

(2)伺服器相關命令:

ping命令:
echo命令:列印一個內容

127.0.0.1:6379> echo yangluan

"yangluan"

127.0.0.1:6379>

select命令:選擇資料庫
quit命令:退出命令
dbsize命令:返回當前伺服器中所有key的資料

127.0.0.1:6379> dbsize

(integer) 3

info命令:或者伺服器資訊和統計
config get命令:實時傳儲說道的請求

127.0.0.1:6379> config get dir

1) "dir"

2) "/usr/local/redis/bin"

127.0.0.1:6379>

flushdb命令:刪除當前選擇資料庫的所有key
flushall命令:刪除所有資料庫的所有鍵

redis的高階應用:

(1)安全性:

    設定客戶端連線後進行任何其他執行前需要使用的密碼:redis速度相當快 1s可以暴力嘗試15萬次

vi /usr/local/redis/etc/redis.conf

修改配置檔案:

 #requirepass foobared

變為requirepass yangluan

[[email protected] bin]#/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf

[[email protected] bin]# ./redis-cli

授權方式(1):

127.0.0.1:6379> keys *

(error) NOAUTH Authentication required.

127.0.0.1:6379> auth yangluan

OK

127.0.0.1:6379> keys *

(empty list or set)

127.0.0.1:6379>

授權方式(2):

[[email protected] bin]# ./redis-cli -ayangluan

127.0.0.1:6379> keys *

(empty list or set)

127.0.0.1:6379>

(2)主從複製:

redis主從複製特點:
   1、Master可以擁有多個slave
   2、多個slave可以連線到同一個master外,還可以連線到其他slave
   3、主從複製不會阻塞master,在同步資料是,master可以繼續處理client的請求
   4、提高系統的伸縮性
redis主從複製過程:
   1、slave與matser建立連線,傳送同步sych命令
   2、master會後來啟動一個程序,將資料庫快照儲存到檔案中,同時master主程序會開始收集新的寫命令並快取
   3、後臺完成儲存後,將此檔案傳送給slave
   4、slave將此檔案儲存在硬碟上

(3)配置從伺服器:

         配置slave伺服器很簡單,只需要在slave的配置中加入一些配置檔案:

slaveof192.128.182.128 6379 #指定masterip和埠

 matserauth lamp #這是主機的密碼

     可以使用ifconfigech0 Ip地址修改Ip地址

配置:在Slave上
(1)編輯vi /usr/local/redis/etc/redis.conf
(2)查詢使用/slaveof查詢配置檔案
(3)增加配置檔案

         #slaveof <masterip> <masterport>

         slaveof192.168.182.128 6379

(4)如果主機redis有密碼那麼需要配置

   #masterauth <master-password>

    masterauth yangluan

(5)啟動slave上的redis服務

        [[email protected]]# /usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf

         [[email protected]]# /usr/local/redis/bin/redis-cli

         127.0.0.1:6379>keys *

         (emptylist or set)

         127.0.0.1:6379>

(6)使用info命令檢視當前主機redis的role角色

   Slave上:info

   role:slave

   master_link_status:up

  master上:info

   slave0:ip=192.168.182.129,port=6379,state=online,offset=383,lag=0

(4)事物處理:

     Redis對事物的支援目前還比較簡單。Redis只能保證一個client發起的事務中的命令可以連續的執行,而中間不會拆入client的命令。當一個client在一個連線中發出multi命令時,這個連結會進入一個事務上下文,該連線就緒的命令不會立即執行,而是先放到一個佇列中,當執行exec命令時,redis會順序的執行佇列中的所有命令.

(1)簡單事務處理:

127.0.0.1:6379> get age

"33"

127.0.0.1:6379> multi

OK

127.0.0.1:6379> set age 10

QUEUED

127.0.0.1:6379> set age 20

QUEUED

127.0.0.1:6379> exec

1) OK

name incr

2) OK

127.0.0.1:6379> get age

"20"

127.0.0.1:6379>

(2)取消一個事務discard:

127.0.0.1:6379> get age

"20"

127.0.0.1:6379> multi

OK

127.0.0.1:6379> set age 10

QUEUED

127.0.0.1:6379> set age 100

QUEUED

127.0.0.1:6379> discard

OK

127.0.0.1:6379> get age

"20"

127.0.0.1:6379>

(3)樂觀鎖複雜事務處理:

   同SVN原理:

   watch 監視命令:      exec和discard和unwatch會取消監視命令

(5)持久化機制:

     Redis是一個支援持久化的記憶體資料庫,也就是說reidis需要經常將記憶體中的資料同步到硬碟來保證持久化,目前redis支援兩種持久化方式:

   1snapshotting(快照)也就是預設方式

2Append-only file(縮寫aof)的方式

(1)快照方式

      快照是預設的持久化方式。這種方式是將記憶體中資料以快照的方式寫入到二進位制檔案中,預設的檔名是dump.rdb。可以通過配置設定自動做快照的方式。我們可以配置redis在n秒內如果超過 m個key被修改就自動做快照。

save 900 1 :表示900秒內如果超過1個key被修改,則發起快照儲存

save 300 10:表示300秒內如果超過10個key被修改,則發起快照儲存

save 60 10000

(2)aof方式

    由於快照方式是在一定間隔時間做一次的,所以如果redis意外down掉的話,就會丟失最後一次快照後所有修改。aof比快照方式有更好的持久化性,是由於使用aof時,redis會將每一個收到的寫命令都通過write函式追加到檔案中,當reids重啟時會通過重新執行檔案中儲存的寫命令來在記憶體中重建整個資料庫的內容。

appendonly no改為yes //啟動aof持久化方式

# appendfsync always //收到命令就立即寫入磁碟,效能最慢,但是保證完全的持久化

appendfsync everysec //每秒寫入磁碟一次,在效能和持久化方面做了很好的折中

# appendfsync no //完全依賴os,效能最好,持久化沒保證

(6)釋出與訂閱訊息

    釋出訂閱(pub/sub)是一種訊息通訊模式,主要目的是解除訊息釋出者和訊息訂閱者之間的耦合,Redis作為一個pub/sub的server,在訂閱者和釋出者之間起到了訊息路由的功能。訂閱者可以通過subscribe和psubscibe命令向redis server訂閱自己感興趣的訊息型別,將redis將資訊型別稱為通道。當釋出者通過publish命令向redis server傳送熱定型別的資訊時,訂閱該資訊型別的全部client都會收到此訊息

(7)虛擬記憶體的使用

   Redis的虛擬記憶體與作業系統的虛擬記憶體不是一回事,但是思路和牡蠣都是相同的,就是暫時把不經常訪問的資料記憶體交換到磁碟中,從而騰出寶貴的記憶體空間用於其他需要訪問的資料。尤其是對於redis這樣的記憶體資料庫,記憶體總是不夠用的。除了可以講資料分割到多個redis server外。靈蓋能夠提高資料庫容量的辦法就是使用虛擬記憶體把那些不經常訪問的資料交換到磁碟上。

下面是VM的配置

 vm-enabled yes //開啟VM功能

 vm-swap-file/tmp/redis.swap //交換出來的value儲存的位置

vm-max-memory 100000 //使用redis的最大記憶體上限

vm-page-size 32 //每個頁面的大小32位

vm-pages 134217728 //最多使用多少頁面

vm-max-threads 4 //用於執行valued物件換入的工作執行緒數量


相關推薦

Redis自學筆記整理

Redis的簡介  Redis是完全開源免費的,遵守BSD協議,先進的key -value持久化產品。它通常被稱為資料結構伺服器,因為值(value)可以是字串(String), 雜湊(Map),列表(list),集合(sets)和 有序集合(sorted sets)等型別

Redis自學筆記:3.2入門-字串型別

3.2字串型別 實際上redis不只是資料庫,更多的公司和團隊將redis用作快取和 佇列系統 3.2.1介紹 字串型別是redis最基本的資料型別,它能儲存任何形式的字串, 包括二進位制資料.你可以用其儲存使用者的郵箱、JSON化的物件甚至 是一張圖片. 一個字串型別鍵允許儲存的資料

Redis自學筆記:3.6入門-有序集合型別

3.6有序集合型別 3.6.1介紹 在集合型別基礎上,為集合中每個元素都關聯了一個分數,故可以獲得 分數最高(最低)的前N個元素,可以獲得指定範圍內的元素等 有序集合中每個元素不同,但它們的分數卻可以相同 有序集合和列表相同點: 都是有序的 都可以獲得某一範圍元素 有序集合和列表

Redis自學筆記:4.1進階-事務

第4章:進階 4.1事務 4.1.1概述 redis中的事務是一組命令的集合 事務同命令一樣都是redis的最小執行單位,一個事務中的命令要麼都執行, 要麼都不執行 事務的原理是先將一個事務的命令傳送給redis,然後再讓redis依次執行 這些命令,例如: 127.0.0.1:6379> m

Redis自學筆記:4.3進階-排序

4.3排序 4.3.1有序集合的集合操作 有序集合沒有zinter和zunion命令,使用其他命令實現方法: multi zinterstore tempKey ... zrange tempKey ... del tempKey exec 4.3.2 sort命令 sort key [alpha]

Redis自學筆記:3.3入門-散列類型

偽代碼 header cond 代碼 time 日誌 不執行 散列類型 keys 3.3散列類型 3.3.1介紹 散列類型不能嵌套其他數據類型,一個散列類型可以包含至多232-1個字段 散列類型適合存儲對象:使用對象類別和ID構成鍵名,使用字段表示對象的數據, 而字段值則

Redis自學筆記:5.實踐

offset scores imp 排序 score 重啟 foo diff blpop 第5章實踐 5.3 python與redis 5.3.1安裝 pip install redis 5.3.2使用方法 自己補充內容:Ubuntu下redis開啟遠程連接 打開red

ORACLE部分自學筆記整理

--在命令列解鎖賬戶 --使用下面的語句解鎖scott:  alter user scott account unlock; --解鎖之後可能會要求你該密碼 tiger:  alter user scott identified by tiger;  create

Redis學習筆記(三)常用命令整理

mes ember nbsp end 插入 學習筆記 頻道 hash value Redis 常用命令 1.DEL key 刪除key2.EXISTS key 檢查key是否存在3.KEYS * 查看所有的key4.EXPIRE key seconds 設置key的過期時

Redis筆記整理(一):Redis安裝配置與數據類型操作

數據庫 NoSQL Redis [TOC] Redis筆記整理(一):Redis安裝配置與數據類型操作 Redis簡介 Redis是一個開源(BSD許可),內存存儲的數據結構服務器,可用作數據庫,高速緩存和消息隊列代理。 它支持字符串、哈希表、列表、集合、有序集合,位圖,hyperloglo

Redis筆記整理(二):Java API使用與Redis分布式集群環境搭建

數據庫 NoSQL Redis [TOC] Redis筆記整理(二):Java API使用與Redis分布式集群環境搭建 Redis Java API使用(一):單機版本Redis API使用 Redis的Java API通過Jedis來進行操作,因此首先需要Jedis的第三方庫,因為使用的是M

Redis筆記整理(三):進階操作與高級部分

數據庫 NoSQL Redis [TOC] Redis筆記整理(三):進階操作與高級部分 Redis發布訂閱 Redis發布訂閱(pub/sub)是一種消息通信模式:發送者(pub)發送消息,訂閱者(sub)接收消息。 Redis客戶端可以訂閱任意數量的頻道。 下圖展示了頻道channel1,以

PHP 學習筆記[2] —— 自學PHP 筆記整理

    背景:自學PHP遇到的一些小問題總是很是困擾,不同時間段做一下筆記,方便以後的參考及能力的視覺化...     1.對於資料庫操作的程式碼,可以提取出一個簡單的php檔案 //設定連線 o

Redis學習筆記~Twenproxy所起到的作用

out arm mdb ntp ddd pin alq odi mib 回到目錄 Twenproxy除了可以作為redis的代理,它同樣支持memerycached。我這裏主要了解Twemproxy在redis集群上的解決方案。Twemproxy除了完美的解決了分片,路由

Redis學習筆記3-Redis5個可運行程序命令的使用

運行程序 檢查 mil 數據文件 img usr pre text mod 在redis安裝文章中,說到安裝好redis後,在/usr/local/bin下有5個關於redis的可運行程序。以下關於這5個可運行程序命令的具體說明。 redis-server Redi

Hadoop自學筆記(一)常見Hadoop相關項目一覽

-a https class Lucene 百萬 data fcm you 轉換 本自學筆記來自於Yutube上的視頻Hadoop系列。網址: https://www.youtube.com/watch?v=-TaAVaAwZTs(當中一個) 以後不再贅述 自學筆

webots自學筆記(八)麥克納母輪移動機器人平臺,可控制攝像頭視角

left sad src blog com 例子 好玩 也有 工作量 原創文章,來自“博客園,_阿龍clliu” http://www.cnblogs.com/clliu/,轉載請註明原文章出處。 覺得基礎的東西說的差不多了,之後就分享一些好玩的仿

JavaScript學習筆記整理Day5

數字類型 cal 數組排序 return 函數 屬性 scrip each 第一個 #數組 ##一:數組的定義 1. 數組是值的有序集合 2. 每一個值叫做一個元素 3. 每個元素在數組中都有一個位置,以數字表示,叫做索引。索引從0開始。 ##二:特

JavaScript學習筆記整理Day4

沒有 默認值 函數的調用 -- 復雜 簡潔 day4 打開 nts ##函數 ####函數是一段在一起,可以做某件事的程序。 ###優點:控制程序設計的復雜性 1. 提高軟件的開發可靠性 2. 提高軟件的開發效率 3. 提高軟件的可維護性

Redis學習筆記(一)關於在windows64位環境下的安裝學習使用

客戶端 mas key-value 錯誤 services 再次 基準 alt 類型 前言 由於工作需要,目前我正在學習使用Redis。我當時學習Redis就從網上下載了點資料就開始學習了。入門看的是《REDIS入門指南》,這本書個人覺得很適合新手用來學習接觸。根據書上的引