redis基本操作

发布时间:2020-06-25 18:11:02 作者:听砜
来源:网络 阅读:313

NoSQL分类:

     1. memcache
       问题:
       - 数据存放到内存, 不能落地,持久化
       - 支持数据类型太少,只支持字符串

     2. MongoDB
       - 数据存放到内存, 解决了数据的持久化
       - 支持多种数据类型

     3. redis
       - 数据存放到内存, 解决了数据的持久化
       - 支持5大数据类型格式

       用的多:微博
常见操作
1. 对于key的所有操作

注:对于不存在的key或已过期的key/不过期的key,都返回-1
Redis2.8中,对于不存在的key,返回-2

2. 字符串操作

应用场景

在登录的时候,可以控制频控

3. 链表操作

场景: 长轮询Ajax,在线聊天时,能够用到

4. 集合set操作
5. 有序集合order set操作
6. Hash数据结构操作

安装REDIS模块

1. pip安装
pip3 install redis
2. 源码安装
wget https://pypi.python.org/packages/source/r/redis/redis-2.9.1.tar.gz
tar xvzf redis-2.9.1.tar.gz
cd redis-2.9.1
python setup.py install

PYTHON操作REDIS

redis连接实例是线程安全的,可以直接将redis连接实例设置为一个全局变量,直接使用

>>> import redis
>>> r = redis.Redis(host='localhost',port=6379,password='', db=0)
>>> r.set('guo','shuai')
True
>>> r.get('guo')
'shuai'
>>> r['guo']            
'shuai'
>>> r.keys()
['guo']
>>> r.dbsize()         #当前数据库包含多少条数据       
1L
>>> r.delete('guo')
1
>>> r.save()               #执行“检查点”操作,将数据写回磁盘。保存时阻塞
True
>>> r.get('guo');
>>> r.flushdb()        #清空r中的所有数据
True

我们发现,其实python操作redis中使用的方法非常的简单,和我们之前在命令行学习redis的时候,使用的方法是一样的

PIPELINE操作

管道(pipeline)是redis在提供单个请求中缓冲多条服务器命令的基类的子类。它通过减少服务器-客户端之间反复的TCP数据库包,从而大大提高了执行批量命令的功能

>>> p = r.pipeline()        --创建一个管道
>>> p.set('hello','redis')
>>> p.sadd('faz','baz')
>>> p.incr('num')
>>> p.execute()
[True, 1, 1]
>>> r.get('hello')
'redis'

管道的命令可以写在一起,如:

>>> p.set('hello','redis').sadd('faz','baz').incr('num').execute()
常见的一些应用场景
1. 统计页面点击数

论坛的每个帖子都要记录点击次数,而点击次数比回帖的次数的多得多。如果使用关系数据库来存储点击,可能存在大量的行级锁争用。所以,点击数的增加使用redis的INCR命令最好不过了

当redis服务器启动时,可以从关系数据库读入点击数,假设1237这个页面被访问了34634次,因此我们使用如下的方法初始化:

>>> r.set("visit:1237:totals",34634)
True

每当有一个页面点击,则使用INCR增加点击数即可

>>> r.incr("visit:1237:totals")
34635
>>> r.incr("visit:1237:totals")
34636

页面载入的时候则可直接获取这个值

>>> r.get ("visit:1237:totals")
'34636'

类似的场景:当页面登录发送验证码的时候,为了控制用户发送的次数,也可以采用这种方法进行频率控制

2. 如何保存一个对象数据

由于非关系数据库没有固定的列,因此如何去存储一个数据对象,我们可以使用hash类型保存多样化的对象

比如说,我们想要保存用户的年龄,email,手机号等内容

>>> r.hset('users:jdoe',  'name', "John Doe")
1L
>>> r.hset('users:jdoe', 'email', 'John@test.com')
1L
>>> r.hset('users:jdoe',  'phone', '1555313940')
1L
>>> r.hincrby('users:jdoe', 'visits', 1)
1L
>>> r.hgetall('users:jdoe')
{'phone': '1555313940', 'name': 'John Doe', 'visits': '1', 'email': 'John@test.com'}
>>> r.hkeys('users:jdoe')
['name', 'email', 'phone', 'visits']
3. 社交圈子数据

在社交网站中,每一个圈子(circle)都有自己的用户群。通过圈子可以找到有共同特征(比如某一体育活动、游戏、电影等爱好者)的人。当一个用户加入一个或几个圈子后,系统可以向这个用户推荐圈子中的人

我们定义这样两个圈子,并加入一些圈子成员

>>> r.sadd('circle:game:lol','user:debugo')
1
>>> r.sadd('circle:game:lol','user:leo')
1
>>> r.sadd('circle:game:lol','user:Guo')
1
>>> r.sadd('circle:soccer:InterMilan','user:Guo')
1
>>> r.sadd('circle:soccer:InterMilan','user:Levis')
1
>>> r.sadd('circle:soccer:InterMilan','user:leo')
1

获得某一圈子的成员

>>> r.smembers('circle:game:lol')
set(['user:Guo', 'user:debugo', 'user:leo'])

使用集合运算来得到几个圈子的共同成员

>>> r.sinter('circle:game:lol', 'circle:soccer:InterMilan')
set(['user:Guo', 'user:leo'])
>>> r.sunion('circle:game:lol', 'circle:soccer:InterMilan')
set(['user:Levis', 'user:Guo', 'user:debugo', 'user:leo'])
4. 反垃圾系统

获取某段时间所有数据排重值,这个使用Redis的set数据结构最合适了,只需要不断地将数据往set中扔就行了,set意为集合,所以会自动排重

5. Pub/Sub构建实时消息系统

Redis的Pub/Sub系统可以构建实时的消息系统,比如很多用Pub/Sub构建的实时聊天系统的例子。

使用办法:
订阅端: Subscribe 频道名称
发布端: publish 频道名称 发布内容

客户端例子:
redis 127.0.0.1:6379> subscribe news
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "news"
3) (integer) 1
1) "message"
2) "news"
3) "good good study"
1) "message"
2) "news"
3) "day day up"

服务端例子:
redis 127.0.0.1:6379> publish news 'good good study'
(integer) 1
redis 127.0.0.1:6379> publish news 'day day up'
(integer) 1
6. Session共享存入redis

我们可以把Session存入redis,来进行共享

存储配置:

pip3 install django-redis-sessions==0.5.6
SESSION_ENGINE = 'redis_sessions.session'
SESSION_REDIS_HOST = 'localhost'          
SESSION_REDIS_PORT = 6379                   
SESSION_REDIS_DB = 4                        
SESSION_REDIS_PASSWORD = ''               
SESSION_REDIS_PREFIX = 'session'
url(r'^set_session$', views.set_session),           # 保存session数据
url(r'^get_session$', views.get_session),           # 获取session数据
def set_session(request):
    """"保存session数据"""

    request.session['username'] = 'Django'
    request.session['verify_code'] = '123456'
    return HttpResponse('保存session数据成功')

def get_session(request):
    """获取session数据"""

    username = request.session.get('username')
    verify_code = request.session.get('verify_code')
    text = 'username=%s, verify_code=%s' % (username, verify_code)
    return HttpResponse(text)
127.0.0.1:6379> select 4
OK
127.0.0.1:6379[4]> keys *
1) "session:0bjyuegx0i5ivyuzpb8ezgo0b35u2z4v"
推荐阅读:
  1. PostgreSQL基本操作
  2. mysql基本操作

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

redis 基本操作

上一篇:java中定义数组的方法有哪些

下一篇:开源监控——nagios

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》