linux - redis基礎

linux - redis基礎

redis 源碼編譯安裝

1.安裝redis的方式linux

-yum (刪除這個yum安裝的redis,咱們只用源碼編譯安裝的)

-rpm 

-源碼編譯

2.刪除本來的redisredis

yum remove redis -y

3.下載redis源碼數據庫

wget http://download.redis.io/releases/redis-4.0.10.tar.gz

4.解壓縮vim

tar -zxf redis-4.0.10.tar.gz

5.切換redis源碼目錄centos

cd redis-4.0.10.tar.gz

6.編譯源文件安全

make  and make install

編譯好後,src/目錄下有編譯好的redis指令

make install 安裝到指定目錄,

7.默認在/usr/local/bin數據結構

8.指定redis的配置文件 啓動 redisapp

cd /opt/redis -4.0.10/


touch redis-6666.conf  

vim redis-6666.conf

內容以下ui

port 6666       #redis端口

daemonize yes   #後臺運行redis  

pidfile /data/6666/redis.pid    #pid號碼

loglevel notice #日誌等級

logfile "/data/6666/redis.log"    #日誌文件存放路徑

dir /data/6666   #redis數據目錄 (須要手動建立)

requirepass haohaio  #redis的密碼

9.指定配置文件啓動redis服務端

redis-server redis-6666.conf

10.檢查redis的進程,端口

ps -ef |grep redis 

netstat -tunlp |grep redis

11.登陸redis數據庫

redis-cli -p 6666  

登陸後 輸入密碼纔可訪問

auth  haohaio

redis 數據結構

redis是一種高級的key:value存儲系統,其中value支持五種數據類型

  • 字符串(strings)
  • 散列(hashes)
  • 列表(lists)
  • 集合(sets)
  • 有序集合(sorted sets)

基本命令:

keys *         查看全部key
type key      查看key類型
expire key seconds    過時時間
ttl key     查看key過時剩餘時間        -2表示key已經不存在了
persist     取消key的過時時間   -1表示key存在,沒有過時時間

exists key     判斷key存在    存在返回1    不然0
del keys     刪除key    能夠刪除多個
dbsize         計算key的數量

1. strings類型

  • set   設置key
  • get 獲取key
  • append 追加string
  • mset 設置多個鍵值對
  • mget 獲取多個鍵值對
  • del 刪除key
  • incr 遞增+1
  • decr 遞減-1

    127.0.0.1:6379> set name 'yu'   #設置key
      OK
      127.0.0.1:6379> get name    #獲取value
      "yu"
      127.0.0.1:6379> set name 'yuchao'  #覆蓋key
      OK
      127.0.0.1:6379> get name    #獲取value
      "yuchao"
      127.0.0.1:6379> append name ' dsb'   #追加key的string
      (integer) 10
      127.0.0.1:6379> get name  #獲取value
      "yuchao dsb"
      127.0.0.1:6379> mset user1 'alex' user2 'xiaopeiqi'    #設置多個鍵值對
      OK
      127.0.0.1:6379> get user1    #獲取value
      "alex"
      127.0.0.1:6379> get user2    #獲取value
      "xiaopeiqi"
      127.0.0.1:6379> keys *      #找到全部key
      1) "user2"
      2) "name"
      3) "user1"
    
      127.0.0.1:6379> mget user1 user2 name   #獲取多個value
      1) "alex"
      2) "xiaopeiqi"
      3) "yuchao dsb"
      127.0.0.1:6379> del name        #刪除key
      (integer) 1
      127.0.0.1:6379> get name        #獲取不存在的value,爲nil
      (nil)
      127.0.0.1:6379> set num 10    #string類型實際上不單單包括字符串類型,還包括整型,浮點型。redis可對整個字符串或字符串一部分進行操做,而對於整型/浮點型可進行自增、自減操做。
      OK    
      127.0.0.1:6379> get num
      "10"
      127.0.0.1:6379> incr num    #給num string 加一 INCR 命令將字符串值解析成整型,將其加一,最後將結果保存爲新的字符串值,能夠用做計數器
      (integer) 11
      127.0.0.1:6379> get num  
      "11"
    
      127.0.0.1:6379> decr num      #遞減1  
      (integer) 10
      127.0.0.1:6379> decr num    #遞減1
      (integer) 9
      127.0.0.1:6379> get num

2. list 類型

  • lpush 從列表左邊插
  • rpush 從列表右邊插
  • lrange 獲取必定長度的元素 lrange key start stop
  • ltrim 截取必定長度列表
  • lpop 刪除最左邊一個元素
  • rpop 刪除最右邊一個元素
  • lpushx/rpushx key存在則添加值,不存在不處理

    lpush duilie 'alex' 'peiqi' 'ritian'  #新建一個duilie,從左邊放入三個元素
    
      llen duilie  #查看duilie長度
    
      lrange duilie 0 -1  #查看duilie全部元素
    
      rpush duilie 'chaoge'   #從右邊插入chaoge
    
      lpushx duilie2  'dsb'  #key存在則添加 dsb元素,key不存在則不做處理
    
      ltrim duilie 0 2  #截取隊列的值,從索引0取到2,刪除其他的元素
    
      lpop #刪除左邊的第一個
      rpop #刪除右邊的第一個

3. sets集合類型

redis的集合,是一種無序的集合,集合中的元素沒有前後順序。

集合相關的操做也很豐富,如添加新元素、刪除已有元素、取交集、取並集、取差集等。咱們來看例子:

  • sadd/srem 添加/刪除 元素
  • sismember 判斷是否爲set的一個元素
  • smembers 返回集合全部的成員
  • sdiff 返回一個集合和其餘集合的差別
  • sinter 返回幾個集合的交集
  • sunion 返回幾個集合的並集

    sadd zoo  wupeiqi yuanhao  #添加集合,有三個元素,不加引號就當作字符串處理
    
      smembers zoo  #查看集合zoo成員
    
      srem zoo  wupeiqi #刪除zoo裏面的alex
    
      sismember zoo wupeiqi  #返回改是不是zoo的成員信息,不存在返回0,存在返回1
    
      sadd zoo wupeiqi   #再把wupeiqi加入zoo
    
      smembers zoo  #查看zoo成員
    
      sadd zoo2 wupeiqi mjj #添加新集合zoo2
    
      sdiff zoo zoo2 #找出集合zoo中有的,而zoo2中沒有的元素
    
      sdiff zoo2  zoo  #找出zoo2中有,而zoo沒有的元素
    
      sinter zoo zoo1   #找出zoo和zoo1的交集,都有的元素
    
      sunion  zoo zoo1  #找出zoo和zoo1的並集,全部的不重複的元素

有序集合

都是以z開頭的命令

用來保存須要排序的數據,例如排行榜,成績,工資等。

利用有序集合的排序,排序學生的成績

127.0.0.1:6379> ZADD mid_test 70 "alex"
(integer) 1
127.0.0.1:6379> ZADD mid_test 80 "wusir"
(integer) 1
127.0.0.1:6379> ZADD mid_test 99 "yuyu"

排行榜,zreverange 倒敘 zrange正序

127.0.0.1:6379> ZREVRANGE mid_test 0 -1 withscores
1) "yuyu"
2) "99"
3) "wusir"
4) "80"
5) "xiaofneg"
6) "75"
7) "alex"
8) "70"
127.0.0.1:6379> ZRANGE mid_test 0 -1 withscores
1) "alex"
2) "70"
3) "xiaofneg"
4) "75"
5) "wusir"
6) "80"
7) "yuyu"
8) "99"

移除有序集合mid_test中的成員,xiaofeng給移除掉

127.0.0.1:6379> ZREM mid_test xiaofneg
(integer) 1
127.0.0.1:6379> ZRANGE mid_test 0 -1 withscores
1) "alex"
2) "70"
3) "wusir"
4) "80"
5) "yuyu"
6) "99"

返回有序集合mid_test的基數

127.0.0.1:6379> ZCARD mid_test
(integer) 3
返回成員的score值

127.0.0.1:6379> ZSCORE mid_test alex
"70"

zrank返回有序集合中,成員的排名。默認按score,從小到大排序。

127.0.0.1:6379> ZRANGE mid_test 0 -1 withscores
1) "alex"
2) "70"
3) "wusir"
4) "80"
5) "yuyu"
6) "99"
127.0.0.1:6379>
127.0.0.1:6379>
127.0.0.1:6379> ZRANK mid_test wusir
(integer) 1
127.0.0.1:6379> ZRANK mid_test yuyu
(integer) 2

5. 哈希數據結構

哈希結構就是 k1 -> k1 : v1 如同字典 套字典 { k1 : { k2: v2 } } ,取出v2 必須 k1,取出k2

hashes即哈希。哈希是從redis-2.0.0版本以後纔有的數據結構。

hashes存的是字符串和字符串值之間的映射,好比一個用戶要存儲其全名、姓氏、年齡等等,就很適合使用哈希。

  • hset 設置散列值
  • hget 獲取散列值
  • hmset 設置多對散列值
  • hmget 獲取多對散列值
  • hsetnx 若是散列已經存在,則不設置(防止覆蓋key)
  • hkeys 返回全部keys
  • hvals 返回全部values
  • hlen 返回散列包含域(field)的數量
  • hdel 刪除散列指定的域(field)
  • hexists 判斷是否存在

    redis hash是一個string類型的field和value的映射表
    
      語法  hset key field value  
    
      hset news:1   title "first news title" #設置第一條新聞 news的id爲1,添加數據title的值是"first news title"
    
      hset news:1 content "news content"    #添加一個conntent內容
    
      hget news:1 title   #獲取news:1的標題
    
      hget news:1  content  #獲取news的內容
    
      hmget news:1  title content   #獲取多對news:1的 值
    
      hmset news:2 title "second news title" content "second Contents2"   #設置第二條新聞news:2 多個field
    
      hmget news:2 title  content #獲取news:2的多個值
    
      hkeys news:1   #獲取新聞news:1的全部key
    
      hvals news:1   #獲取新聞news:1的全部值
    
      hlen news:1    #獲取新聞news:1的長度
    
      hdel news:1 title   #刪除新聞news:1的title
    
      hlen news:1     #看下新聞news:1的長度
    
      hexists news:1 title    #判斷新聞1中是否有title,不存在返回0,存在返回1

centos下redis安全相關

咱們在使用redis時候,最好更改默認端口,而且使用redis密碼登陸。

(1)redis沒有用戶概念,redis只有密碼
(2)redis默認在工做在保護模式下。不容許遠程任何用戶登陸的(protected-mode)

redis.conf設置

protected-mode yes   #打開保護模式
port 6380  #更改默認啓動端口
requirepass xxxxxx   #設置redis啓動密碼,xxxx是自定義的密碼

啓動redis服務端

redis-server /opt/redis-4.0.10/redis.conf &     #指定配置文件啓動redis,且後臺啓動

使用密碼登陸redis,使用6380端口

方法1,使用這個

[root@oldboy_python ~ 09:48:41]#redis-cli -p 6380
127.0.0.1:6380> auth xxxx
OK

方法2,此方案不安全,容易暴露密碼

[root@oldboy_python ~ 09:49:46]#redis-cli -p 6380 -a xxxx
Warning: Using a password with '-a' option on the command line interface may not be safe.
127.0.0.1:6380> ping
PONG

補充

檢查redis是否設置了密碼

127.0.0.1:6380> CONFIG get requirepass
1) "requirepass"
2) "xxxxxx"

若是沒有,也能夠給redis設置密碼(命令方式)

CONFIG set requirepass "xxxxxx"
相關文章
相關標籤/搜索