作者前言
?? ??????????????????????
??? 作者介紹: ????
?? ?????????????? ??
??作者id:老秦包你會, ??
簡單介紹:??????????????????????????????
喜歡學(xué)習(xí)C語言和python等編程語言,是一位愛分享的博主,有興趣的小可愛可以來互討 ????????????????
??個人主頁::小小頁面??
??gitee頁面:秦大大??
????????????????
?? 一個愛分享的小博主 歡迎小可愛們前來借鑒??
安裝Redis
Readis的優(yōu)點
- Reids是非關(guān)系型數(shù)據(jù)的代表,里面儲存的數(shù)據(jù)類型十分多樣
- Reids是內(nèi)存型數(shù)據(jù),讀寫快速
- 應(yīng)用十分廣泛
安裝Redis
# 添加EPEL倉庫,更新yum源
sudo yum install epel-release
sudo yum update
# 安裝Redis數(shù)據(jù)庫
sudo yum -y install redis
# 啟動Redis服務(wù)
sudo systemctl start redis
# 進入Redis命令行模式操作
redis-cli
# 退出redis
exit
配置redis
# 進入到配置文件
sudo vim /etc/redis.conf
# 一般而言,配置文件會在這個路徑下
# 允許被遠程連接,注釋掉這一行
# bind 127.0.0.1
# 為redis設(shè)置密碼,取消注釋
requirepass foobared
# foobared為密碼,可以自己更改
# 保存后重啟
sudo systemctl restart redis
# 因為設(shè)置了密碼,所以有任何操作出現(xiàn)了
(error) NOAUTH Authentication required
# 可以先輸入密碼,1223456是具體的密碼
auth 123456
注意一下,進入到redis命令模式后我們要輸入auth 123456 后面的操作就不用再輸入密碼了
判斷redis是否正常運行,我們輸入ping來看看
如果回復(fù)pong就是運行成功了
Reids分區(qū)
如同是MySQL里分庫一樣,對不同的數(shù)據(jù)進行分區(qū)操作,有利于提高數(shù)據(jù)庫的效率。通過利用多臺計算機內(nèi)存的和值,允許我們構(gòu)造更大的數(shù)據(jù)庫
# 選擇redis的分區(qū)
select index
# index是分區(qū)的編號,只能是數(shù)字,默認(rèn)從0開始,一般最大編號是255
Redis數(shù)據(jù)類型
有string(字符串)、 hash(哈希)、 set(集合)、list(鏈表)、sorted set,
圖中的寫法是讓我們可以理解大概是啥類型
啥是鏈表
鏈表包含列表
列表形式(通過索引訪問元素)
方向是從左往右,而鏈表是從左往右和從右往左的
Redis操作
string(字符串)
redis中,所有的數(shù)據(jù)形式都是由鍵值對組成的,即為 {key: value} ,其中說的數(shù)據(jù)類型,都是針對值而言
# 獲取所有的鍵,星號* 表示任意匹配
keys *
keys 1*
# 設(shè)置值
set key value
# 獲取指定的值
get key
# 將給定key的值設(shè)為value,并返回key原來的值
getset key value
# 獲取一個或多個給定key的值,鍵之間以空格隔開
mget key1 key2
# 設(shè)置值,并將key的過期時間設(shè)為n(以秒為單位)
setex key n value
當(dāng)這個key超過這個時間,就會不存在,為啥會這樣呢 ?
原因是redis的全稱為內(nèi)存型數(shù)據(jù)庫,數(shù)據(jù)本身是保存在硬盤里面的,當(dāng)啟動redis 就會把所有數(shù)據(jù)寫到內(nèi)存里面去,結(jié)束就會保存到硬盤里面
# 當(dāng)key不存在時,設(shè)置值
setnx key value
# 返回key所儲存的字符串長度
strlen key
# 同時設(shè)置一個或多個鍵值對
mset key1 value1 key2 value2
# 同時設(shè)置一個或多個鍵值對,當(dāng)且僅當(dāng)所有給定key都不存在
msetnx key1 value1 key2 value2
需要注意的是使用msetnx要保證所有的可以的key不存在
hash(哈希)
哈希里面包含字典
字典保存的形式是{key : value}
# 將哈希key中的字段field設(shè)為value
hset key field value
# 獲取存儲在哈希中指定字段的值
hget key field
查看h_num1 中的field字段的值,我們可以理解為h_num1={“field”: “100”}
# 獲取在哈希中指定key的所有字段和值
hgetall key
# 獲取所有哈希表中的字段
hkeys key
# 查看哈希key中指定的字段是否存在
hexists key field
存在返回1,不存在返回0
# 取哈希中所有值
hvals key
注意一下key和filed是不一樣的,key是哈希的名稱,filed是哈希里面的字段名
# 刪除一個或多個哈希字段
hdel key field1 field2
# 獲取哈希中字段的數(shù)量
hlen key
# 獲取哈希中字段的數(shù)量
hlen key
# 獲取所有給定字段的值
hmget key field1 field2
# 只有在字段field不存在時,設(shè)置哈希字段的值。
hsetnx key field value
list(鏈表)
在python中,列表的頭部: 列名[0] 尾部:列名[-1] ,而鏈表是沒有頭部和尾部 的,兩邊操作都是可以的,為了更好的區(qū)分,會認(rèn)為鏈表有頭部和尾部
# 將一個或多個值寫到列表頭部
lpush key value1 value2
需要注意的是這里寫入不是和python列表一樣的寫入,而是推入 比如我們要寫入1 2 3
而結(jié)果是3 2 1 ,當(dāng)1寫入到第一個位置,2再寫入就會把1 推到第二個位置,2占據(jù)第一,依次往復(fù),下面的rpush命令也是一樣的,還有注意的是如果內(nèi)存滿了,再寫入數(shù)據(jù)就會報錯
# 通過索引設(shè)置列表元素的值
lset key index value
可以修改和添加
# 在列表尾部中添加一個或多個值
rpush key value1 value2
# 獲取列表長度
llen key
# 通過索引獲取列表中的元素
lindex key index
# 獲取列表指定范圍內(nèi)的元素,從start到end
lrange key start end
# 在列表的元素前或者后插入元素,pivot為目標(biāo)值,value為需要插入的值
linsert key before|after pivot value
pivot是值,不是索引
# 移出并獲取列表的第一個元素
lpop key
# 移除并獲取列表的最后一個元素
rpop key
# 移除列表元素,count是數(shù)量
lrem key count value
跟python的pop()方法很像,而第三條語句是根據(jù)for循環(huán),把找到的第一數(shù)刪除掉
set(集合)
Redis的集合是 string 類型的無序集合,成員是唯一的,不能出現(xiàn)重復(fù)數(shù)據(jù)
# 查看集合
smembers key
需要注意的是集合是無序的,
# 向集合添加一個或多個成員
sadd key value1 value2
需要注意的是如果里面有相同的元素就不會添加
# 獲取集合的成員數(shù)
scard key
我們理解為長度也可以
# 返回給定所有集合的交集
sinter key1 key2
# 判斷value素是否是集合key的元素
sismember key value
存在返回1,不存在返回0
# 移除集合中一個或多個成員
srem key value1 value2
返回所有給定集合的并集
sunion key1 key2
跟mysql數(shù)據(jù)庫的外連接很像
zset(sorted set:有序集合)
Redis有序集合也是string 類型的集合,不允許重復(fù)的成員。不同的是每個元素都會關(guān)聯(lián)一個double類型的分?jǐn)?shù)。redis 是通過分?jǐn)?shù)來為集合中的成員進行從小到大的排序。
# 向有序集合添加一個或多個成員,或者更新已存在成員的分?jǐn)?shù)
zadd key value1 member1 value2 member2
這樣要注意一下,這里的先寫值,再寫字段,字段是唯一的,值可以相同,但是有序集合里面存儲的是字段,不存儲值,我們可以理解字段相當(dāng)于變量,變量里面有值
# 獲取有序集合的成員數(shù)
zcard key
# 查看有序集合中所有的成員
zrange key 0 -1
# 返回有序集合中指定成員的索引
zrank key member
# 移除有序集合中的一個或多個成員
zrem key member1 member2
需要注意的是,這里value都是字段,不是字段里面的值
其他操作
# 刪除當(dāng)前庫中的所有key
flushdb
# 刪除數(shù)據(jù)庫中的所有key
flushall
# 查看key的類型
type key
Python中的Redis操作
連接Redis
import redis
# db是分區(qū)
pool = redis.ConnectionPool(host='localhost', port=6379, decode_responses=True,
db=0)
r = redis.Redis(connection_pool=pool)
string
# 設(shè)置值,ex表示過期時間,可以不設(shè)置
r.set('key', 'value', ex=3)
# 獲取值
r.get('key')
# 當(dāng)key不存在時,設(shè)置值
r.setnx('key', 'value')
# 批量設(shè)置值
r.mget({'key1': 'value1', 'key2': 'value2'})
# 這時的鍵key1、key2不能有引號
r.mset(key1="value1", key2="value2")
# 批量獲取值
r.mget("key1", "key2")
r.mget(['key1', 'key2'])
# 設(shè)置新值并獲取原來的值
r.getset("key1", "value1")
# 返回key對應(yīng)值的字節(jié)長度(一個漢字3個字節(jié))
r.strlen("key")
hash?
# 單個增加或修改,存在就修改,沒有就新增
r.hset("hash1", "key1", "value1")
# 取hash1中所有的key
r.hkeys("hash1")
# 單個取hash1的key1對應(yīng)的值
r.hget("hash1", "key1")
# 取hash1的多個key對應(yīng)的值
r.hmget("hash1", "key1", "key2")
# 只能新建
r.hsetnx("hash2", "key2", "value2")
# 批量設(shè)置
r.hmset("hash1", {"key1": "value1", "key2": "value2"})
# 取出所有的鍵值對
r.hgetall("hash1")
# 得到所有鍵值對的hash長度
r.hlen("hash1")
# 得到所有的keys
r.hkeys("hash1")
# 得到所有的value
r.hvals("hash1")
# 判斷存在
r.hexists("hash1", "key1")
# 刪除鍵值對
r.hdel("hash1", "key1")
list
# 從左邊開始增加值,沒有就新建
r.lpush("list1", 11, 22, 33)
# 從右邊新增
r.rpush("list1", 11, 22, 33)
# 切片取出值,范圍是索引號0到-1(最后一個元素)
r.lrange("list1", 0, -1)
# 向已有的列表左邊添加元素,沒有的話無法創(chuàng)建
r.lpushx("list2", 10)
r.lpushx("list1", 77)
# 向已有的列表左邊添加元素,沒有的話無法創(chuàng)建
r.rpushx("list2", 10)
r.rpushx("list1", 77)
# 指定索引號進行修改
r.lset("list1", 2, 'lalala')
# 指定值進行刪除
# 將列表中左邊第一次出現(xiàn)的"11"刪除
r.lrem("list1", "11", 1)
# 刪除并返回
# 刪除并返回列表最左邊的元素
r.lpop("list1")
# 刪除并返回列表最右邊的元素
r.rpop("list1")
# 根據(jù)索引取值
# 取出索引是1的值
r.lindex("list1", 1)
set
# 新增
r.sadd("set1", 1, 2, 3, 4)
# 獲取元素個數(shù)
r.scard("set1")
# 獲取集合中所有的值
r.smembers("set1")
# 交集
r.sinter("set1", "set2")
# 獲取多個對應(yīng)的集合的并集
r.sunion("set1", "set2")
# 判斷是否是集合的成員
r.sismember("set1", 33)
# 指定值刪除
r.srem("set1", 1)
zset文章來源:http://www.zghlxwxcb.cn/news/detail-674357.html
# 新增
r.zadd("zset1", value1=1, value2=2)
r.zadd("zset1", 'value3', 3, 'value4', 4)
# 獲取有序集合的長度
r.zcard("zset1")
# 獲取有序集合中所有元素
r.zrange("zset1", 0, -1)
# 獲取有序集合中所有元素和分?jǐn)?shù)
r.zrange("zset1", 0, -1, withscores=True)
# 獲取值的索引號
r.zrank("zset1", "value1")
# 指定值刪除
# 刪除有序集合中的元素value1
r.zrem("zset1", "value1")
# 獲取值對應(yīng)的分?jǐn)?shù)
r.zscore("zset1", "value2")
# 刪除redis中的任意數(shù)據(jù)類型(string、hash、list、set、有序set)
# 刪除key為gender的鍵值對
r.delete("gender")
# 檢查名字是否存在
r.exists("zset1")
# 獲取類型
r.type("set1")
r.type("hash1")
# 查詢所有的Key
r.keys()
# 當(dāng)前redis包含多少條數(shù)據(jù)
r.dbsize()
在python里的方法和在redis里面是一樣的,沒有差別文章來源地址http://www.zghlxwxcb.cn/news/detail-674357.html
到了這里,關(guān)于數(shù)據(jù)庫第十五課-------------非關(guān)系型數(shù)據(jù)庫----------Redis的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!