日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Redis常用命令小总

發布時間:2024/3/12 数据库 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Redis常用命令小总 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 寫在前面

這兩天在跟著伙伴學習做新聞推薦系統, 里面用到了數據庫的相關操作,又接觸到了mongodb和redis兩個新的數據庫,關于redis,這是一個高性能的key-value數據庫,非常適合海量數據庫的讀寫,常用類配合關系型數據庫做高速緩存的工作,之前在搭建大數據環境系列其實也裝過,但當時并沒有實戰的需求,所以裝完了就一直沒用, 也不會用, 正好這次做這個東西,有了實操的需求,所以想借著這個機會,整理下這次摸索中學習到的一些關于redis常用的命令,方便以后回查回看。 關于redis的原理, 我目前不懂, 如果后面有需求,也會整理噠, 這里只是整理下怎么用 ,而關于mongodb,這個后期也會整理下常用命令, 下面開始 😉

主要內容:

  • 安裝與連接
  • 庫相關操作
  • 不同數據類型下的常用命令(string, hash, set, zset)
  • Python操控Redis

OK,lets go!

2. 安裝與連接

之前也整理過一篇文章大數據開發環境搭建番外及總結:Redis和Anaconda環境的安裝搭建, 手動下載安裝包,解壓安裝的。

這里可以直接用sudo命令

# 安裝Redis服務器 sudo apt-get install redis-server# 查看redis服務器是否啟動 service redis-server status ps -aux|grep redis-server# 啟動Redis服務 redis-server [--daemonize yes][--port 6379] redis-server /etc/redis/redis.conf# 客戶端連接Redis redis-cli --raw[-h host -p port -a password]# 停止Redis 兩種方式 > redis-cli shutdown > kill redis-pid

連接之后,正常的話是這樣的界面:

3. 庫相關操作

這里是整理與庫相關的操作, redis.conf配置中默認16個庫,下標從0~15。進入客服端默認選中第0個庫,可以通過select命令進行切換,index表示庫的小標。

# 切換庫命令 127.0.0.1:6379> select 1# 刪除當前庫的數據 127.0.0.1:6379[1]> flushdb# 刪除所有庫的數據 127.0.0.1:6379[1]> flushall# 查看key的數量 127.0.0.1:6379> dbsize

關于key的常用操作:

# 查看所有key 127.0.0.1:6379> keys * 127.0.0.1:6379> keys *e # 還可以字符串匹配# 查找存在的key的數量 # 這個返回存在當前key的數量 # 作用: 我覺得一般會判斷某個key是否存在庫里面,如果大于0,說明存在key值 127.0.0.1:6379> exists key_name # 查看key的值對應的類型 # 返回key值的類型,有string, list, set, zset, hash和stream,如果不存在返回none # 作用:不同類型的值操作對應不同的操作命令,所以必須知道key的value類型才能進行后面的操作 127.0.0.1:6379> type key_name # 刪除key 127.0.0.1:6379> del key_name1[key_name2 key_name3 ....]

4. 不同數據類型下常用命令

這里整理不同數值類型下的操作命令, 一個好的習慣就是選中一個庫之后, 先用keys*看看大體上都是什么樣的key, 然后用type 某個key查看對應的值是什么, 這樣方便后面的操作。

4.1 如果value類型是string

字符串是Redis最常見的數據列, 能夠存儲任何形式字符串, 包括二進制格式,JSON格式,序列化等數據。

常用命令:

# set key value 給key設置值 127.0.0.1:6379> set key_name jiang 127.0.0.1:6379> get key_name # 當然這里還可以一下設置多個 mset key value [key value, ...] mget key [key, ..]# append key_name new_value: 將指定的key追加值,類似于在原來的值上做字符串拼接 127.0.0.1:6379> append key_name jiang# incr key_name: 在原來值基礎上值加1, 前提是類型是數字,不是字符串 # decr key_name: 原來基礎上減1 # 這兩個的作用: 在那種需要自增或者自減的情況下非常有用,比如用戶點擊了喜歡文章, 統計文章被喜歡次數的時候# strlen key_name: 獲取key_name對應值的字符串長度 # setrange key_name offset value: 在offset開始,用value覆蓋key_name的字符串值 # getrange key_name start end: 獲取key_name對應字符串值的某個范圍

4.2 如果value類型是list

如果key對應的value的類型是list列表, 那么常用命令:

# lpush key value [value ...] 左邊添加 # rpush key value [value ...] 右邊添加# lrange key start stop: 獲取指定范圍索引的元素# lindex key index: index位置的元素# llen: 列表長度# lrem key count value 刪除值為value的count個元素# lset key index value index位置的元素設置為value

4.3 如果value類型是hash

hash類似于java中的HashMap,在Reids中做了更多的優化。此外hash是一個sytring類型的field和value的映射表,特別適合用于存儲對象。例如我們可以借用hash數據結構來存儲用戶信息,商品信息等。

常用命令:

# hset key_name filed value 哈希表中的field字段賦值value # hget key_name field 返回field對應的value # 同樣有hmset hmget 多個一起操作# hgetall key_name: 返回所有的field和值 # hdel key_name field[field...] 刪除指定的field# hexists key_name field 查看field是否存在 # hkeys: 所有的field # hvalues: 所有field的值

4.4 如果value類型是set

如果value是set, 常用命令:

# sadd key_name member[member...] 添加元素到key_name下的集合中 # semebers key_name: 查看key_name下的集合的值 # sismember key member: 元素member是否在集合key_name中 # scard key_name: key_name集合長度 # srem key_name member[member..] 刪除元素值# srangemember key_name [count]: 隨機返回集合中的count個隨機元素 # spop key_name [count]: 刪除并返回一個或多個隨機元素 # sscan key_name 0 match patten: 瀏覽key_name的value, 對pattern進行匹配

下面幾個集合之間的操作也挺常用

# sinter key_name1 key_name2... : 求集合交集 # sinterstore des_key key_name1 key_name2.. : 獲取key_name1和key_name2的交集存到des_key里面去# 把sinter換成sunion就是求集合并集了

4.5 如果value類型是zset

如果value是zset, 這個很常用, 比較典型的一個場景是用戶的推薦列表, 需要是排好序的一個集合, 這個zset實際上是sorted set, 是會按照某個值排序的。常用命令:

# zadd key_name score member[score member...]: 將一個或多個member元素及score加入到有序集合key_name中, 這里會默認按照score排序, 如果member已經存在,就會更新score值 # zrange key start stop [withscores]: 這個是獲取某個范圍內的元素,可以帶score值 # zrevrange key start stop [withscores]: 和上面一樣,不過上面是從小到大排序,這里是score從大到小排序 # zrank key_name member: 從小到大排序之后獲取member在zset中的位置 # zrevrank key_name member: 從大到小排序之后,獲取member在zset中的位置# zrem key member[member...]: 刪除member # zcard key_name: 返回集合大小 # zscore key_name member: 獲取member的分數值# zrangebyscore key_name min max [withscores]: 返回score在[min, max]之間的member # zrevrangebyscore key_name min max # zremrangebyscore key_name min max: 刪除score在[min, max]之間的member # zrankbyscore key_name min_row max_row: 刪除行在[min_row, max_row]之間的member # zcount key_name min max: 統計score在[min, max]區間的元素個數# zincrby key_name value member: 對key_name里面的member元素的值增加value 這個也很常用

下面集合的操作很常用:

zinterstore des_key number key_name1 key_name2 .. aggregate_method # 獲取key_name1 key_name2元素的交集存到des_key中, number表示合并的key的數量 zunionstore des_key number key_name1 key_name2 .. aggregate_method# 獲取key_name1 key_name2元素的并集存到des_key中# 聚合方式有max sum min, 如果有重復member的時候分數的處理方式

這個并集操作蠻有用的, 比如完成zset的復制操作, 場景是每個用戶都有一個自己的推薦頁列表,那么就需要在總的hot_list里面, 給每個用戶單獨開一個hot_list, 就能用到這個操作, 代碼是:

# 復制hotlist一份到userid鍵中 zunionstore userid 1 hot_list

當然, 真實操作的時候,是在python里面進行的操作,這時候要這么做:

import redisredis_db = redis.StrictRedis(host="127.0.0.1", port=6379, db=0, decode_responses=True) redis_db.zunionstore(des_key, ["sourc_key1", "source_key2"..])

可以看到python基于redis模塊,進行操作還是非常方便的, 下面就來看下這個。

5. python操控redis

python中通過redis模塊操控redis, 安裝下

sudo pip3 install redis

連接redis的兩種方式:

# 直連模式,適合長期連接場景 r = redis.Redis(host='127.0.0.1',port=6379,db=0,password='') redis_db = redis.StrictRedis(host="127.0.0.1", port=6379, db=0, decode_responses=True)# 連接池模式: 用ConnectPool管理redis server的所有連接, 實現連接池共享 pool = redis.ConnectionPool(host="127.0.0.1",port=6379,db=0,password="",decode_responses=True, max_connections=10) r1 = redis.Redis(connection_pool=pool) # 第一個客戶端訪問 r2 = redis.Redis(connection_pool=pool) # 第二個客戶端訪問

基本操作的話,其實和上面非常類似, 只不過這里都換成了函數式操作。 針對不同的類型,簡單的整理幾個:

pool = redis.ConnectionPool(host="127.0.0.1", port=6379, db=0, password="", decode_responses=True, max_connections=10) r = redis.StrictRedis(connection_pool=pool)

string操作:

r.set('name', 'wuzhong') r.append('name', 'qiang') # name: wuzhongqiangr.mset({'age': '26', 'home': 'shandong'}) r.mget('name', 'age', 'home') # ['wuzhognqiang', '26', 'shandong']r.incrby('age', 5) r.get('age) # 26+5 r.incrbyfloat('age', 5.2) r.delete('name')

hash操作

r.hset('user1', 'name', 'zhangsan') r.hset('user1', 'age', '22') r.hincrbyfloat('user1', 'age', 0.5)# 一次性設置多個field和value user_dict = {'password':'123','gender':'M','home':'遼寧' } r.hmset('user1',user_dict) # 在user1對應的hash中批量設置鍵值對 r.hlen('user1') # 鍵的個數 r.hgetall('user1') # 獲取所有鍵值對 r.hkeys('user1') # map的鍵 r.hvals('user1') # map的值 hexists('user1', 'home') # 是否有home這個鍵

list操作

r.lpush('database','sql','mysql','redis') r.lset('database', 0, 'redisdb') # 對database對應的list中的某一個索引位置重新賦值

set操作

r.sadd("name","zhangsan") # 給name對應的集合中添加元素 r.sadd("name","zhangsan","lisi","wangwu")# zset操作 mapping = {'zhangsan':85,'lisi':92, 'wangwu':76 } r.zadd('C++',mapping,nx=True) # 在C++對應的有序集合中添加元素 r.zrange('C++',0,-1,withscores=True) r.zcard("C++") r.zcount('C++',min=0,max=90) r.zincrby(name='C++',value='lisi',amount=3) r.zrangebyscore('C++',70,90) r.zrank('C++','lisi')mapping = {'xuliu':74,'lisi':82, 'wangwu':87 } r.zadd('python',mapping,nx=True) r.zinterstore('sum_score_i',['C++','python'],aggregate='sum')r.zunionstore('sum_score_u',['C++','python'],'min') r.zrem('C++', 'zhangsan') r.zremrangebyscore('C++', min=80, max=100) r.zremrangebyrank('python', min=1, max=3)

最后在介紹個管道的操作, Redis 模塊默認在執行每次請求都會向連接池請求創建連接和斷開申請操作,如果想要在一次請求中指定多個命令,則可以使用pipline實現一次請求指定多個命令,并且默認情況下一次pipline 是原子性操作(即為一次操作)。

pipe = r.pipeline(transaction=True)pipe.set('name', 'jiangyou') pipe.set('age', 'age') pipe.execute()print(r.mget("name","age")) # ['jiangyou', 'age']

參考:

  • Python 操作redis有序集合(sorted set)
  • Redis基礎

總結

以上是生活随笔為你收集整理的Redis常用命令小总的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 色先锋资源网 | 在线无码va中文字幕无码 | 亚洲成人av免费在线观看 | 欧美18免费视频 | 黄页免费视频 | 99香蕉网 | 中文精品在线 | 亚洲第一毛片 | 亚洲av永久无码精品一区二区国产 | 一级片免费观看 | 亚洲丁香 | 天天插夜夜操 | 亚洲永久精品一区二区 | 麻豆精品免费视频 | 九九视频这里只有精品 | 伊人亚洲影院 | 日韩一级片av | 色葡萄影院 | 亚洲女人天堂 | 中文乱码人妻一区二区三区视频 | 九色91| 亚洲社区在线 | 久久中文字幕在线观看 | 韩国av在线免费观看 | 午夜av影视 | 国产av天堂无码一区二区三区 | 国产日韩一区二区三区在线观看 | 青青青免费在线视频 | 国产精品欧美久久久久久 | 中文字幕在线天堂 | 欧av在线 | 69人人 | 久久精品无码一区 | 国产精品久久久久毛片大屁完整版 | japanese av在线 | 欧美综合在线视频 | 中国丰满熟妇xxxx性 | 天天干天天弄 | av片免费在线 | 中文字幕亚洲视频 | 久久久久久久福利 | 五月婷婷六月综合 | 亚洲视频导航 | 99视频在线观看免费 | 国产手机av在线 | 日韩性猛交ⅹxxx乱大交 | 国产一区二区三区免费视频 | 亚洲精品综合久久 | jizz91| 日批毛片 | 日本手机看片 | 国产成人精品综合在线观看 | 日韩成人在线影院 | 欧美精品18videosex性欧美 | 体内精视频xxxxx| 国产欧美日韩综合精品一区二区三区 | 成人三级电影网站 | 老鸭窝成人 | av在线播放免费 | 男受被做哭激烈娇喘gv视频 | 影音先锋毛片 | 污污网站在线观看视频 | 动漫av一区 | 狠狠干狠狠爱 | 久久理论视频 | 91精品国产91久久久久久吃药 | 亚洲丝袜av | 91色在线播放 | 欧美激情 一区 | 国产精品一区二区三区高潮 | 网站久久久| 亚洲第九十九页 | 中文一区二区在线观看 | www国产91| 美女扒开腿免费视频 | 日本a级片视频 | 国产亚洲欧美一区二区三区 | 国产亚洲无 | 亚洲毛片在线免费观看 | 国产黄色大全 | 欧美高清精品一区二区 | 色综合九九| 久久视频一区二区 | 国产日韩一区二区在线 | 亚洲精品久久久久久久久久吃药 | 天天色天 | 欧美日韩一区二区三区在线 | av免费播放网站 | 国产成人无码精品久在线观看 | 国产伦一区二区三区 | 日韩成人av一区 | 91视频88av| 肥熟女一区二区三肥熟女 | 亚洲男人天堂2020 | 欧美福利视频一区二区 | 国产在线视频一区二区 | 亲切的金子餐桌片段的金子 | 国产crm系统91在线 | 国产永久毛片 |