python之redis的增删改查
Redis简单增删改查例子
例一:字符串的增删改查
#增加一个key为ay_key的值 127.0.0.1:6379> set ay_key "ay" OK #查询ay_key的值 127.0.0.1:6379> get ay_key "ay" #修改ay_key的值 127.0.0.1:6379> set ay_key "new_ay" OK 127.0.0.1:6379> get ay_key "new_ay" #修改ay_key名称 127.0.0.1:6379> rename ay_key new_ay_key OK 127.0.0.1:6379> keys * 1) "new_ay_key" #删除ay_key 127.0.0.1:6379> del ay_key (integer) 0 #查询是否存在ay_key 0 127.0.0.1:6379> exists ay_key (integer) 0
例二:Set集合的增删改查
#删除当前选择数据库中的所有key 127.0.0.1:6379> flushdb OK #生成set集合,添加4个数据 127.0.0.1:6379> sadd set_ay_key "ay" "al" "xy" "xl" (integer) 4 #查询set里面所有值 127.0.0.1:6379> smembers set_ay_key 1) "xy" 2) "al" 3) "ay" 4) "xl" #删除value为"xl" , 返回 1 如果没有返回 0 127.0.0.1:6379> srem set_ay_key "xl" (integer) 1 127.0.0.1:6379> smembers set_ay_key 1) "xy" 2) "al" 3) "ay" #添加value为"xl" 127.0.0.1:6379> sadd set_ay_key "xl" (integer) 1 127.0.0.1:6379> smembers set_ay_key 1) "xy" 2) "al" 3) "ay" 4) "xl" #添加value为"xl" 添加不进去,但也不报错,set是不允许重复的 127.0.0.1:6379> sadd set_ay_key "xl" (integer) 0 #不多解释 127.0.0.1:6379> sadd set_ay_key "xl" (integer) 0 #不多解释 127.0.0.1:6379> sadd set_ay_key "xl" (integer) 0
例三:List集合的增删改查
#添加key为list_ay_key的list集合 127.0.0.1:6379> lpush list_ay_key "ay" "al" "xy" "xl" (integer) 4 #查询key为list_ay_key的集合 127.0.0.1:6379> lrange list_ay_key 0 -1 1) "xl" 2) "xy" 3) "al" 4) "ay" #往list尾部添加元素 127.0.0.1:6379> rpush list_ay_key "together" (integer) 5 #往list头部添加元素 127.0.0.1:6379> lpush list_ay_key "first" (integer) 6 #查询list集合 127.0.0.1:6379> lrange list_ay_key 0 -1 1) "first" 2) "xl" 3) "xy" 4) "al" 5) "ay" 6) "together" #更新index为0的值 127.0.0.1:6379> lset list_ay_key 0 "update_first" OK 127.0.0.1:6379> lrange list_ay_key 0 -1 1) "update_first" 2) "xl" 3) "xy" 4) "al" 5) "ay" 6) "together" #删除index为1上的值 127.0.0.1:6379> lrem list_ay_key 1 "update_first" (integer) 1 127.0.0.1:6379> lrange list_ay_key 0 -1 1) "xl" 2) "xy" 3) "al" 4) "ay" 5) "together"
例四:Hash集合(类似Java)的增删改查
127.0.0.1:6379> flushdb OK #生成hash集合,并添加key 为uuid_one value 为"12345" 127.0.0.1:6379> hset hash_ay_key "uuid_one" "12345" (integer) 1 127.0.0.1:6379> hlen hash_ay_key (integer) 1 #返回集合所有的key 127.0.0.1:6379> hkeys hash_ay_key 1) "uuid_one" #返回集合所有value 127.0.0.1:6379> hvals hash_ay_key 1) "12345" #集合添加值 127.0.0.1:6379> hset hash_ay_key "uuid_two" "22222" (integer) 1 #集合添加值 127.0.0.1:6379> hset hash_ay_key "uuid_three" "33333" (integer) 1 #获得key为uuid_one的值 127.0.0.1:6379> hget hash_ay_key uuid_one "12345" #删除key为uuid_three的值 127.0.0.1:6379> hdel hash_ay_key uuid_three (integer) 1 127.0.0.1:6379> hkeys hash_ay_key 1) "uuid_one" 2) "uuid_two" #获得所有,包括key和value 127.0.0.1:6379> hgetall hash_ay_key 1) "uuid_one" 2) "12345" 3) "uuid_two" 4) "22222" #更新key为uuid_one的值 127.0.0.1:6379> hset hash_ay_key uuid_one "11111" (integer) 0 127.0.0.1:6379> hset hash_ay_key "uuid_one" "11111" (integer) 0 127.0.0.1:6379> hgetall hash_ay_key 1) "uuid_one" 2) "11111" 3) "uuid_two" 4) "22222"
例四:SortedSet集合的增删改查
SortedSet是有序的set集合
#sorted set添加值ay 排序值为 1 127.0.0.1:6379> zadd zset_ay_key 1 "ay" (integer) 1 127.0.0.1:6379> zadd zset_ay_key 2 "al" (integer) 1 127.0.0.1:6379> zadd zset_ay_key 3 "xy" (integer) 1 127.0.0.1:6379> zadd zset_ay_key 4 "xl" (integer) 1 #查询所有的值 127.0.0.1:6379> zrange zset_ay_key 0 -1 1) "ay" 2) "al" 3) "xy" 4) "xl" #删除所有的值 127.0.0.1:6379> zrem zet_ay_key "xl" (integer) 0 127.0.0.1:6379> zrange zset_ay_key 0 -1 1) "ay" 2) "al" 3) "xy" 4) "xl"
有序集合参考下面文章:
http://www.runoob.com/redis/redis-sorted-sets.html
各种数据类型及代码示例:
"""Redis数据类型:
1. <set key value>
类型 : String(字符串)
简介: 二进制安全
特性 : 可以包含任何数据,比如jpg图片或者序列化的对象,一个键最大能存储512M
场景: /
2. <hset major_key key value>
类型 : Hash(字典)
简介: 键值对集合,即编程语言中的Map类型
特性 : 适合存储对象,并且可以像数据库中update一个属性一样只修改某一项属性值(Memcached中需要取出整个字符串反序列化成对象修改完再序列化存回去)
场景: 存储、读取、修改用户属性
3. <头部:lpush key value1 value2 ... 末尾:rpush key value1 value2 ...> 可添加一个或多个值
类型 : List(列表)
简介: 链表(双向链表)
特性 : 增删快,提供了操作某一段元素的API
场景: 1.最新消息排行等功能(比如朋友圈的时间线) 2.消息队列
4. <sadd key member1 member2 ...> 可添加一个或多个值
类型 : Set(集合)
简介: 哈希表实现,元素不重复
特性 : 1.添加、删除,查找的复杂度都是O(1) 2.为集合提供了求交集、并集、差集等操作
场景: 1.共同好友 2.利用唯一性,统计访问网站的所有独立ip 3,好用推荐时,根据tag求交集,大于某个阈值就可以推荐
5. <zadd key score1 member1 score2 member2 ...> 可添加一个或多个值
类型 : Sorted Set(有序集合)
简介: 将Set中的元素增加一个权重参数score,元素按score有序排列
特性 : 数据插入集合时,已经进行天然排序
场景: 1.排行榜 2.带权重的消息队列
键值相关命令:
1. keys * 查看当前所有的key
2. exists name 查看数据库是否有name这个key
3. del name 删除key name
4. expire confirm 100 设置confirm这个key100秒过期
5. ttl confirm 获取confirm 这个key的有效时长
6. select 0 选择到0数据库 redis默认的数据库是0~15一共16个数据库
7. move confirm 1 将当前数据库中的key移动到其他的数据库中,这里就是把confire这个key从当前数据库中移动到1中
8. persist confirm 移除confirm这个key的过期时间
9. randomkey 随机返回数据库里面的一个key
10. rename key2 key3 重命名key2 为key3
11. type key2 返回key的数据类型
服务器相关命令:
1. ping PING返回响应是否连接成功
2. echo 在命令行打印一些内容
3. select 0~15 编号的数据库
4. quit /exit 退出客户端
5. dbsize 返回当前数据库中所有key的数量
6. info 返回redis的相关信息
7. config get dir/* 实时传储收到的请求
8. flushdb 删除当前选择数据库中的所有key
9. flushall 删除所有数据库中的数据库
Tips:
打开cmd输入 redis-cli.exe 即可进入redis命令行
"""
# -*- coding:utf-8 -*-
from redis import StrictRedis
__author__ = 'Evan'
class RedisHandle(object):
def __init__(self, host='localhost', port=6379):
self.host = host
self.port = port
# 连接redis数据库
self.client = StrictRedis(host=self.host, port=self.port, db=0, password='')
print('连接redis数据库成功!')
def write_data(self, key, value):
self.client.set(key, value)
def get_data(self, key):
value = self.client.get(key)
return value
def get_all_data(self):
all_keys = []
if self.client.keys():
for i in self.client.keys():
key = i.decode('ascii')
value = self.get_data(i).decode('ascii')
all_keys.append({key: value})
else:
all_keys = None
print('find total items:\n{}'.format(all_keys))
return all_keys
def delete_data(self, key):
self.client.delete(key)
print('delete the key: {}'.format(key))
if __name__ == '__main__':
redisDb = RedisHandle()
redisDb.write_data('name', 'evan')
redisDb.get_all_data()
redisDb.delete_data('name')
redisDb.get_all_data()

浙公网安备 33010602011771号