1. 程式人生 > >No-sql之redis常用命令

No-sql之redis常用命令

ucc container per coo xxx pivot orm article repl

轉自:http://blog.csdn.net/nicewuranran/article/details/51793760

No-SQL之Redis


介紹

Redis是一種基於內存存儲的key-value高性能存儲系統,類似memcached,但是redis支持豐富的數據結構類型,並且其還支持數據持久化到磁盤。

Redis is a data structure server. It is open-source, networked, 
in-memory, and stores keys with optional durability. The 
development of Redis has been sponsored by Redis Labs since June
2015. Before that, it was sponsored by Pivotal Software and 
by VMware. According to the monthly ranking by DB-Engines.com, 
Redis is the most popular key-value database. Redis has also 
been ranked the #1 NoSQL (and #4 database) in User Satisfaction
and Market Presence based on user reviews, the most popular 
NoSQL database in containers, and the #1 NoSQL among Top 50 
Developer Tools & Services. The name Redis means REmote 
DIctionary Server.

備註:

NO-SQL(特指key-value型)數據庫其實是比較簡單的,和傳統關系型數據庫相
比,其學習成本是非常低的,但是學習其收獲遠大於學習成本,所以應該花點時
間好好學些。NO-SQL數據庫本身並不難,它們的難點在於清楚它們的應用場
景,知道什麽時候使用NO-SQL能得到最大的益處。

Redis常用命令

我覺得最好用的命令是

help command
參考redis官網:http://redis.io

Connection命令

select index(change the selected database for current connection,index從0開始的整數.)//重點掌握
quit (close the connection)//重點掌握
auth password(authenticate to the server)
echo message(echo the given string)
ping [message](ping the server,this command is often used to test if a connection is still alive,是一條測試連通性命令)//了解

Server 命令

info [section] (get information and statistics about the server)//重點掌握
client list(get the list of client connections)//掌握
dbsize (return the number of keys in the selected database)//掌握
flushall (remove all keys form all databases)//掌握慎用
flushdb (remove all key from the current database)//掌握慎用
role (return the role of the instance in the context of replication)//掌握了解
save (Synchronously save the dataset to disk)//掌握
slaveof host port (make the server a slave of another instance,or promote it as master)//掌握了解
bgrewriteaof(Asynchronously rewrite the append-only file)
bgsave(Asynchronously save the database to disk)
client setname(set the current connection name)
client getname(get the current connection name)
client pause timeout(stop processing commands from clients for some time)
client reply on|off|skip(instruct the server whether to reply to commands)
command (get array of Redis command details)
command count (get total number of Redis commands)
command getkeys (Extract keys given a fullRedis command)
command info command-name[command-name...](get array of specifi Redis command details)
config get parameter (get the value of a configuration parameter)
config rewrite(rewrite the configuration file with the in memory configuration)
config set parameter (set a configuration parameter to the give value)
config resetstat (reset the stats returned by info)
debug object key (get debugging information about a key)
debug segfault (make the server crash)
lastsave (get the unix timestamp of the last successful save to disk)
monitor (listen for all requests received by server in real time)
shutdown [nosave|save] (Synchronously save dataset to disk and then shut down the server)
slowlog subcommand [argument] (manages the redis slow queres log)
sync (internal command used for repliation)
time (return the currect server time)

keys 命令

del key [key...] (delete a key or some keys)//重點掌握
exists key [key ...] ( determine if a key exists)//重點掌握
expire key seconds (set a key‘s time to live in seconds)//重點掌握
persist key (remove the expiration form a key)//重點掌握
randomkey (return a random key from the keyspace)//重點掌握
rename key newkey (rename a key)//重點掌握
keys pattern (find all keys matching the given pattern)//重點掌握
ttl key (get the time to live for a key)//重點掌握
type key (determine the type stored at key)//重點掌握
expireat key timestatmp (set the expiration for a key as a unix timestatmp)//重點掌握
sort key [by pattern][limit offset count] //TODO  待研究 (sort the elements in a list,set or sorted set)//重點掌握
move key db (move a key to another database)//了解
migreate //TODO 待理解和使用
object subcommand [argument[argument...]] (inspect the internals of Redis objects)
pexpire key milliseconds (set a key‘s time to live in milliseconds)
pexpireat key milliseconds (set the expiration for a key as a unix time specified in milliseconds)
ptll key (get the time to live for a key in milliseconds)
renamenx key newkey (rename a key,only if the new key does not exist)
restore key ttl serialized-value [replace] (create a key using the provided serialized value, previously obtained using dum)
wait numslaves timeout (wait for the Synchronous replication of all the write commands sent in the context of the current connection)
scan cursor [match pattern] [count count] (incrementally iterate the keys space)
dump key (return a serialized verison of the value stored at the specified eky)

String數據類型相關命令

append key value (append a value to a key)//重點掌握
set key value [EX seconds] [PX milliseconds] [NX|XX] (set the string value of a key)
setex key seconds vlaue (set the value and expiration of a key)//重點掌握
setnx key value (set the value of a key ,only if the key does not exist)//重點掌握
get key (get the value of a key)//重點掌握
getset key value (set the string value of a key and return its old value)//掌握了解
mset key value[key value ...] (set multiple keys to multiple values)//重點掌握
msetnx key value [key value ...] (set multiple keys to multiple values,only if none of the keys exist)//重點掌握
mget key[key ...] (get the values of all the given keys)//重點掌握
strlen key (get the length of the value stored in a key)//重點掌握
incr key (increment the integer value of a key by one)//重點掌握
incr key increment (increment the integer value of a key by the given increment)//重點掌握
decr key (decrement the integer value of a key by one)//重點掌握
decrby key decrement (decrement the integer value of a key by the given decrement)//重點掌握
getrange key start end (get a sbustring of the string stored at a key)
setrange key offset value (overwrite part of a string at key starting at the specified offset)
incrbyfloat key increment (increment the float value of a key by the given increment)
psetex key milliseconds value (set the value and expiration in milliseconds of a key)

總結:string類型的數據結構主要操作就是賦值和取值操作,以及賦值時設置失效
時間。redis裏面的大部分操作的時間復雜度都是O(1),因為redis存儲數據時是
先計算key的hash碼根據這個碼值來存儲的。

Hash數據結構相關命令

hset key field value (set the string value of a hash field)//重點掌握
hget key field (get the value of a hash field)//重點掌握
hmset key field value [field value...] (set multiple hash fields to multiple values)//重點掌握
hmget key field [field...] (get the values of all the given hash fields)//重點掌握
hsetnx key field value (set the value of a hash field,only if the field does not exist)//了解
hexists key field (determine if a hash field exists)//掌握了解
hkeys key (get all the fields in a hash)//掌握了解
hvals key (get all the values in a hash)//掌握了解
hdel key field [field...] (delte one or moew hash fields)//掌握了解
hlen key (get the number of fields in a hash)
hgetall key (get all the fields and values in a hash)
hincrby key field increment (increment the integer value of a hash field by the given increment)
hincrbyfloat key field increment (increment the float value of a hash field by the given amount)
hstrlen key field (get the length of the value of a hash field)
hscan key cursor [match pattern] [count count] (incrementally iterate hash fields and associated values)//TODO 待研究

如何理解Redis裏面的Hash數據結構

準確的說是這種類型
    Map<String key,Map<String field,String value>>
    Map<String key,JavaBean javaBean>
    userinfo [id:1,name:xxx,friends:10...]
redis裏使用的就是如此的數據結構,有點像java中對象的屬性名和屬性值來存儲,即key-value鍵值。
備註:類似java中的HashMap<String,Object>與Python總的字典結構

list數據結構相關命令

lpush key value [value...] (prepend one or multiple values to a list)//重要掌握
lpushx key value (prepend a value to a list,only if the list exists)
rpush key value [value...] (append one or multiple to a list)//重要掌握
rpushx key value [append a value to a list,only if the list exists]
lpop key (remove and get the first element in a list)//重要掌握
rpop key (remove and get the last element in a list)//重要掌握
rpoplpush source destination (remove the last element in a list,prepend it to another list and return it)//重要掌握
brpoplpush source destination timeout (pop a value from a list,push it to another list and return it;or block until one is available)//重要掌握,可以用這個方法做阻塞隊列
llen key (get the length of a list)
lrange key start stop (get a range of elements form a list)//重要掌握
blpop key [key ...] timeout (remoce and get the first element in a list,or block until one is available)
brpop key [key ...] timeout (remove and get the last element in a list,or block until one is available)
lindex key index (get an element form a list by its index)
linsert key before|after pivot value (insert an element before or after another element in a list)
lset key index value (set the value of an element in a list by its index)
ltrim key start stop (trim a list to the specified range)
lrem key count value (remove elements from a list )

備註:redis中的list數據結構更像是隊列結構,並且其可以實現阻塞隊列功能。
所以可能用來做消息隊列簡單實現,但是我個人並不推薦使用redis做消息隊列,
可以使用更標準的消息中間件來做隊列服務,例如RabbitMQ。

redis事務相關命令

multi (mark the start of a transaction block,類似於開啟一個事務)//重點掌握
exec (execute all commands issued after multi,類似於提交事務)//重點掌握
discard (discard all commands issued after multi,類似回滾事務)//重點掌握
watch key [key ...] (watch the given keys to determine executio of the multi/exec block)//重點掌握
unwatch (forget about all watched keys)//重點掌握


關於watch說明,由於redis是單線程的,在redis2.2之前,沒有引入watch功
能,如果client_x開啟事務了,對a變量執行更新,但是此時還沒提交事務,在這
個過程中如果client_y對變量a也執行了更新操作,
那麽對於clinet_x來說它讀的a變量已經發生變化了,但是它自己並不知道,就導
致業務處理上就錯了,所以在redis2.2之後引入了watch功能,它可以監控key
是否變化,如果在開啟事務後提交事務前有其它線程對這個key執行過更新操作,那
麽本次提交事務就會失敗,就會回滾。

redis定位(GEO)相關命令

備註:redis geo功能是redis3.2之後才支持的,使用需註意
geoadd locationSet longitude latitude name [longitude latitude name...](增加地址坐標使用經度和緯度和定位)
geopos locationSet name [name] (顯示某個地址的坐標)
geodist locationSet location_x location_y [unit] (計算地理位置兩點的距離)
georadius locationSet longitude  latitude radius m|km|ft|mi  [WITHCOORD] [WITHDIST] [ASC|DESC] [COUNT count] (範圍查找)
georadiusbymemer location-set location radius m|km|ft|mi [WITHCOORD] [WITHDIST] [ASC|DESC] [COUNT count] (範圍查找)

No-sql之redis常用命令