1. 程式人生 > >Redis在Window服務下的啟動和使用

Redis在Window服務下的啟動和使用

開啟服務端命令:redis-server.exe redis.windows.conf

開啟客戶端命令:redis-cli.exe -h 127.0.0.1(目標IP)  -p  6379(預設埠號,不建議修改)

redis設定密碼和修改埠教程:點選開啟連結



在python中使用Redis

import redis
from redis import Redis
# 建立連線池:  
# redis-py使用connection pool來管理對一個redis server的所有連線,避免每次建立、釋放連線的開銷。
# 預設,每個Redis例項都會維護一個自己的連線池。可以直接建立一個連線池,然後作為引數Redis,
# 這樣就可以實現多個Redis例項共享一個連線池。
POOL=redis.ConnectionPool(host='127.0.0.1', port=6379)
CONN=redis.Redis(connection_pool=POOL)


#列表型別操作
CONN.rpush('lmw_list','a','b','c') #把列表傳送的伺服器的Redis上 右邊開始  ['c' ,'b','a']
CONN.lpush("lmw_list",'a','b','c') #把列表傳送的伺服器的Redis上 左邊開始  ['a' ,'b','c']


CONN.llen("lmw_origin") # 查詢lmw_origin的長度
CONN.lpop("lmw_list")   # 取出lmw_list左邊的值


CONN.delete("lmw_origin") # 刪除列表


#字串操作
CONN.set("lmw_reset",1)
CONN.get("lmw_reset")

Django-redis使用:
     import django_redis
     conn = django_redis.get_redis_connection()

Django-redis:封裝好的redis連線池

一、安裝:
	pip install django-redis

二、作為 cache backend 使用配置

in settings.py

	CACHES = {
	    "default": {
	        "BACKEND": "django_redis.cache.RedisCache",
	        "LOCATION": "redis://127.0.0.1:6379",
	        "OPTIONS": {
	            "CLIENT_CLASS": "django_redis.client.DefaultClient",
	            #套接字超時設定
	            #"SOCKET_CONNECT_TIMEOUT": 5,  # in seconds 
            	#"SOCKET_TIMEOUT": 5,  # in seconds

            	#配置預設連線池
            	# "CONNECTION_POOL_KWARGS": {"max_connections": 100},
	        }
	    }
	}

in view.py
	from django.core.cache import cache  
	def index(request):
		cache.set("busy", "python", timeout=60*60) # 超時單位:秒 
	    value = cache.get("busy")  # python

	    #django-redis 支援永不超時設定.
		    # timeout=0 立即過期
			# timeout=None 永不超時
			# cache.set("key", "value", timeout=None)

		# 使用萬用字元搜尋 、刪除
			# cache.keys("foo_*")  # 搜尋 ["foo_1", "foo_2"]  
			# cache.delete_pattern("foo_*") # 刪除 會返回刪掉的鍵的數量

		# 檢視連線池已經開啟多少連線:
		# from django_redis import get_redis_connection
		# r = get_redis_connection("default")  
		# connection_pool = r.connection_pool
		# print("Created connections so far: %d" % connection_pool._created_connections)

Redis 擁有五種型別:String  list   set   zset(有序集合)  hash(雜湊)

三、Hash操作
	conn.hset(name, key, value) #name對應的hash中設定一個鍵值對(不存在,則建立;否則,修改)
	conn.hmset('xx', {'k1':'v1', 'k2': 'v2'})  #在name對應的hash中批量設定鍵值對
	conn.hget(name,key)  #在name對應的hash中獲取根據key獲取value
	conn.hmget('xx', 'k1', 'k2') #在name對應的hash中獲取多個key的值

	hlen(name)  # 獲取name對應的hash中鍵值對的個數
 	hgetall(name)  #獲取name對應hash的所有鍵值

 	hvals(name)  # 獲取name對應的hash中所有的value的值

 	hexists(name, key)  # 檢查name對應的hash是否存在當前傳入的key

 	hdel(name,*keys) # 將name對應的hash中指定key的鍵值對刪除

 	hincrby(name, key, amount=1)  # 自增name對應的hash中的指定key的值,不存在則建立key=amount

 	hincrbyfloat(name, key, amount=1.0) # 自增name對應的hash中的指定key的值,不存在則建立key=amount

 	hscan(name, cursor=0, match=None, count=None) # 增量式迭代獲取,對於資料大的資料非常有用,hscan可以實現分片的獲取資料,
                                                      # 並非一次性將資料全部獲取完,從而放置記憶體被撐爆

 	hscan_iter(name, match=None, count=None) # 利用yield封裝hscan建立生成器,實現分批去redis中獲取資料


四、String:
	set key value      設定指定 key 的值 set luo "哈哈"
	get key			   獲取指定 key 的值。 get luo 

	getrange key start end  返回 key 中字串值的子字元 getrange luo 0 1

	getset key value   將給定 key 的值設為 value ,並返回 key 的舊值(old value)。

	MGET key1 [key2..] 獲取所有(一個或多個)給定 key 的值。	

	SETNX key value    只有在 key 不存在時設定 key 的值。

	STRLEN key         返回 key 所儲存的字串值的長度。

	MSET key value [key value ...]   同時設定一個或多個 key-value 對。


五、list:
	BLPOP key1 [key2 ] timeout  移出並獲取列表的第一個元素, 如果列表沒有元素會阻塞列表直到等待超時或發現可彈出元素為止。
	BRPOP key1 [key2 ] timeout  移出並獲取列表的最後一個元素, 如果列表沒有元素會阻塞列表直到等待超時或發現可彈出元素為止。
	LINDEX key index  			通過索引獲取列表中的元素
	LLEN key    				獲取列表長度
	LPOP key 					移出並獲取列表的第一個元素

	LPUSH key value1 [value2]   將一個或多個值插入到列表頭部
	LPUSHX key value 			將一個值插入到已存在的列表頭部
	LRANGE key start stop       獲取列表指定範圍內的元素

	LREM key count value 		移除列表元素

	LSET key index value    	通過索引設定列表元素的值
	LTRIM key start stop 		對一個列表進行修剪(trim),就是說,讓列表只保留指定區間內的元素,不在指定區間之內的元素都將被刪除。

	RPOP key 					移除並獲取列表最後一個元素
	RPUSH key value1 [value2]   在列表中新增一個或多個值
	RPUSHX key value 			為已存在的列表新增值

redis 相當於一臺電腦的記憶體,訪問速度快


redis一般跟資料庫搭配使用。
	客戶端請求資料,先去redis伺服器找資料,沒有去資料庫找

缺點:
	1、如果一臺電腦當做redis伺服器,斷電資料丟失
	2、儲存容量有限

用途:
	1、redis可以做快取
	2、redis可以做訊息佇列

特性:
	1、可以做資料持久化
	2、支援存放多種資料格式(5種)
		{
			"k1":"python" # "666"
			"k2": 666  # redis會轉化給 “666”

			"k4":{ #redis只關注第一層的格式 
				"n1":'xxx', # 'xxx' 改為 {'a':1} ,這是我們定義格式,
				"n2":'iii'
			}
		}

本質:將資料儲存到記憶體中