欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Redis常用操作

程序员文章站 2022-05-20 13:26:03
Redis简介 Redis是完全开源免费的高性能Key Value数据库,有以下几个特点: Redis支持数据持久化,可以将内存中的数据保存至磁盘中,重启可以再次加载进行使用。 Redis不仅仅支持简单的Key Value类型的额数据,同时还提供list,set,zset(有序集合),hash等数据 ......

redis简介

redis是完全开源免费的高性能key-value数据库,有以下几个特点:

  • redis支持数据持久化,可以将内存中的数据保存至磁盘中,重启可以再次加载进行使用。
  • redis不仅仅支持简单的key-value类型的额数据,同时还提供list,set,zset(有序集合),hash等数据结构的存储。
  • redis支持数据的备份,即master-slave模式的数据备份。

redis基本操作

1、字符串相关操作

方法 说明 参数 说明 示例
set 设置值 ex 设定缓存时间/过期时间 set animal 'cat' ex 5
使用多个字段设置一个值,如设置一个用户信息 set user:joshua;age:24 "19950427"
get 获取值 get animal
通过多个字段获取值 get user:joshua;age:24
append 添加字符串 append animal " dog"
mset 添加多个值 mset user1 'joshua' user2 'root'
mget 获取多个值 mget user1 user2 animal
del 删除 del del animal
incr/decr 增加1/减少1 incr num\decr num #num事先设定了值

2、列表相关操作

方法 说明 示例
rpush 向列表的右端推入一个或多个值 rpush mylist joshua
lpush 向列表的左端推入一个或多个值 lpush mylist hello
rpop 移除列表最右端的元素 rpop mylist
lpop 移除列表最左端的元素 lpop mylist
lindex 查询某个偏移量的值 lindex mylist 0
lrange 查询某个偏移量范围的元素 lrange mylist 0 2
ltrim 截取一段值,其他值删掉 ltrim mylist 0 3
blpop 从非空列表最左端提取并删除一个元素,或者在timeout秒内等待可以弹出的元素出现 blpop mylist 0
brpop 从非列表最右端提取并删除一个元素,或者在timeout秒内等待可以弹出的元素出现 brpop mylist 0
rpoplpush 从source_list右端提取并删除一个元素,加入到desc_lsit 的最左边 rpoplpush mylist youlist
brpoplpush 从source_list最右端在timeout秒内提取元素并删除,加入到desc_list的最左边,如果source_list为空,则在timeout秒内等待元素弹出 brpoplpjush mylist youlist 5
lpushx 当key存在的时候向列表左端推入一个或多个值,否则不做任何处理 lpushx itslist 0
rpushx 当key存在的时候向列表的右端推入一个或多个值,否则不做任何操作

3、集合相关操作

方法 说明 示例
sadd/srem 集合增加一个元素/删除一个元素 sadd myset cat dog / srem myset cat
smembers 获得集合的所有元素 smembers myset
sismember 查看某个元素是否在集合中 sismember myset cat
sdiff 返回一个集合与其他集合不同的地方 sdiff myset1 myset2 # 注意是myset2中没有myset1的元素
sinter 返回几个集合的交集 sinter myset1 myset2
sunion 返回几个集合的并集 sunion myset1 myset2

4、散列(hash)操作

方法 说明 示例
hset 设置一个散列值 hset news:1 title "news title" # news:1的意思是设置id为1的news
hget 获取一个散列值 hget news:1 title
hsetnx 设置一个散列值,如果存在则不设置 hsetnx news:1 title "title"
hmset 设置多个散列值 hmset news:1 title content "content" is_valid 1
hmget 获取多个散列值 hmget news:1 title content is_valid
hdel 删除一个散列值 hdel news:1 title
hkeys 获取所有keys hkeys news:1
hvals 获取所有的values hvals news:1
hlen 获取散列包含域(属性)的数量 hlen news:1
hexists 判断是否存在 hexists news:1 title

python操作string

import redis


class test_string(object):
    def __init__(self):
        self.r = redis.strictredis(host='localhost', port=6379, db=0)

    def test_set(self):
        """
        设置一个值
        :return:
        """
        res = self.r.set('user2','joshua')
        print(res)

    def test_get(self):
        """
        获取一个值
        :return:
        """
        res = self.r.get('user2')
        print(res)

    def test_mset(self):
        """
        设置多个键值对
        :return:
        """
        d = {'user3': 'qi', 'user4': 'shuai'}
        res = self.r.mset(d)
        print(res)

    def test_mget(self):
        """
        获取多个键值对
        :return:
        """
        d = ['user3', 'user4']
        res = self.r.mget(d)
        print(res)

    def test_del(self):
        """
        删除一个键值对
        :return:
        """
        res = self.r.delete('user3')
        print(res)

    def test_incr(self):
        """
        增加1
        :return:
        """
        res = self.r.incr('num')
        print(res)

    def test_decr(self):
        """
        减少1
        :return:
        """
        res = self.r.decr('num')
        print(res)

    def test_append(self):
        """
        添加字符串
        :return:
        """
        res = self.r.append('user3','qi')
        print(res)

def main():
    t = test_string()
    # t.test_mset()
    # t.test_mget()
    # t.test_del()
    # t.test_set()
    # t.test_get()
    # t.test_incr()
    # t.test_decr()
    t.test_append()

if __name__ == '__main__':
    main()

python 操作列表

import redis


class test_list(object):
    def __init__(self):
        self.r = redis.strictredis(host='localhost', port=6379, db=0)

    def test_push(self):
        l_eat = ['joshua', 'amy']
        lres = self.r.lpush('eat2', *l_eat)
        print(lres)
        rres = self.r.rpush('eat2', *l_eat)
        print(rres)

    def test_pop(self):
        res = self.r.lpop('eat2')
        print(res)
        res = self.r.rpop('eat2')
        print(res)

    def test_lindex(self):
        # 获取某个偏移量的值
        res = self.r.lindex('eat2',0)
        print(res)

    def test_lrange(self):
        res = self.r.lrange('eat2',0,2)  # 获取某段偏移量的值
        print(res)
        res = self.r.lrange('eat2',0,-1)  # 获取列表所有值
        print(res)

    def test_ltrim(self):
        res = self.r.ltrim('eat2', 1,2)  # 窃取一段值,其他值删除掉
        print(res)
        res = self.r.lrange('eat2', 0, -1)
        print(res)

    def test_bpop(self):
        res = self.r.blpop('eat2',timeout=3)  # 在3秒内从列表左端删除一个元素
        print(res)
        res = self.r.brpop('eat2',timeout=3)  # 在3秒内从列表右端删除一个元素
        print(res)

    def test_rpoplpush(self):
        res = self.r.rpoplpush('mylist', 'youlist')  # 从mylist的右端删除一个元素,添加到youlist的最左边
        print(res)

    def test_brpoplpush(self):
        # 从mylist的右端删除一个元素,添加到youlist的最左边,如果mylist为空则等待3秒
        res = self.r.brpoplpush('mylist', 'youlist',timeout=3)
        print(res)

    def test_pushx(self):
        # 当key存在的时候才往列表左端插入一个数据
        res = self.r.lpushx('youlist', 1)
        print(res)

        # ~右端
        res = self.r.rpushx('itslist',1)
        print(res)


if __name__ == '__main__':
    t = test_list()
    # t.test_push()
    # t.test_pop()
    # t.test_lindex()
    # t.test_lrange()
    # t.test_ltrim()
    # t.test_blpop()
    # t.test_rpoplpush()
    # t.test_brpoplpush()
    t.test_pushx()

python操作集合

import redis


class test_set(object):
    def __init__(self):
        self.r = redis.strictredis(host='localhost',port=6379,db=0)

    def test_sadd(self):
        data = ['cat', 'dog']
        res = self.r.sadd('zoo1', *data)
        print(res)
        res = self.r.smembers('zoo1')  # 获得集合的所有元素
        print(res)

    def test_srem(self):
        # data = ['cat', 'dog']
        # res = self.r.srem('zoo', *data)  # 删除多个元素
        res = self.r.srem('zoo','dog')  # 删除单个元素
        print(res)
        res = self.r.smembers('zoo')
        print(res)

    def test_sinter(self):  # 获取两个集合的交集
        res = self.r.sinter('zoo','zoo1')
        print(res)

    def test_sunion(self):  # 获取两个集合的并集
        res = self.r.sunion('zoo','zoo1')
        print(res)

    def test_sdiff(self):  # 获取两个集合不同之处
        res = self.r.sdiff('zoo','zoo1')
        print(res)


if __name__ == '__main__':
    t = test_set()
    # t.test_sadd()
    # t.test_srem()
    # t.test_sinter()
    # t.test_sunion()
    t.test_sdiff()

python操作散列

import redis


class test_hash(object):
    def __init__(self):
        self.r = redis.strictredis(host='localhost', port=6379, db=0)

    def test_hset(self):  # 设置一个哈希值
        res = self.r.hset('news:1', 'title', 'news title')
        print(res)

    def test_hdel(self):  # 删除一个哈希值
        res = self.r.hdel('news:1', 'title')
        print(res)

    def test_hget(self):  # 获取一个值
        res = self.r.hget('news:1', 'title')
        print(res)

    def test_heists(self):  # 判断是否存在
        res = self.r.hexists('news:1', 'title')
        print(res)

    def test_hgetall(self):  # 获取所有哈希
        res = self.r.hgetall('news:1')
        print(res)

    def test_hmset(self):  # 设置多个哈希
        data = {'content':'this is content', 'data':'20190101'}
        res = self.r.hmset('news:1', data)
        print(res)

    def test_hmget(self):  # 获取多个哈希
        fields = ['content', 'data']
        res = self.r.hmget('news:1',fields)
        print(res)

    def test_hkeys(self):  # 获取所有keys
        res = self.r.hkeys('news:1')
        print(res)

    def test_hvalues(self):  # 获取所有values
        res = self.r.hvals('news:1')
        print(res)

    def test_hlen(self):  # 获取fields的数量
        res = self.r.hlen('news:1')
        print(res)

    def test_hsetnx(self):  # 设置一个哈希值,如果存在则不设置
        res = self.r.hsetnx('news:1', 'content', 'fuck')
        print(res)


if __name__ == '__main__':
    t = test_hash()
    # t.test_hset()
    # t.test_hdel()
    # t.test_hget()
    # t.test_heists()
    # t.test_hgetall()
    # t.test_hmset()
    # t.test_hmget()
    # t.test_hkeys()
    # t.test_hvalues()
    # t.test_hlen()
    t.test_hsetnx()