redis詳細介紹附實例代碼--看一篇就夠了


自己開發了一個股票智能分析軟件,功能很強大,需要的點擊下面的鏈接獲取:

https://www.cnblogs.com/bclshuai/p/11380657.html

redis介紹詳解附實例代碼--看一篇就夠了

 

目錄

1      簡介... 1

1.1     概述... 1

1.2     特點... 1

1.3     應用場景... 2

2      Redis的數據類型及主要特性... 2

3      redis命令行操作... 3

3.1     服務器操作... 3

3.2     String字符串操作... 4

3.3     列表操作... 4

3.4     set集合的操作... 6

3.5     hash哈希操作... 7

3.6     發布/訂閱操作... 8

4      redis代碼實例... 9

4.1     Python 操作 redis代碼實例... 9

4.2     java代碼實例... 11

 

 

1       簡介

1.1  概述

redis是基於內存的數據庫,redis是一個使用ANSI C編寫的開源、包含多種數據結構、支持網絡、基於內存、可選持久性的鍵值對存儲數據庫。用於高並發、快速訪問的應用場景。因為關系型數據的瓶頸一般是在磁盤的I/O上。

1.2  特點

  • 高並發:基於內存運行,性能高效,支持高並發。
  • 分布式:支持分布式,理論上可以無限擴展
  • 類型豐富:key-value存儲系統,支持多種數據類型
  • 通用化:開源的使用ANSI C語言編寫、遵守BSD協議、支持網絡、可基於內存亦可持久化的日志型、Key-Value數據庫,並提供多種語言的API
  • 可持久化,可以將內存中的數據定時同步到磁盤中。

1.3  應用場景

(1)    消息緩存服務器,通過訂閱和發布的方式傳遞消息。

(2)    內存數據庫,存儲一些需要快速訪問的數據,低延時高並發。緩存系統(“熱點”數據:高頻讀、低頻寫)、計數器、消息隊列系統、排行榜、社交網絡和實時系統。

 

 

 

2       Redis的數據類型及主要特性

Redis提供的數據類型主要分為5種自有類型和一種自定義類型,這5種自有類型包括:String類型、哈希map類型、list列表類型、set集合類型和zset順序集合類型。redis是一個服務,打開cmd,通過redis-cli.exe -h 127.0.0.1 -p 6379命令連接服務器,然后通過命令行命令往redis內寫數據和讀數據。

redis可以作為一個內存數據庫。redis也可以當作一個消息緩存服務器,通過訂閱和發布的方式傳遞消息。

 

 

 

類型

簡介

命令

String

它是一個二進制安全的字符串,意味着它不僅能夠存儲字符串、還能存儲圖片、視頻等多種類型, 最大長度支持512M。

  • GET/MGET
  • SET/SETEX/MSET/MSETNX
  • INCR/DECR
  • GETSET
  • DEL

 

Hash

該類型是由field和關聯的value組成的map。其中,field和value都是字符串類型的。

  • HGET/HMGET/HGETALL
  • HSET/HMSET/HSETNX
  • HEXISTS/HLEN
  • HKEYS/HDEL
  • HVALS

List

該類型是一個插入順序排序的字符串元素集合, 基於雙鏈表實現。

  • LPUSH/LPUSHX/LPOP/RPUSH
  • /RPUSHX/RPOP/LINSERT/LSET
  • LINDEX/LRANGE
  • LLEN/LTRIM

Set

Set類型是一種無順序集合, 它和List類型最大的區別是:集合中的元素沒有順序, 且元素是唯一的。底層是通過哈希表實現的。

  • SADD/SPOP/SMOVE/SCARD
  • SINTER/SDIFF
  • /SDIFFSTORE/SUNION

 

Sorted set

ZSet是一種有序集合類型,每個元素都會關聯一個double類型的分數權值,通過這個權值來為集合中的成員進行從小到大的排序。與Set類型一樣,其底層也是通過哈希表實現的

  • ZADD/ZPOP/ZMOVE/
  • ZCARD/ZCOUNT
  • ZINTER/ZDIFF/
  • ZDIFFSTORE/ZUNION

 

 

3       redis命令行操作

3.1  服務器操作

(1)啟動redis

1

sudo service redis-server start

(2)連接上redis-server

1

redis-cli -h [ip] -p [端口]

 

3.2  String字符串操作

(1)添加

1

2

3

set key value

  如:

set username xiaotuo

  將字符串值value關聯到key。如果key已經持有其他值,set命令就覆寫舊值,無視其類型。並且默認的過期時間是永久,即永遠不會過期。

(2)刪除

1

2

3

del key

如:

del username

(3) 設置過期時間

1

expire key timeout(單位為秒)

(4)查看過期時間

1

2

3

ttl key

如:

ttl username

(5)查看當前redis中的所有key

1

keys *

 

3.3  列表操作

(1)在列表左邊添加元素:lpush key value

  • 將值value插入到列表key的表頭。如果key不存在,一個空列表會被創建並執行lpush操作。當key存在但不是列表類型時,將返回一個錯誤。

(2)在列表右邊添加元素:rpush key value

  • 將值value插入到列表key的表尾。如果key不存在,一個空列表會被創建並執行RPUSH操作。當key存在但不是列表類型時,返回一個錯誤。

(3)查看列表中的元素:lrange key start stop

  • 返回列表key中指定區間內的元素,區間以偏移量start和stop指定,如果要左邊的第一個到最后的一個lrange key 0 -1。

(4)移除列表中的元素

  • 移除並返回列表key的頭元素:lpop key
  • 移除並返回列表的尾元素:rpop key
  • 移除並返回列表key的中間元素:lrem key count value
    • 將刪除key這個列表中,count個值為value的元素

(5)指定返回第幾個元素:lindex key index

  • 將返回key這個列表中,索引為index的這個元素。
  • 獲取列表中的元素個數

1

2

3

llen key

如:

llen languages

  • 刪除指定的元素

1

2

3

lrem key count value

如:

lrem languages 0 php

  根據參數 count 的值,移除列表中與參數 value 相等的元素。count的值可以是以下幾種

  •  
  • count > 0:從表頭開始向表尾搜索,移除與value相等的元素,數量為count
  • count < 0:從表尾開始向表頭搜索,移除與 value相等的元素,數量為count的絕對值
  • count = 0:移除表中所有與value 相等的值
  • 添加元素

3.4  set集合的操作 

1

2

3

sadd set value1 value2....

如:

sadd team xiaotuo datuo

  • 查看元素

1

2

3

smembeers set

如:

smembers team

  • 移除元素

1

2

3

srem set member...

如:

srem team xiaotuo datuo

  • 查看集合中的元素個數

1

2

3

scard set

如:

scard team1

  • 獲取多個集合的交集

1

2

3

sinter set1 set2

如:

sinter team1 team2

  • 獲取多個集合的並集

1

2

3

sunion set1 set2

如:

sunion team1 team2

  • 獲取多個集合的差集

1

2

3

sdiff set1 set2

如:

sdiff team1 team2

 

3.5  hash哈希操作 

  • 添加一個新值

1

2

3

hset key field value

如:

hset website baidu baidu.com

  將哈希表key中的域field的值設為value。
如果key不存在,一個新的哈希表被創建並進行 HSET操作。如果域 field已經存在於哈希表中,舊值將被覆蓋。

  • 獲取哈希中的field對應的值

1

2

3

hget key field

如:

hget website baidu

  • 刪除field中的某個field

1

2

3

hdel key field

如:

hdel website baidu

  • 獲取某個哈希中所有的field和value

1

2

3

hgetall key

如:

hgetall website

  • 獲取某個哈希中所有的field

1

2

3

hkeys key

如:

hkeys website

  • 獲取某個哈希中所有的值

1

2

3

hvals key

如:

hvals website

  • 判斷哈希中是否存在某個field

1

2

3

hexists key field

如:

hexists website baidu

  • 獲取哈希中總共的鍵值對

1

2

3

hlen field

如:

hlen website

 

3.6   發布/訂閱操作

  • 給某個頻道發布消息

1

publish channel message

  • 訂閱某個頻道的消息

1

subscribe channel

 

4       redis代碼實例

4.1  Python 操作 redis代碼實例

  • 安裝python-redis:pip install redis
  • 新建一個文件比如redis_test.py,然后初始化一個redis實例變量,並且在ubuntu虛擬機中開啟redis。比如虛擬機的ip地址為192.168.174.130。示例代碼如下:

1

2

3

4

# 從redis包中導入Redis類

from redis import Redis

# 初始化redis實例變量

xtredis = Redis(host='192.168.174.130',port=6379)

  • 對字符串的操作:操作redis的方法名稱,跟之前使用redis-cli一樣,現就一些常用的來做個簡單介紹,示例代碼如下(承接以上的代碼)

1

2

3

4

5

6

7

8

9

10

11

# 添加一個值進去,並且設置過期時間為60秒,如果不設置,則永遠不會過期

xtredis.set('username','xiaotuo',ex=60)

# 獲取一個值

xtredis.get('username')

# 刪除一個值

xtredis.delete('username')

# 給某個值自增1

xtredis.set('read_count',1)

xtredis.incr('read_count')  # 這時候read_count變為2

# 給某個值減少1

xtredis.decr('read_count') # 這時候read_count變為1

  • 對列表的操作:同字符串操作,所有方法的名稱跟使用redis-cli操作是一樣的:

1

2

3

4

5

6

7

8

9

10

# 給languages這個列表往左邊添加一個python

xtredis.lpush('languages','python')

# 給languages這個列表往左邊添加一個php

xtredis.lpush('languages','php')

# 給languages這個列表往左邊添加一個javascript

xtredis.lpush('languages','javascript')

 

# 獲取languages這個列表中的所有值

print xtredis.lrange('languages',0,-1)

> ['javascript','php','python']

  • 對集合的操作:

1

2

3

4

5

6

7

8

9

10

# 給集合team添加一個元素xiaotuo

xtredis.sadd('team','xiaotuo')

# 給集合team添加一個元素datuo

xtredis.sadd('team','datuo')

# 給集合team添加一個元素slice

xtredis.sadd('team','slice')

 

# 獲取集合中的所有元素

xtredis.smembers('team')

> ['datuo','xiaotuo','slice'] # 無序的

  • 對哈希(hash)的操作:

1

2

3

4

5

6

7

8

# 給website這個哈希中添加baidu

xtredis.hset('website','baidu','baidu.com')

# 給website這個哈希中添加google

xtredis.hset('website','google','google.com')

 

# 獲取website這個哈希中的所有值

print xtredis.hgetall('website')

> {"baidu":"baidu.com","google":"google.com"}

  • 事務(管道)操作:redis支持事務操作,也即一些操作只有統一完成,才能算完成。否則都執行失敗,用python操作redis也是非常簡單,示例代碼如下:

1

2

3

4

5

6

7

8

# 定義一個管道實例

pip = xtredis.pipeline()

# 做第一步操作,給BankA自增長1

pip.incr('BankA')

# 做第二步操作,給BankB自減少1

pip.desc('BankB')

# 執行事務

pip.execute()

 

 

4.2  java代碼實例

https://www.jianshu.com/p/5596c3a4978d

 

 

參考文獻

https://www.cnblogs.com/renshaoqi/p/10617238.html

https://www.cnblogs.com/powertoolsteam/p/redis.html

https://www.jianshu.com/p/5596c3a4978d

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM