redis安裝使用(二)

Redis學習

楔子

redis學習筆記。

1 Redis快速入門

Redis是一個Key-value存儲系統,和Memcached類似,它支持存儲的value類型相對更多,包括string(字符串)、list(鏈表)、set(集合)和zset(有序集合).這些數據類型都支持push/pop、add/remove及取交集並集和差集以及更豐富的操作,而且這些操作都是原子性的,再次基礎上,redis支持不同方式的排序,與memacched一樣,爲了保證效率,數據都是緩存在內存中,區別是redis會週期性的把更新的數據寫入磁盤或者把修改操作寫入追加的記錄文件,並且在此基礎上實現了master-slave(主從)同步。

1.3.1 數據類型

作爲key-value類型數據庫,Redis也提供了鍵和鍵值(value)的映射關係,但是除了常規的數值或字符串,Redis的鍵值還可以是以下形式。

  • List 列表
  • Sets 集合
  • Sorted sets 有序集合
  • Hashes 哈希表

鍵值的數據類型決定了該鍵值支持的操作。Redis支持諸如列表、集合和有序集合的交集、並集、差集等高級原子操作,同時,如果鍵值的類型是普通數字,Redis則提供了自增等原子操作。

1.3.6 適用場合

1 取最新N個數據的操作

2 排行榜應用,取top N操作

這是以某個條件爲權重,比如按次數排序,可以使用sorted set,將要排序的值設置成sorted set的score,將具體的數據設置成value, 只需執行一次ZADD即可

3 需要精準設定過期的時間的應用

4 計數器應用

Redis的命令都是原子性的,可以使用incr decr命令來構建計數器系統。

5 uniq操作

使用Redis的set數據結構最合適了,只需要不斷地將數據往set中扔就行了。set會自動排重。

2 數據類型以及操作

2.2 string類型以及操作

string類型是二進制安全的。可以包含任何數據,比如JPG圖片或者序列化的對象。從nebula實現來看strin可以看做byte數組,最大上限1G字節。

2.2.1 set

27.0.0.1:6379> set name CN
OK
127.0.0.1:6379> 

2.2.2 setnx

如果之前的key有一個值,本次修改不生效

127.0.0.1:6379> setnx name dou
(integer) 0

2.2.3 setex|設置鍵值有效期

設置鍵值對的有效期

設置 key:value 有效期爲10秒
127.0.0.1:6379> setex key 10 value
OK
127.0.0.1:6379> get key
"value"

2.2.4 setrange|設置key的value值得子字符串

127.0.0.1:6379> set mail [email protected]
OK
127.0.0.1:6379> setrange mail 3 qq.com
(integer) 10
127.0.0.1:6379> get mail
"[email protected]"

2.2.5 mset

一次設置多個key的值,成功返回OK表示所有值都設置了,失敗返回0表示沒有任何值被設置。

127.0.0.1:6379> mset name1 v1 name2 v2 namee3 v3
OK

2.2.6 msetnx

與上述相同,但不會覆蓋已存在的key,如果返回0表示操作都會回滾,都不被執行。

2.2.7 get

2.2.8 getset|設置key的值,並返回key的舊值

127.0.0.1:6379> get name
"v1"
127.0.0.1:6379> getset name v2
"v1"
127.0.0.1:6379> get name
"v2"
127.0.0.1:6379> 

2.2.9 getrange|獲取指定key的value值得子字符串

127.0.0.1:6379> get mail
"[email protected]"
127.0.0.1:6379> getrange mail 0 3
"my@q"
#字符串下標是從0開始的
127.0.0.1:6379> getrange mail -5 -1
".comm"

#當下標超出字符串長度時,默認行爲是同方向的最大下標
127.0.0.1:6379> getrange mail 3 100
"qq.comm"
127.0.0.1:6379> 

2.2.10 mget

一次獲取多個key的值,如果key不存在,返回nil

2.2.11 incr|incrby

對key的值做加加操作,如果int的值不是value會返回錯誤。

2.2.12 decr |decrby

2.2.13 append 給指定key的字符串追加value,返回新字符串值得長度

2.3 hashes類型和操作

Redis hash是一個string類型的field和value的映射表,它的添加、刪除操作都是O(1)平均。

hash特別適合用於存儲對象。相對於將對象的每個字段存成單個string類型,將一個對象存儲在hash類型中會佔用更少的內存,並且可以更方便的存取整個對象。省內存的原因是新建一個hash對象時開始使用zipmap來存儲,

2.3.1 hset|hsetnx(如果字段存在返回0)

127.0.0.1:6379> hset myhash field1 hello
(integer) 1

2.3.2 hmset|同時設置多個field

127.0.0.1:6379> hmset myhash f1 v1 f2 v3

2.3.3 hget|獲取指定的hash field

2.3.5 hmget|獲取全部指定的hash field

2.3.6 hincrby

指定的hash field加上給定值

127.0.0.1:6379> hset myhash age 20
(integer) 1
127.0.0.1:6379> hget myhash age
"20"
127.0.0.1:6379> hincrby myhash age 8
(integer) 28
127.0.0.1:6379> hget myhash age
"28"

2.3.7 hexists

測試指定field是否存在

127.0.0.1:6379> hexists myhash name
(integer) 0
127.0.0.1:6379> hexists myhash age
(integer) 1

返回1 表示存在

2.3.8 hlen

返回指定hash的field數量

2.3.9 hkeys |返回hash的所有field|hvals 返回所有value

2.3.10 hgetall|獲取某個hash全部的key value

2.4 list類型及操作

list是鏈表結構,主要功能是push pop獲取一個範圍的所有值等,操作中key理解爲鏈表的名字。

Redis的list類型其實就是每一個子元素都是string類型的雙向鏈表。鏈表的最大長度是(2的32次方)。可以通過push pop操作鏈表的頭部或尾部添加刪除元素。使得list即可用作棧,也有用作隊列。

2.4.1 lpush|頭部添加元素

在key對應的list開頭添加字符串元素

127.0.0.1:6379> lpush mylist world hello rdis
(integer) 3
127.0.0.1:6379> lrange mylist 0 -1
1) "rdis"
2) "hello"
3) "world"
127.0.0.1:6379> 

2.4.2 rpush|尾部添加元素

127.0.0.1:6379> rpush mylist go

2.4.3 linsert|在特定位置之前或之後插入字符串元素

127.0.0.1:6379> lrange mylist 0 -1
1) "rdis"
2) "hello"
3) "world"
4) "go"
5) "hello"
127.0.0.1:6379> linsert mylist before hello there
(integer) 6
127.0.0.1:6379> lrange mylist 0 -1
1) "rdis"
2) "there"
3) "hello"
4) "world"
5) "go"
6) "hello"
127.0.0.1:6379> 

2.4.4 lset|設置list中指定下標的元素值

127.0.0.1:6379> lrange mylist2 0 -1
1) "one"
2) "tow"
3) "three"
4) "four"
127.0.0.1:6379> lset mylist2 0 go
OK
127.0.0.1:6379> lset mylist2 -2 goland
OK
127.0.0.1:6379> lrange mylist2 0 -1
1) "go"
2) "tow"
3) "goland"
4) "four"
127.0.0.1:6379> 

2.4.5 lrem

從list中刪除count個和value相同的元素

127.0.0.1:6379> lrange myl5 0 -1
1) "hello"
2) "hello"
3) "hello"
4) "hello"
5) "hello"
127.0.0.1:6379> lrem myl5 4  hello
(integer) 4
127.0.0.1:6379> lrange myl5 0 -1
1) "hello"
127.0.0.1:6379> 

如果count=0 全部刪除,小於0按從尾到頭的順序刪除

2.4.6 ltrim

保留指定key的值範圍內的數據

2.4.7 lpop|rpop從頭部(尾部)刪除並返回

2.4.8 llen|獲取list的長度

2.5 set類型以及操作

set是集合,對集合的操作有刪除添加,對多個集合求交併差等操作。

通過集合的並集 交集 差集 可以實現好友推薦和blog的tag功能。

2.5.1 sadd

127.0.0.1:6379> sadd myset hello
(integer) 1
127.0.0.1:6379> sadd myset world
(integer) 1
127.0.0.1:6379> sadd myset world
(integer) 0
127.0.0.1:6379> smembers myset
1) "hello"
2) "world"
127.0.0.1:6379> 

2.5.2 srem|刪除名稱爲key的set中的元素member

127.0.0.1:6379> srem myset hello
(integer) 1
#沒有元素是 返回0
127.0.0.1:6379> srem myset hello
(integer) 0

2.5.3 spop|隨機刪除並返回其中一個元素

2.5.4 sdiff|返回給定key與第一個key的差集

3 Redis常用命令

3.1 鍵值相關命令

3.1.1 keys

#返回所有key
keys *
#返回所有mylist開頭的key
keys mylist*

3.1.2 exists|確定一個key是否存在

3.1.3 del

3.1.4 expire|設置一個key的過期時間

3.1.5 move

將key移動到指定數據庫

3.1.6 rename

重命名key

3.1.7 type 返回值得類型

3.2 服務器相關命令

3.2.1 ping|測試連接是否存活

3.2.2 echo|在命令行打印一些內容

3.2.3 quit|退出連接

3.2.4 dbsize 返回當前數據庫中key的數目

3.2.5 info|獲取服務器相關信息和統計

3.2.6 config get|獲取服務器配置信息

127.0.0.1:6379[2]> config get dir
1) "dir"
2) "/var/lib/redis"
127.0.0.1:6379[2]> 

3.2.7 flushdb刪除當前選擇數據庫中的所有key

3.2.8 flushall 刪除所有數據庫中的所有key

Redis 啓動停止

## 啓動redis-server,後臺線程
$ redis-server /usr/local/redis/etc/redis.conf 
## 啓動成功
$ ps axu|grep redis
shoren           14948   0.0  0.0  2434840    760 s000  S+   10:18上午   0:00.00 grep redis
shoren           14946   0.0  0.0  2452968   1492   ??  Ss   10:18上午   0:00.01 redis-server *:6379 
## 關閉服務器
$ redis-cli shutdown
##關閉成功
$ ps axu|grep redis
shoren           14952   0.0  0.0  2435864    772 s000  S+   10:19上午   0:00.01 grep redis

Redis生產環境配置

https://blog.csdn.net/min996358312/article/details/59247721

https://www.jianshu.com/p/8ce453340828

其他資料

Redis 命令參考

Redis 命令參考

Redis key設計

https://blog.csdn.net/babykakaluo/article/details/9822381

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章